Hazırlayan: H.KORATEŞ – Devre pic16f877 mikro denetleyici üzerine kurulu 4×4 keypad bölümü 16 adet butondan oluşuyor butonlara basıldığında lcd ekranda buton numarası görünüyor. Ayrıca 1 numaralı butona basıldığında 8 numaralı D8 ledi yanıyor sırası ile her basışta led yanıyor sekizinci butondan sonra 9..16 butonlarına basıldığında ledler sırası ile sönüyor
Proteus isis simülasyonu
Emeği geçen hazırlayan kişilere teşekkürler
Picbasic yazılım içeriği
' H.KORATEŞ 22.07.2003 YALOVA ' 4x4 KEYPAD UYGULAMASI '********************** Tanımlama Blokları ****************** @ device WDT_OFF & pwrt_on & protect_on & cpd_on PCON=%00000000 define osc 20 Define LCD_DREG PORTD ' LCD bağlantılarını tanımla Define LCD_DBIT 4 Define LCD_RSREG PORTE Define LCD_RSBIT 0 Define LCD_EREG PORTE Define LCD_EBIT 1 ADCON1 = 7 ' PORTA ve E dijital giriş çıkış olarak ayarla Low PORTE.2 ' LCD R/W low = yazma modu Pause 300 ' LCD başlamak için bekle option_reg=0 'PORTB Pulluplar etkin. '(Pullup=Portb' nin tüm uçlarını +5V a çekmektir.lojik 1) TRISB=%11110000 'PORTB 7654 giriş 3210 çıkış olarak ayarlandı TRISC=%00000000 'PORTC Tüm uçlar çıkış olarak ayarlandı portb=0:portc=0 'PORTB ve PORTC yi 0 yap lcdout $FE,1 'LCD ekranı sil lcdout $FE,2,"LCD-KEYPAD uyg." ' ***************DEĞİŞKEN Tanımlama Blokları **************** SW1 var byte SW2 var byte SW3 var byte SW4 var byte SW5 var byte SW6 var byte SW7 var byte SW8 var byte SW9 var byte SW10 var byte SW11 var byte SW12 var byte SW13 var byte SW14 var byte SW15 var byte SW16 var byte gosub degisken0 '********************** Ana Program ************************ anadongu: '******* 1.satır taraması ****** portb=%11111110 ' portb.0 a 0 değeri verilerek 1.satır taraması gerçekleştirilir ' buna göre portb.4,5,6,7 deki durum gözlenir. ' Eğer bu butonlardan birine basıldıysa ilgili buton değişkeni 1 yapılır. if portb.4=0 then SW1=1 if portb.5=0 then SW2=1 if portb.6=0 then SW3=1 if portb.7=0 then SW4=1 '******* 2.satır taraması ****** portb=%11111101 ' portb.1 e 0 değeri verilerek 1.satır taraması gerçekleştirilir ' buna göre portb.4,5,6,7 deki durum gözlenir. ' Eğer bu butonlardan birine basıldıysa ilgili buton değişkeni 1 yapılır. if portb.4=0 then SW5=1 if portb.5=0 then SW6=1 if portb.6=0 then SW7=1 if portb.7=0 then SW8=1 '******* 3.satır taraması ****** portb=%11111011 ' portb.2 ye 0 değeri verilerek 1.satır taraması gerçekleştirilir ' buna göre portb.4,5,6,7 deki durum gözlenir. ' Eğer bu butonlardan birine basıldıysa ilgili buton değişkeni 1 yapılır. if portb.4=0 then SW9=1 if portb.5=0 then SW10=1 if portb.6=0 then SW11=1 if portb.7=0 then SW12=1 '******* 4.satır taraması ****** portb=%11110111 ' portb.3 e 0 değeri verilerek 1.satır taraması gerçekleştirilir ' buna göre portb.4,5,6,7 deki durum gözlenir. ' Eğer bu butonlardan birine basıldıysa ilgili buton değişkeni 1 yapılır. if portb.4=0 then SW13=1 if portb.5=0 then SW14=1 if portb.6=0 then SW15=1 if portb.7=0 then SW16=1 gosub lcdgoster gosub degisken0 goto anadongu '****************** Değişken ilk değerleri **************** degisken0: SW1=0:SW2=0:SW3=0:SW4=0:SW5=0:SW6=0:SW7=0:SW8=0:SW9=0 SW10=0:SW11=0:SW12=0:SW13=0:SW14=0:SW15=0:SW16=0 return '******* Buton değerlerini LCD ekranda gösterim ************ lcdgoster: if SW1=1 then lcdout $FE,$C0,"1 nolu buton...":portc.0=1 'portc.0 portuna bağlı ledi yakar if SW2=1 then lcdout $FE,$C0,"2 nolu buton...":portc.1=1 'portc.1 portuna bağlı ledi yakar if SW3=1 then lcdout $FE,$C0,"3 nolu buton...":portc.2=1 'portc.2 portuna bağlı ledi yakar if SW4=1 then lcdout $FE,$C0,"4 nolu buton...":portc.3=1 'portc.3 portuna bağlı ledi yakar if SW5=1 then lcdout $FE,$C0,"5 nolu buton...":portc.4=1 'portc.4 portuna bağlı ledi yakar if SW6=1 then lcdout $FE,$C0,"6 nolu buton...":portc.5=1 'portc.5 portuna bağlı ledi yakar if SW7=1 then lcdout $FE,$C0,"7 nolu buton...":portc.6=1 'portc.6 portuna bağlı ledi yakar if SW8=1 then lcdout $FE,$C0,"8 nolu buton...":portc.7=1 'portc.7 portuna bağlı ledi yakar if SW9=1 then lcdout $FE,$C0,"9 nolu buton...":portc.0=0 'portc.0 portuna bağlı ledi söndürür if SW10=1 then lcdout $FE,$C0,"10 nolu buton...":portc.1=0 'portc.1 portuna bağlı ledi söndürür if SW11=1 then lcdout $FE,$C0,"11 nolu buton...":portc.2=0 'portc.2 portuna bağlı ledi söndürür if SW12=1 then lcdout $FE,$C0,"12 nolu buton...":portc.3=0 'portc.3 portuna bağlı ledi söndürür if SW13=1 then lcdout $FE,$C0,"13 nolu buton...":portc.4=0 'portc.4 portuna bağlı ledi söndürür if SW14=1 then lcdout $FE,$C0,"14 nolu buton...":portc.5=0 'portc.5 portuna bağlı ledi söndürür if SW15=1 then lcdout $FE,$C0,"15 nolu buton...":portc.6=0 'portc.6 portuna bağlı ledi söndürür if SW16=1 then lcdout $FE,$C0,"16 nolu buton...":portc.7=0 'portc.7 portuna bağlı ledi söndürür return end
Keypad buton uygulamasının picbasic pro ve proteus simülasyon dosyaları;
picbasic-pro-4x4-buton-keypad-uygulamasi-lcd-pic16f877
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/11/17 Etiketler: 4x4 keypad, buton, lcd devreleri, led uygulamaları, microchip pic projeleri, picbasic pro
iyi akşamlar, benim sorum şu yönde, 4×4 keypad’den lcd ekrana microC kullanarak, rakamları ve A B C D’yi yazdırabildim. Ama benim yapmak istediğim, cep telefonu keypad’i gibi, yani 2’ye bir kere basıldığında B’yi, 1 saniye içinde tekrar basıldığında C’yi vericek. Bunla ilgili yardımcı olabilir misiniz? teşekkürler
sanırım şöyle bir kod kullanabilirsiniz ( Microcode studio + picbasic pro kullandım):
kodu proteusta denedim en sağdaki butonu kullandım(pic’e en yakın olan buton, üstünde D port yazıyor):
resim :
umarım yardımcı olmuşumdur…
Merhabalar. ben bu projeyi yapmak istiyorum fakat bana devre elemanlarının ve baskı devresini verebilir misiniz? saygılarımla.
iyi akşamlar öncelikle paylaşımınız için teşekkürler ben sizin yaptığınıza benzer fakat 4 butonlu 4 ledli herbir butona bastığımızda ilgili led yanacak şekilde ve lcd ekranın 1. satırında hangi led in yandığı bilgisini gösterecek şekilde bu işlemi yaptım yazdığınız programı ve proteus görselini değiştirerek.buna ek olarak her bir butona bastığımızda voltaj değerini basılan butondaki voltaj değerini pic16f877 deki herhangi bir adc yi kullanarak ekranda lcd nin 2. satırında bu voltaj değerini göstermem lazım ve aynı zamanda da yine bir adc daha kullanarak bu voltaj değerini DAC çıkışında okumam lazım bu konuda bana yardımcı olabilirmisiniz
şimdiden eşekkür ederim…
saygılarımla
Merhabalar;
Öncelikle çalışma için teşekkürler.
Benim acizane bi sorum olacak. Aynı devreyi buton basılı iken yanan ve bırakılınca sönen şekilde nasıl programlaya biliriz. Yazılım konusunda yardımcı olursanız sevinirim.