Merhaba
Aşağıdaki kod ile çalışan lcd de cursor izleri belli oluyor. Acaba taramada mı hata yapıyorum. Yani lcd ye sadece 1 defa mı veri göndermeli yada belirli periyodlar ilemi yapmalı bunu. Lcd ye veri yollamanın standardı varmı . Koddan göreceğiniz üzere döngü içerisinde sürekli lcd ye veri yollanıyor. Taki başka bir menuye geçilesiye kadar. Lcd biraz kalitesiz başka bir lcd ile denemedim. Fakat bilemiyorum bundan dolayı olablirmi? Tecrübelerinizi aktarmanız temennisi ile... (kod ccs ile yazıldı)
while (MenuYasak==0)
{ if(!input(PIN_A6)) {Bip(bIO); delay_ms(10); anamenuFLAG++; while(!input(PIN_A6)){} }
if (anamenuFLAG>=7) {anamenuFLAG=0;}
if ((anamenuFLAG>=1) && (anamenuFLAG<=6)) {if(!input(PIN_A7)) {Bip(bIO); delay_ms(10); MenuYasak=1; while(!input(PIN_A7)){} } }
lcd_gotoxy(1,1);
if (anamenuFLAG==0)
{
printf(lcd_putc," deger=%04Lu ",deger);sat2_BOS();
if (deger>=Pos1) {output_low(led1);} else {output_high(led1);}
if (deger>=Pos2) {output_low(led2);} else {output_high(led2);}
if (deger>=Pos3) {output_low(led3);} else {output_high(led3);}
}
if (anamenuFLAG==1) {lcd_putc("(1) SECENEK1"); LcdBut_IS();}
if (anamenuFLAG==2) {lcd_putc("(2) SECENEK2"); LcdBut_IS();}
if (anamenuFLAG==3) {lcd_putc("(3) SECENEK3"); LcdBut_IS();}
if (anamenuFLAG==4) {lcd_putc("(4) SECENEK4"); LcdBut_IS();}
if (anamenuFLAG==5) {lcd_putc("(5) SECENEK5"); LcdBut_IS();}
if (anamenuFLAG==6) {lcd_putc("(6) SECENEK6"); LcdBut_IS();}
}
LCD ye sadece bir kere veri gönder. Sadece değiştiğinde göndermen yeterli.
Ayrıca bir de önerim olacak. Kod yazarken her komutu ayrı satırlara yaz. { leri ayır kodun okunabilirliğini arttıracaktır.
calismayi etkilemeyecekse 100ms lik bir gecikme ekle
Merhaba
Teşekkürler bilgiler için. Kodu biraz budadım aslında beklemeler var. Birde kodu yazarken çalışaya kadar alt altayazıyorum. Biten her rutini daha sonra yan yana yazıyorum. Nedenide kodu aynı anda görebilme imkanım artsın. Hakimiyetim artsın diye. Yani değişiklikleri takip edelim o vakitlerde lcd sürelim. Tamam anlaşıldı.
Alıntı yapılan: "oyhan"Merhaba
Aşağıdaki kod ile çalışan lcd de cursor izleri belli oluyor.
[/code]
Bu cümle ile kastını pek anlayamadım. Biraz daha açabilir misin? LCD ye kursorun disable olmasını mı istiyorsun.Yani o anda kursörun bulunduğu yerin bi kararıp bi açık olmamasını mı istiyorsun?
Merhaba
Evet cursorü on yapmam gerekiyor kodun diğer bölümlerinde. Ama genel olarak ekran mesajlarında cursor hep on tanımlı olduğu için iz belli oluyor sanırım. Ama burada sürekli ekrana veri gidiyor. Siz böyle söyleyince cusor aklıma geldi. Ama lcd sürücüsünün içerisinde değerler atanıyor cursor için. Bunu istediğimiz vakit on yada off dinamik olarak nasıl yapabiliriz.
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0x0f,//0xc, // Display on
1, // Clear display
6 // Increment cursor
};
/*
byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xC, 1,6};
Value Cursor Blink
0x0C Off Off
0x0D Off On
0x0E On Off
0x0F On On
*/
Alıntı yapılan: "oyhan"Ama lcd sürücüsünün içerisinde değerler atanıyor cursor için. Bunu istediğimiz vakit on yada off dinamik olarak nasıl yapabiliriz.
void lcd_setcursor_vb(short visible, short blink) {
lcd_send_byte(0, 0xC|(visible<<1)|blink);
}
lcd.c nin içine veya kendi programına yukarıdaki kodu ekle.
Merhaba birumher
Tam olarak yazmış olduğun rutini anlatabilirmisin. Nasıl çalışır?
Kursoru kapatabilirsin, açabilirsin hatta blink yapmasını sağlayabilirsin. Bunun için LCD ne komut yollamalısın.
Display On/Off control denen bir komut (HD44780 uyumlu LCD)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B
Sets On/Off of all display (D),
cursor On/Off (C)
and blink of cursor position character (B).
İstediğin bir anda bu komutu yollayabilirsin. Arkadaşın yazdığı kodda bu amaç için hazırlanmış olmalı. Visible ve blink değerleri 1 yaparsan kursor açık ve blink yapar. Bit düzeyinde veya işlemi yapılmış...
Alıntı yapılan: "oyhan"Merhaba birumher
Tam olarak yazmış olduğun rutini anlatabilirmisin. Nasıl çalışır?
lcd_send_byte(0, 0xC|(visible<<1)|blink);
bu kod lcd nin 0. adresine 1 byte veri gönderiyor.
visible değerini 1 sola kaydırıyor yani 2lik sistemde gösterirsek
1 ise 00000010 yapıyor
blink de 1 ise 00000001 olarak kalıyor. Sonra bu değerleri veya operatörüğnden geçiriyor (or)
yani
00001100 0xc
or
00000010
or
00000001
yapıp lcd ye gönderiyor. Bu şekilde cursor ve blink olaylarını LCD bu komutlara göre ayarlıyor...
Tamam kullandım bu yapıyı. Tanımladığım flagler ilede lcd ye veriyi birkez gönderiyorum. İz miz kalmadı. Cursorude programın dilediğim tarafında aktfleştirebiliyorum iyi oldu bu.. Teşekkürler.