Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

LCD EKRAN KULLANIMI

Başlatan dex25, 05 Aralık 2014, 16:53:13

dex25

merhaba arkadaşlar boarda kurduğum devrede   2*16lık  lcd ekranın ilk satırında kareler oluşuyor potu çevirince kareler gidiyor.aynı lcdyi arduinodada denerkende  kareler çıktı.sizce  lcd bozulmuş olabilir mi?

RaMu

2*16 karakter lcd den bahsediyorsun herhalde.
Büyük ihtimal sağlam,
ve büyük ihtimal lcd data ve RW RS E bacaklarını yanlış bağlıyorsun.

2x16 karakter lcd ile ilgili açılan konulara bakarsan problemi çözersin,
misal linkdeki konuyu baştan sona incele,
örnek kod ve bağlantıda paylaşmıştım;
https://www.picproje.org/index.php/topic,56030.msg431620.html#msg431620
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

dex25

LCD BAŞKA DEVREDE ÇALIŞIYOR. FAKAT İSİSTE RS RB0'A E İSE RB1'E RW İSE TOPRAĞA BAĞLI BUNU KURUYORUM DATASHEET YARDIMIYLA AMA YİNE ÜST KISIMDA KARELER ÇIKIYOR

polleme

Bağlantı veya konfig problemi. Ben de sağlam olduğunu düşünüyorum.

baran123

Buyuk bir ihtimal rw pinini gndye baglamadin


Kabil ATICI

En azından birkaç şema,fotograf ekleyipte bizi sallama (hariç gazel okumaktan da olur) zanmetinden kurtarsanız daha iyi değil mi?
ambar7

eren.guven

Geçen hafta pretousta doğru çalışan kod devrede çalışmıyordu. Bir hocamızın yardımıyla  devreye led ekleyerek kodun nerde patladığını gördük. Kod lcd_init komutundan sonra çalışmadığını fark ettik. Proteusta çalışan kod  devrede çalışmıyordu. Bir satırında siyah kutucuklar çıkıyordu.  O yüzden lcd.c dosyası yerine başka bir lcd dosyası aradım ve flex_lcd.c dosyasını kullandım. Sonuç olumlu :)  notepad programını açıp bu kodu kopyala ve ccs-c in driver klasörüne at. Pin bağlantılarını kendin de değiştirebilirsin.


#define LCD_DB4   PIN_c5 
#define LCD_DB5   PIN_c4 
#define LCD_DB6   PIN_d3 
#define LCD_DB7   PIN_d2 

#define LCD_E     PIN_d5 
#define LCD_RS    PIN_d4 
#define LCD_RW    PIN_d6 



#define LCD_CGRAM_ADDR 0x40         
#define LCD_DDRAM_ADDR 0x80         
#define USE_LCD_RW   1

//========================================

#define lcd_type 2       
#define lcd_line_two 0x40

#define LCD_CHAR_1 0x01
#define LCD_CHAR_2 0x02
#define LCD_CHAR_3 0x03
#define LCD_CHAR_4 0x04
#define LCD_CHAR_5 0x05
#define LCD_CHAR_6 0x06
#define LCD_CHAR_7 0x07
#define LCD_CHAR_8 0x08

int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2),
0xc,                   
1,                     
6                     
};


//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));

delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}


#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3

retval = 0;

output_high(LCD_E);
delay_cycles(1);

retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);

output_low(LCD_E);

return(retval);
}
#endif

//---------------------------------------

#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;

output_high(LCD_RW);
delay_cycles(1);

high = lcd_read_nibble();

low = lcd_read_nibble();

return( (high<<4) | low);
}
#endif

//----------------------------------------
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);

#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif

if(address)
   output_high(LCD_RS);
else
   output_low(LCD_RS);

delay_cycles(1);

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif

output_low(LCD_E);

lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}

void lcd_setcursor_vb(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}

//----------------------------
void lcd_init(void)
{
int8 i;

output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

output_low(LCD_E);

delay_ms(15);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03);
    delay_ms(5);
   }

lcd_send_nibble(0x02);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING);

    #ifndef USE_LCD_RW
    delay_ms(5);
    #endif
   }

}

//----------------------------

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

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c)
{
switch(c)
   {
    case '\f':
      lcd_send_byte(0,1);
      delay_ms(2);
      break;

    case '\n':
       lcd_gotoxy(1,2);
       break;

    case '\b':
       lcd_send_byte(0,0x10);
       break;
    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;

lcd_gotoxy(x,y);

while(bit_test(lcd_read_byte(),7));

output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);

return(value);
}
#endif