Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

LCD satır silme

Başlatan toprakyagmur, 05 Aralık 2010, 21:46:07

toprakyagmur

Merhaba Arkadaşlar;
LCD de çalışma yaparken kütüphenemde aşağıda belirtilen "lcd.c" ve "lcd.h" dosyaları bulunmakta. LCD ekranını tamamen temizlemek için lcd_clear(); komutunu kullanabilmekteyim. 4x20 bir lcd de herhangi bir satırı silmek istiyorum, lcd.h ve lcd.c dosyalarında tanımlanmadığı için bunu yapamıyorum. LCD de satır silme işlemi için yardımlarınızdan dolayı şimdiden teşekkür ederim.


lcd.c dosyası
#include <pic.h>
#include <lcd.h>    // lcd.h dosyası tanımlanıp, değerler alınıyor
#include <delay.h>    // Gecikme fonksiyonu tanımlanıyor


void lcd_busy(void)    // 500us bekleme
{
   DelayUs(250);
   DelayUs(250);
}


void lcd_komut(unsigned char c)    // Komut gönderme fonksiyonu
{
   rw=0;             // LCD'ye yazma yapılacak
   rs=0;             // LCD'ye komut gönderilecek
   e=1;             // Düsen kenar tetikleme olduğu için E önce 1
   lcd_port = ( c & 0xF0 );    // Yüksek değerlikli bitler gönderiliyor
   e=0;             // E, 0 yapılıyor
   lcd_busy();          //Belirli süre bekleniyor
   e=1;             // E, 1 yapılıyor
   lcd_port = ( (c & 0x0F)<<4 );    // Düsük değerlikli bitler gönderiliyor
   e=0;             // E, 0 yapılıyor lcd_busy(); // Belirli bir süre bekleniyor
}


void veri_yolla(unsigned char c)
{
   rw=0;
   rs=1;             // Komut yolladan tek farkı, RS'nin 1 olması
   e=1; lcd_port = ( c & 0xF0 );
   e=0; lcd_busy();
   e=1; lcd_port = ( (c & 0x0F)<<4 );
   e=0;
    lcd_busy();
}


void lcd_clear(void) // LCD siliniyor
{
   lcd_komut(0x1);
   DelayMs(2);
}


void lcd_yaz(const char * s) // LCD'ye string ifade gönderiliyor
{
   lcd_busy();
   while(*s) veri_yolla(*s++);
}
   

void lcd_gotoxy(unsigned char x,unsigned char y) //LCD'nin belli
                                    //bölgesine gidiliyor
{
   if(x==1) lcd_komut(0x80+((y-1)%20));
   if(x==2) lcd_komut(0xC0+((y-1)%20));
   if(x==3) lcd_komut(0x94+((y-1)%20));
   if(x==4) lcd_komut(0xD4+((y-1)%20));
}

void lcd_init() // LCD ilk yükleme ayarları yapılıyor
{
   rs = 0;
   e = 0;
   rw = 0;
   DelayMs(15);
   e=1; lcd_komut(0x02);
   DelayMs(2); lcd_komut(CiftSatir4Bit);
   lcd_komut(SagaYaz); lcd_komut(ImlecGizle);
   lcd_clear();
   lcd_komut(BirinciSatir);
}


lcd.h dosyası

#define rs RC0    //Pin tanımlamaları
#define rw RC1
#define e RC2
#define lcd_port PORTB


/* LCD'de kullanilan komutlarin tanimlamasi*/
#define Sil 1 // Ekrani temizler
#define BasaDon 2 // Imleci sol üst köseye getirir
#define SolaYaz 4 // Imlecin belirttigi adres azalarak gider
#define SagaYaz 6 // Imlecin belirttigi adres artarak gider
#define ImlecGizle 12 // Göstergeyi ac, kursor görünmesin
#define ImlecAltta 14 // Yanip sönen blok kursor
#define ImlecYanSon 15 // Yanip sönen blok kursor
#define ImlecGeri 16 // Kursoru bir karakter geri kaydır
#define KaydirSaga 24 // Göstergeyi bir karakter sağa kaydır
#define KaydirSola 28 // Göstergeyi bir karakter sola kaydır
#define EkraniKapat 8 // Göstergeyi kapat (veriler silinmez)
#define BirinciSatir 128 // LCD'nin ilk satir baslangıç adresi
         // (DDRAM adres)
#define IkinciSatir 192 // Dkinci satirin baslangıç adresi
#define KarakUretAdres 64 // Karakter üreteci adresini belirle
         // (CGRAM adres)

/* LCD'de Kullanilan Fonksiyon Seçimi */
#define CiftSatir8Bit 56 // 8 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir8Bit 48 // 8 bit ara birim, 1 satir, 5*7 piksel
#define CiftSatir4Bit 40 // 4 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir4Bit 32 // 4 bit ara birim, 1 satir, 5*7 piksel


extern void veri_yolla(unsigned char);
extern void lcd_clear(void);
extern void lcd_yaz(const char *s);
extern void lcd_gotoxy(unsigned char x, unsigned char y);
extern void lcd_init(void);
extern void lcd_komut(unsigned char c);

sigmoid

lcdde bir satır silme komutu yok. o satırı silmek için ilgili satıra gidip o satırı boşluk ile doldurmalısın

const char * bosluk="                    ";

void lcd_satirsil(char satirno)
{
    lcd_gotoxy(satirno,1);
   lcd_yaz(bosluk);
}


bu yapı işini görmesi lazım.

kolay gelsin.

rf

En basit yöntem birinci satıra (LCD'nin 4x20 olduğunu varsayarsak) giderek 20 adet boşluk karakteri yazdırmakdır.

lcd_gotoxy(0,0);
lcd_yaz"                    ";


istersen daha sonra bunu bir makro ya çevirebilirsin.

#define LCDsatırsil(satirno) {\
cd_gotoxy(satirno,0);\
lcd_yaz"                    ";\
}


Daha alengirli bir code arıyorsan oda büyük ihtimal şöyle olur.
lcd_komut(0x80+((y-1)%20)); //gibi bi komutla LCD nin ilgili konumuna gider
For(i=0;i<20;i++){
    veri_yolla(' ');  //20 kere boşluk karakterini yazar. 
}


Tercih senin...
umarım yardımı olur.
Saygılarımla,

not: kodlarda ufak tefek hatalar olabilir sadece mantığını yazmaya çalıştım.
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

toprakyagmur

teşekkür ederim arkadaşlar, ellerinize sağlık