Elektronik / Mikrodenetleyici Projeleri/

PicBasic Pro 4×4 buton keypad uygulaması pic16f877

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 uygulamanın picbasic pro ve proteus isis dosyaları: PicBasic Pro 4×4 buton keypad uygulaması pic16f877

Dosya indirme LINK listesi (TXT formatında) link-8509.zip şifre-pass: 320volt.com

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 
  1. ahmet dara 2009/12/15
  2. dojan_allstar 2010/05/19
  3. Erkan AVCI 2011/03/17
  4. tolga danışman 2011/12/09
  5. Mehmet 2018/01/07

Yorum

Soru: