PIC ile LCD örnek Programlar

Geçen dersimizde LCD komutlarını görmüş ve basit bir de örnek yapmıştık. Geçen derste gördüğümüz komutlar 8 bitlik akış içindi. Halbuki biz bu alış-verişi 4 pinle de rahatça yapabiliriz. 4-bitlik için komutlar 8-bitlik ile aynı sadece aradaki 8 ifadesini çıkaracağız.

Hatırlarsanız mesela ekrana bir adet karakter basmak için lcd8_chr() komutunu kullanıyorduk. 4 bitlik akış içinse aradaki “8” ifadesini kaldırıp lcd_chr() komutunu kullanacağız.

4 bitlik kış kullanacağımıza göre önceki gibi ikinci bir porta gerek duyamayacağız. Zira sözgelimi PORTB’nin 4 bitini data için kullanacaksak diğer 3 bitini de pekala kontrol için (RS, E,RW seçimi için) kullanabiliriz.

Lcd8_Config() komutu hangi portun kontrol hangi portun data portu olduğunu belirlemeye ve de kontrol portunun hangi pinlerinin R/W,E ve RS uçları olduğuna karar vermeye yarıyordu. Bizlerse varsayılan değerleri kullanmak için bu komutun yerine Lcd8_init() komutunu seçmiştik.

4 bitlik akış için

Lcd_config(&PORTB,0,1,2,3,4,5,6,7); ifadesini kullanırsak,

PORTB’nin 0.biti RS için
PORTB’nin 1.biti E için
PORTB’nin 2.biti R/W için ayrılmış olacak

PORTB’nin 3.biti,
PORTB’nin 4.biti,

PORTB’nin 7.biti, data için ayrılmış olacak.

Ama biz config uğraşmak yerine varsayılan değerleri kullanmak adına lcd_init() komutunu kullanmayı tercih edeceğimizi geçen derste söylemişti:

LCD_INIT(&PORTB) komutunu yazdığımızda:

D7 → pin.7
D6 → pin.6
D5 → pin.5
D4 → pin.4
E  → pin.3
RS → pin.2
RW → pin.0

Olarak kendiliğinden atanacaktır. 8’lik tüm komutlar 4lükte de geçerlidir. Sadece komutlardaki 8 ifadesini atmak kaydıyla. Yani mesela lcd8_out komutu yerine artık lcd_out kullanacağız.

Şimdi adımızın harflerini ekrana tek tek bastıran programı yazalım:

void main(){

char text[21]="ruzname.Net";    // 21 haneli bir karakter dizi açıp içine ismimiz attık
int i=0;                                        // döngü için bir tam sayı değişkeni

PORTB = 0x00;                        // Portb sıfırlandı
TRISB = 0x00;                         // Portb çıkış olarak kullanılmak üzere ayarlandı

Lcd_Init(&PORTB);                 // PORTB’yi LCD için hazırladık.
Lcd_Cmd(LCD_CLEAR);        // LCD yi bir temizledik.
Lcd_Cmd(LCD_CURSOR_OFF);   // imleci kapattık.

for(i=1; i<12; i++)

{                 
Lcd_Chr(1,i,text[i-1]);
delay_ms(100);
}


}


for(i=1; i<12; i++)

{

Lcd_Chr(1,i,text[i-1]);

delay_ms(100);

for döngüsünü 1 den başlayarak birer birer artmayla 13 den küçük olduğu müddetçe dönüp durması için ayarladık. İ değerinin başlangıç değeri 1, yani ilk başta i=1

i=1 iken döngünün içine girdik. ve lcd_Chr(1,i, text[i-1]) satırına geldik. şimdilik i=1 olduğuna göre bu satır aslında:

lcd_chr(1,1, text[0]) oldu. Bu demektir ki:

1.satır 1.haneden itibaren başlayarak text[0] karakterini ekrana bas. Biliyorsunuz benim programımda text[21] ifadesine ruzname.Net değerini atadım ben. Yani i değerinin ger bir artışıyla birlikte

Text[0]=R
Text[1]=u
Text[2]=z
Text[3]=n
Text[4]=a
Text[5]=m
Text[6]=e
Text[7]=.
Text[8]=N
Text[9]=e
Text[10]=t

Harfleri ekrana basılacak. Ama delay_ms(100) ifadesiyle de her harften sonra bir elif miktarı gecikme yaşanacak ki gözümüz olayları takip edebilsin.

İkinci programımızda ismimizi sağa doğru kaydıralım:

void main(){

char *text="Ruzname.Net";
int i=0;
int a=0;
PORTB = 0x00;
TRISB = 0x00;

Lcd_Init(&PORTB);
Lcd_Cmd(LCD_CLEAR);
Lcd_Cmd(LCD_CURSOR_OFF);

while(1){
for(i=1;i<19;i++)

{
Lcd_Cmd(LCD_CLEAR);
Lcd_Out(1,i,text);
delay_ms(300);

}
}

}

Artık programı anlatmıyorum, siz takip edip adım adım çözmeye çalışın. Burada *text ifadesi sonsuz haneli bir döngüdür. Siz de LCD ekran üzerinde değişik durumlar deneyebilirsiniz. Soldan sağa kaydırma, olduğu yerde yakıp söndürme vs… gibi kombinasyonları deneyebilirsiniz. Belki bu tür programlar bir amaca hizmet etmiyor ama LCD komutlarına iyice alışmamıza ve döngü komutlarını, dizileri iyice öğrenmemize yardımı olacaktır.

Gördüğünüz gibi yukarıda LCD kullanımı öğrenelim derken, dizi ve döngüleri de tekrarlamış olduk. Mesela geçen derslerimizde yaptığımız her bir butona bastığımızda 7 segmentten bir sayı gösterdiğimiz programı LCD’ye uyarlayın. Böylece SWITCH ve/veya IF kontrol yapılarını da tekrar etmiş olursunuz. Size ödev olsun bu da.

4 Bitlik LCD ve PIC16F877A bağlantısı aşağıdaki gibi olacak:


Anahtar Kelimeler: Mikrodenetleyici

peynir6 suyu tozu , 08/05/2008-14:58 Facebook'ta Paylas