4x20 lcd ekranda 3 ve4. satırları kullanma

  • Konbuyu başlatan tunahurgh
  • Başlangıç tarihi

tunahurgh

Üye
Katılım
2 Mar 2021
Mesajlar
13
Puanları
3
Yaş
37
Merhaba arkadaşlar. 4x20 LCD ekrana yazı yazdıracağım ama sadece ilk iki satıra yazabiliyorum. CCS in lcd420.c kütüphanesini kullanınca lcd ye hiçbirşey yazamıyorum. lcd.c kütüphanesini kullanınca da sadece 2 satır aktif oluyor. Sorun ne olabilir.

Kod:
#include <16f877A.h>
#use delay(clock=20000000)
#fuses HS, NOWDT, NOPUT, NOLVP, NOCPD, NOPROTECT, NODEBUG, NOBROWNOUT, NOWRT

#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

#include <LCD.c> //LCD kütüphanesi ekleniyor
//#include <LCD420.c> //LCD kütüphanesi ekleniyor

void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
    
  
   set_tris_a(0xFF);

   lcd_init();
   delay_ms(100);
   lcd_gotoxy(1,1);  // calisiyor
   delay_ms(50);
   lcd_putc("BEN");  // çalismiyor 
   lcd_gotoxy(3,1);
   delay_ms(50);
   lcd_putc("BEN");  // çalismiyor 
   delay_ms(100);
