'--------------------------------------------------------- 'Programın adı: Uyg_7_8.bas 'Programın işlevi: 4x4'lük keypad'dan tarama yöntemi ile okuyup PortB'deki 2 haneli 7 segment display'de gösterir. 'Tarih:14/07/2007 Uyarlama:1.00 Derleyici:PBP '--------------Tanımlamalar------------------------------- @ DEVICE pic16F877A, XT_OSC ' 4 MHz kristal osilatör @ DEVICE pic16F877A, WDT_OFF ' Watchdog Timer pasif @ DEVICE pic16F877A, PWRT_ON ' Power-On Timer aktif @ DEVICE pic16F877A, BOD_OFF ' Brown-Out Detect kapalı @ DEVICE pic16F877A, LVP_OFF ' Düşük ger. Prog. kapalı @ DEVICE pic16F877A, CPD_OFF ' Data belleği koruması yok @ DEVICE pic16F877A, PROTECT_OFF ' Program belleği koruma yok Segmentler Var PORTB ' 7 segment LED'leri. Dijitler Var PORTA ' Dijitlerin ortak uçları. i Var Byte 'Dijit aktifleme değişkeni N Var Byte 'Gösterilecek sayıyı seçme değişkeni Tus Var WORD TRISA = %11111100 ' Dijit pin'leri çıkış (RA0 ve RA1) TRISB = %10000000 ' Segment pin'leri çıkış TRISD = %00001111 'PORTD'nin üst dört bit'i ÇIKIŞ(satır) ' alt dört bit'i GİRİŞ(sütun) PORTB = %00000000 'PortB'deki LED'leri söndür. Tus=0 ;--------------Ana program----------------------------------- Ana_prog: Call Tus_tara ' 4x4 keypad'ı oku. Call seg_goster ' 2 haneli 7 segment display'de göster. goto ana_prog ' Okuyup göstermeyi devamlı yap. ;----------Tuş tarama alt programı--------------------------- Tus_tara: PORTD = %00010000 ' 1. sütun seçildi IF PORTD.0 THEN Tus =1 '1 tuşuna basıldı IF PORTD.1 THEN Tus =2 '2 tuşuna basıldı IF PORTD.2 THEN Tus =3 '3 tuşuna basıldı IF PORTD.3 THEN Tus =10 'A tuşuna basıldı PORTD = %00100000 ' 2. sütun seçildi IF PORTD.0 THEN Tus = 4 '4 tuşuna basıldı IF PORTD.1 THEN Tus = 5 '5 tuşuna basıldı IF PORTD.2 THEN Tus = 6 '6 tuşuna basıldı IF PORTD.3 THEN Tus = 11 'B tuşuna basıldı PORTD = %01000000 ' 3. sütun seçildi IF PORTD.0 THEN Tus = 7 '7 tuşuna basıldı IF PORTD.1 THEN Tus = 8 '8 tuşuna basıldı IF PORTD.2 THEN Tus = 9 '9 tuşuna basıldı IF PORTD.3 THEN Tus = 12 'C tuşuna basıldı PORTD = %10000000 ' 4. sütun seçildi IF PORTD.0 THEN Tus = 14 '* tuşuna basıldı IF PORTD.1 THEN Tus = 0 '0 tuşuna basıldı IF PORTD.2 THEN Tus = 15 '# tuşuna basıldı IF PORTD.3 THEN Tus = 13 'D tuşuna basıldı Return 'tus_tara alt programının sonu ' -----0-99 arasında gösterilecek sayıları seçip------------- '-----Sayi_goster alt programına aktaran alt program.-------- Seg_goster: Sayi_sec: For i = 0 To 1 ' 2 dijiti tara arasında tarama yap. n = Tus Dig i ' Gösterilecek sayıyı seç. Gosub Sayi_goster ' Bir dijiti göster. Pause 1 ' Sayıyı 1 ms display'de tut. Next i ' Sonraki dijit Return ' Sayi_sec alt programının sonu ' ------Bir dijiti display'de gösterme alt programı---------- Sayi_goster: Dijitler = $00 ' İz bırakmayı önlemek için dijitler pasif ' n içerisindeki binary sayıyı segment bilgisine dönüştür. Lookup n, [$3F, $06, $5B, $4F, $66, $6D, $7C, $07, $7F, $6F, $77, $7C, $39, $5E, $79, $71], Segmentler Dijitler = ~Dcd i ' Dijitleri aktif yapmak için ortak ' uçlara (RA0, RA1)sırayla "1" ve "0" gönderir. Return 'Sayi_goster alt programının sonu Return 'Seg_goster alt programının sonu '-----------------------------------------------------------