Devrenin Çlışması LCD : Programda çıkış olarak B Portu çıkış olarak kullanılmaktadır. Bu port LCD’nin D0-D7 data bağlantı uçlarına bağlanır. Aynı zamanda LCD’nin E ve RS bitleri (LCD’yi aktif yapma ve Data/ komut okuma seçenekleri) PIC’in D0 ve D1 bitleri ile kontrol edilir.
Devrede kullanılan LCD’miz 2*16’lıktır. Yani LCD’miz 2 satır ve 16 sütundan oluşmaktadır. LCD çıkışlarından 15-16. bacaklar kullanılmamaktadır. Çünkü 15 ve 16. bacaklar LCD’nin ışığının yanması için kullanılır. LCD’miz ışıklı olmadığı için de bu bacakları kullanmamıza gerek yoktur.
LCD’nin sadece 1. satırına bilgi yazımı gerçekleşmektedir, 2. satır kullanılmamaktadır. 16 karakter girişi gerçekleştikten sonra LCD ekranı temizlenir, yani reset atılmış olur ve kursör 1. satırın 1. sütununda yanıp sönmeye başlar. Devredeki reset butonuna basıldığında da ekran tazelenir, yani temizlenir ve kursör yine 1. satır 1. sütuna gider. Parlaklık ayarı 1., 2., 3. bitlerin uçlarının pot aracılığı ile kontrolüyle sağlanır. Aslında V0 geriliminin pot ile kontrolü ile gerçekleşir.
Klavye : Devre 4*4 tuş takımıyla yani 16 harfle 2*16’lık LCD ekrana bilgi yazdırma işlemini yapıyor. Tuş takımında 16 harf olduğu için sadece bu harflerle bilgi yazımı gerçekleşmektedir (A-Q harfleri arası). Klavyeden PIC’in C Portu ile giriş alınır. C1-C3 bitleri klavyenin Y1-Y4 satır ve C4-C7 bitleri de klavyenin X1-X4 sütun çıkışlarına bağlıdır.
PIC’imiz ve Kristal Osilatörümüz 4MHz’liktir. PIC’in 1. bacağından 10K ve 100K dirençler ve anahtar aracılığıyla çevresel kesme yani reset alınır. Baskı devrenin şeklinden de görüleceği üzere; plaket üzerinde LCD için 16’lık ve Klavye içinde 8’lik dişi konnektör kullanılmıştır. Bu elemanlarla direk bu konnektörler aracılığı ile bağlantı gerçekleştirilir.
Aynı zamanda 8 tane 33K’lık Pull-Down dirençleri kullanılmıştır. Bunlar klavyeden bir tuşa basıldığında LCD’de kararlı görüntü alabilmeyi yani kararlı girişler alabilmeyi sağlar yani; tuş basımlarında oluşabilecek manyetik ve mekanik kararsızlıkları şaseye vererek sistemin kararlılığını artırır.
Projenin Çalışması : 4*4 Tuş takımı ile LCD ye PIC yardımıyla karekter girişi yapıyor. Devrede tuş takımı bulamadığımız için 16 tane butonla 4*4 lük bir kombinasyon yaptık . bunun dışında devrede bir reset düğmesi ve LCD nin netlik ayarının yapılabildiği bir ayarlı direnc bulunuyor.
Her bir buton alfabeden üç karekteri barındırıyor en alttada iki yöne hareketi sağlayan iki buton bulunuyor,Programı yazmak için PIC BASIC PRO kullanılmıştır. Programın çalışıp çalışmadığını denetlemek için programı anime edebilen ISIS programı kullanılmıştır
Picbasic pro .bas yazılımı
INCLUDE "modedefs.bas" ' Include serial modes ' LCD İletişimi tanımlanıyor Define LCD_DREG PORTD Define LCD_DBIT 4 Define LCD_RSREG PORTE Define LCD_RSBIT 0 Define LCD_EREG PORTE Define LCD_EBIT 1 define ADC_SAMPLEUS 50 'Program değişkenleri tanımlanıyor adsonuc var byte col var byte ' Tuş takımı sütunu row var byte ' Tuş takımı satırı sonuc var byte ' Tuş Değeri satir1 var byte[17] 'LCD'deki birinci satır satir2 var byte[17] 'LCD'deki ikinci satır satirno var byte 'aktif satır artir var byte 'aktif sutun karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası aktif_karakter var byte 'kullanılan tuş 1-10 k var byte tus1 var byte[3] tus2 var byte[3] tus3 var byte[3] tus4 var byte[3] tus5 var byte[3] tus6 var byte[3] tus7 var byte[3] tus8 var byte[3] tus9 var byte[3] tus10 var byte[3] karakter_no=0 aktif_karakter=1 satirno=1 artir=1 tus1[0]="A" tus1[1]="B" tus1[2]="C" tus2[0]="D" tus2[1]="E" tus2[2]="F" tus3[0]="G" tus3[1]="H" tus3[2]="I" tus4[0]="J" tus4[1]="K" tus4[2]="L" tus5[0]="M" tus5[1]="N" tus5[2]="O" tus6[0]="P" tus6[1]="Q" tus6[2]="R" tus7[0]="S" tus7[1]="T" tus7[2]="U" tus8[0]="V" tus8[1]="W" tus8[2]="X" tus9[0]="Y" tus9[1]="Z" tus9[2]=" " for k=1 to 16 satir1[k]= " " next for k=1 to 16 satir2[k]= " " next 'Değişkenler sıfırlanıyor OPTION_REG.7 = 0 ' Enable PORTB pullups ADCON1 = 7 ' Porta ve porte dijital yapılıyor Low PORTE.2 ' LCD R/W low (write) Pause 100 ' LCD yi başlatmak için bir süre bekleniyor 'Açılış mesajı gönderilecek trisc =%11110000 ADCON1 = %00000100 'Eeproma ilk şifre kaydediliyor '*****************************ANA PROGRAM***************************** Lcdout $fe, 1, "Micro Islemciler" ' Satır 1 Lcdout $fe, $C0, " Projesi" pause(1000) ' lcdout $FE, $0E loop: Gosub getkey 'Tuş takımından değer alınacak ' satir2 = "F" ' lcdout $fe,1,"Sifreyi Girin" ' Lcdout $fe, $c0, satir2 ' pause 10 Goto loop 'Döngüye devam '****************************ANA PROGRAM SONU************************* ' ******************************** Tuş takımından değer okuyan alt program ************************* getkey: Pause 50 ' Bekle getkeyu: ' Wait for all keys up PORTB = 0 'PortB nin bütün çıkış pinleri lojik 0 TRISB = $f0 ' 4 pin çıkış ve 4 pin giriş yapılıyor If ((PORTB >> 4) != $f) Then getkeyu ' eğer herhangi bir tuşa basılmış ise Pause 50 ' Bekle getkeyp: ' tuşa basılana kadar bekle For col = 0 to 3 ' 4 columns in keypad PORTB = 0 ' PortB sıfırlanıyor TRISB = (dcd col) ^ $ff ' Set one column pin to output 'dcd col trisb nin coluncu basamağını 1 yapar. 0.1.2. gibi row = PORTB >> 4 ' Satır oku If row != $f Then gotkey ' If any keydown, exit Next col pause 50 'diğer buttonların sonu Goto getkeyp ' No keys down, go look again gotkey: ' karekter çagir sonuc = (col * 4) + (ncd (row ^ $f))-1 'Gelen binary değeri hex çeviriyormuş. 'artir =artir +1 if artir > 16 then if satirno=1 then satirno=2 endif if satirno=2 then satirno=1 endif artir=1 endif 'Arrtir goto kaydir son: Return '******** Alt program sonu ************ ' Alınan Karakterlerin LCD üzerinde gösterim şekli seçiliyor '******************************** Tuş takımından değer okuyan alt program sonu ******************** kaydir: '**Ekrana yazma işlemleri burada yapılacak 'adsonuc var byte 'col var byte ' Tuş takımı sütunu 'row var byte ' Tuş takımı satırı 'sonuc var byte ' Tuş Değeri 'satir1 var byte[16] 'LCD'deki birinci satır 'satir2 var byte[16] 'LCD'deki ikinci satır 'satirno var byte 'aktif satır 'artir var byte 'aktif sutun 'karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası 'aktif_karakter var byte 'kullanılan tuş 1-10 'k var byte 'adsonuc var byte 'col var byte ' Tuş takımı sütunu 'row var byte ' Tuş takımı satırı 'sonuc var byte ' Tuş Değeri 'satir1 var byte[16] 'LCD'deki birinci satır 'satir2 var byte[16] 'LCD'deki ikinci satır 'satirno var byte 'aktif satır 'artir var byte 'aktif sutun 'karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası 'aktif_karakter var byte 'kullanılan tuş 1-10 'k var byte if sonuc =%00000000 then '1. Tuş if aktif_karakter<>1 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 1 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus1[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus1[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000001 then '2. Tuş if aktif_karakter<>2 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 2 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus2[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus2[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000010 then '3. Tuş if aktif_karakter<>3 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 3 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus3[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus3[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc 'Kendime Not : Başlangıca ilk karakter koymayı unutma if sonuc =%00000011 then '4. Tuş if aktif_karakter<>4 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 4 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus4[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus4[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000100 then '5. Tuş if aktif_karakter<>5 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 5 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus5[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus5[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000101 then '6. Tuş if aktif_karakter<>6 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 6 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus6[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus6[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000110 then '7. Tuş if aktif_karakter<>7 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 7 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus7[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus7[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00000111 then '8. Tuş if aktif_karakter<>8 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 8 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus8[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus8[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc if sonuc =%00001000 then '9. Tuş if aktif_karakter<>9 then 'aktif karakter bu değilse karakter no sıfırlanacak aktif_karakter = 9 karakter_no=0 endif 'if aktif_karakter if satirno=1 then satir1[artir]=tus9[karakter_no] karakter_no=karakter_no+1 endif 'satir no 1 ise if satirno=2 then satir2[artir]=tus9[karakter_no] karakter_no=karakter_no+1 endif 'satir no 2 ise if karakter_no>2 then karakter_no=0 endif 'karakter_no endif 'if sonuc '1001 '9 '1010 'A '1011 'B '1100 'C 'GERİ '1101 'D 'ÜST SATIR '1110 'E 'ALT SATIR '1111 'F 'İLERİ if sonuc =%00001100 then 'C. Tuş artir=artir-1 if artir<1 then if satirno =1 then satirno=2 artir=16 endif if satirno =2 then satirno=1 artir=16 endif endif 'artir<1 ENDIF 'GERİ if sonuc =%00001111 then 'F. Tuş artir=artir+1 if artir>16 then if satirno =1 then satirno=2 artir=1 endif if satirno =2 then satirno=1 artir=1 endif endif 'artir<1 ENDIF 'GERİ Lcdout $fe, 1, satir1[1],satir1[2],satir1[3],satir1[4],satir1[5],satir1[6],satir1[7],satir1[8],satir1[9],satir1[10],satir1[11],satir1[12],satir1[13],satir1[14],satir1[15],satir1[16] Lcdout $fe, $C0,satir2[1],satir2[2],satir2[3],satir2[4],satir2[5],satir2[6],satir2[7],satir2[8],satir2[9],satir2[10],satir2[11],satir2[12],satir2[13],satir2[14],satir2[15],satir2[16] pause 50 goto son end
Hazırlayanlar : Güngör Köprücü ,Mehmet Ayaz Emeği geçen Kişilere Teşekkürler.
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/11/27 Etiketler: Assembly, buton, isis, klavye, lcd devreleri, microchip pic projeleri, PIC16F877 örnekleri, picbasic pro, tuş takımı
2×14 lcd ekran satan bir yer varmı? [email protected] olduğunu düşündüğünüz bir yer varsa mail atarsanız sevinirim
arkadaşım tuştakımının da varsa pcb sini verirmisin çok zor bulunuyor hazırları ,izmitte
İyi günler,öncelikle emeğinize sağlık üstad.Bilgileriniz çok değerli ve paylaşmaktan çekinmiyorsunuz. Rica etsem benimle irtibata geçer misiniz ? 10 gün içinde teslim etmem gereken bir proje var.Yardımcı olursanız çok sevinirim. Şimdiden teşekkürler …. [email protected]