/*    lcd_gotoxy(4,4); //calismiyor
    delay_ms(50);

  
   while(1)
   {   

   }
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,866
Puanları
509
Yaş
33
lcd.c 2x16 lcd için yani 3. 4. satırlara bir şey yazamaz.

LCD420.c yi çalıştırman lazım.
pin tanımlarını LCD420.c dosyası içinde yapman gerekiyor olabilir,
LCD420.c dosyasını buraya eklersen bakabiliriz.


Olmazsa şuradakini dene:
Bundada pin tanımlarını .c dosyasında yapman gerekiyor.
Aslında basit bir yöntemle bu halledilebilir ama kafa karıştırmayalım şimdi.
Flex_LCD420.c
https://www.ccsinfo.com/forum/viewtopic.php?t=28268
 
Konu Sah

tunahurgh

Üye
Katılım
2 Mar 2021
Mesajlar
13
Puanları
3
Yaş
37
lcd.c 2x16 lcd için yani 3. 4. satırlara bir şey yazamaz.

LCD420.c yi çalıştırman lazım.
pin tanımlarını LCD420.c dosyası içinde yapman gerekiyor olabilir,
LCD420.c dosyasını buraya eklersen bakabiliriz.


Olmazsa şuradakini dene:
Bundada pin tanımlarını .c dosyasında yapman gerekiyor.
Aslında basit bir yöntemle bu halledilebilir ama kafa karıştırmayalım şimdi.
Flex_LCD420.c
https://www.ccsinfo.com/forum/viewtopic.php?t=28268
Merhaba,
LCD420.c aşağıdaki gibidir.



Kod:
////////////////////////////////////////////////////////////////////////////
////                             LCD420.C                               ////
////            Driver for common 4x20 LCD modules                      ////
////                                                                    ////
////  lcd_init()   Must be called before any other function.            ////
////                                                                    ////
////  lcd_putc(c)  Will display c on the next position of the LCD.      ////
////                     The following have special meaning:            ////
////                      \f  Clear display                             ////
////                      \n  Go to start of second line                ////
////                      \b  Move back one position                    ////
////                                                                    ////
////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)     ////
////                                                                    ////
////  lcd_getc(x,y)   Returns character at position x,y on LCD          ////
////                                                                    ////
////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

// As defined in the following structure the pin connection is as follows:
//     B0  enable
//     B1  rs
//     B2  rw
//     B4  D4
//     B5  D5
//     B6  D6
//     B7  D7
//
//   LCD pins D0-D3 are not used and PIC B3 is not used.

struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;

#locate lcd = getenv("SFR:PORTB")                        // This puts the entire structure
                                     // on to port B

#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines


BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                             // These bytes need to be sent to the LCD
                             // to start it up.


                             // The following are used for setting
                             // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in


BYTE lcdline;

BYTE lcd_read_byte() {
      BYTE low,high;

      set_tris_b(LCD_READ);
      lcd.rw = 1;
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_b(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}


void lcd_send_byte( BYTE address, BYTE n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      lcd.rw = 0;
      delay_cycles(1);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    BYTE i;

    set_tris_b(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
       lcd_send_byte(0, LCD_INIT_STRING[i]);
}


void lcd_gotoxy( BYTE x, BYTE y) {
   BYTE address;

   switch(y) {
     case 1 : address=0x80;break;
     case 2 : address=0xc0;break;
     case 3 : address=0x94;break;
     case 4 : address=0xd4;break;
   }
   address+=x-1;
   lcd_send_byte(0,address);
}

void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_send_byte(0,1);
                   lcdline=1;
                   delay_ms(2);
                                           break;
     case '\n'   : lcd_gotoxy(1,++lcdline);        break;
     case '\b'   : lcd_send_byte(0,0x10);  break;
     default     : lcd_send_byte(1,c);     break;
   }
}

char lcd_getc( BYTE x, BYTE y) {
   char value;

    lcd_gotoxy(x,y);
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,866
Puanları
509
Yaş
33
// As defined in the following structure the pin connection is as follows:
// B0 enable
// B1 rs
// B2 rw
// B4 D4
// B5 D5
// B6 D6
// B7 D7
//
// LCD pins D0-D3 are not used and PIC B3 is not used.
Yukarıda yorum olarak Lcd nin PortB de hangi pinlere bağlı olduğunu söylemiş.

struct lcd_pin_map { // This structure is overlayed
BOOLEAN enable; // on to an I/O port to gain
BOOLEAN rs; // access to the LCD pins.
BOOLEAN rw; // The bits are allocated from
BOOLEAN unused; // low order up. ENABLE will
int data : 4; // be pin B0.
} lcd;
Burada E RS RW nin sırayla x0 x1 x2 pinlerine denk geleceği tanımlanmış,
aşağıdaki tanımla beraber B0 B1 B2
pinlerine denk gelecek demek.
Ve
lcd data pinleri x4 x5 x6 x7 pinlerine denk gelecek yani B4 B5 B6 B7 pinleri olacak.
ve x3 yani B3 e denk gelecek, pini kullanılmıyor boşta demiş.

#locate lcd = getenv("SFR:pORTB") // This puts the entire structure
// on to port B


[/CODE]
burada yukarıdaki structre için PortB kullanılacak şekilde tanımlama yapılmış.

Kısaca bu programla
Lcd nin tüm pinleri aynı mcu portunda ve aşağıdakine uygun sıralı olacak şekilde
yani
x0 x1 x2 E RS Rw pinlerine
x3 boş
x4 x5 x6 x7 lcd D4 D5 D6 D7 data pinlerine
denk gelecek şekilde bağlanarak kullanılabilir.
 
Konu Sah

tunahurgh

Üye
Katılım
2 Mar 2021
Mesajlar
13
Puanları
3
Yaş
37
Teşekkür ederim karaapak.
Dün gece uğraşarak kendimce bir çözüm buldum.
Yine lcd.c yi kullandım. Problemim 3. ve 4. satırlara inemememdi.
3. satıra yazmak için lcd_gotoxy(21,1) e imleci getirip 3. satırın başından itibaren yazıyorum. 4. satıra yazı yazmak için ise lcd_gotoxy(21,2) ile 4. satırın başına geliyorum.
Programı yaptım 6 sayfalık bir menü oluşturdum. Herhangi bir problemle karşılaşmadım.
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,866
Puanları
509
Yaş
33
Çözüm çözümdür.

Yinede kulağını tersten göstermek yerine bahsettiğim flexlcd kütüphanesini tavsiye ederim.
 
Konu Sah

tunahurgh

Üye
Katılım
2 Mar 2021
Mesajlar
13
Puanları
3
Yaş
37
Çözüm çözümdür.

Yinede kulağını tersten göstermek yerine bahsettiğim flexlcd kütüphanesini tavsiye ederim.
Önerdiğin yolları denedim ama çalışmadı. Belki de benim kullandığım LCD ile ilgili bir durumdur. Çünkü yaptığım araştırmalarda gördüğüm birçok yöntem denediğim halde hiçbiri de çözüm olmadı.
Yardımın için çok teşekkür ederim
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,866
Puanları
509
Yaş
33
Biraz daha dene çalışır.

Senelerdir bu işle uğraşıyorum halen lcd çalıştıramadığım oluyor,
hata yapılabilecek onlarca nokta var
birçoğunda hata yapıyoruz ve çalışmıyor.

İyi çalışmalar.
 
Konu Sah

tunahurgh

Üye
Katılım
2 Mar 2021
Mesajlar
13
Puanları
3
Yaş
37
Biraz daha dene çalışır.

Senelerdir bu işle uğraşıyorum halen lcd çalıştıramadığım oluyor,
hata yapılabilecek onlarca nokta var
birçoğunda hata yapıyoruz ve çalışmıyor.

İyi çalışmalar.
Ozaman şöyle güzel bir mühendislik adına sorgulamaya devam edeyim. Bana ilk yanıtınızda lcd420.c de lcd pinlerinin girecegi bacaklari aciklamissiniz ama sıkıntı şu ki ben devreyi kurup lehimledim ve bacaklari degistiremiyorum. lcd420.c de degisiklik yapip bu bacakları montaj yaptigim devrenin bacaklarina uydurmam mümkün olmaz mı.
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,866
Puanları
509
Yaş
33
...

Kısaca bu programla
Lcd nin tüm pinleri aynı mcu portunda ve aşağıdakine uygun sıralı olacak şekilde
yani
x0 x1 x2 E RS Rw pinlerine
x3 boş
x4 x5 x6 x7 lcd D4 D5 D6 D7 data pinlerine
denk gelecek şekilde bağlanarak kullanılabilir.

Mcu hangi pin lcd hangi pine lehimli?

Diğer seçenek ise yine bahsettiğim flex..lcd kütüphanesini kullanmak.
Onunla hangi pin hangi porta bağlı sıralı mı önemli değil.
 

Benzer Konular

Forum istatistikleri

Konular
116,053
Mesajlar
817,514
Kullanıcılar
423,736
Son üye
asd123332

Yeni konular

Üst