Bu uygulamada PIC 16F628A ve ortak katotlu 7 segment display
kullanarak 0-F sayıcısı yapacağız.
Kullanılacak
Malzemeler
- 1xPIC16F628A
- 1x4
Mhz kristal
- 2x22pf
seramik kondansatör
- 1x100nF
seramik kondansatör
- 1x100
ohm direnç
- 1x4k7
ohm direnç
- 7x470
ohm direnç
- 1xButon
- 5 V
DC kaynak(Batarya, pil, adaptör veya güç kaynağı)
Şekil 3-PIC16F628A Pin Diyagramı Şekil 4-Ortak katotlu 7 segment display
PIC ve Display Devresi
7 Segment Display’in
Çalışma Mantığı
7 segment display basit bir çalışma mantığına sahiptir. Yukarıdaki
display şekline bakacak olursak her bir pin bir segmenti kontrol etmektedir.
Örnek verecek olursak a pinini lojik 1 seviyesine çekersek a segmenti yanar,
diğer pinlerde de durum aynıdır. Display de 0 rakamını göstermek için a, b,
c,d, e ve f pinleri lojik 1 diğer pinler ise lojik 0 seviyesine çekilmelidir,
yani PORTB’ ye b’00111111’ çıkışı verilmelidir, bu da H’3F’ hexadecimal
sayısına denk gelmektedir. Saydırma işlemini ise çevrim tablosu kullanarak
yapabiliriz.
Not: Eğer ortak anotlu display kullanacaksanız, anotu
5 V’a bağlamalı ve PORTB’ ye de displayde 0 rakamını göstermek için b’11000000’
çıkışı verilmelidir, diğer karakterlerin binary(ikili) değerleri de 0 rakamında olduğu gibi tablodaki değerlerin tamamlayanı olarak değişecektir.
Çevrim Tablosu
|
Görüntülenecek
Değer
|
Binary Sayı
|
Hexadecimal Sayı
|
|
0
|
B'00111111'
|
H'3F'
|
|
1
|
B'00000110'
|
H'06'
|
|
2
|
B'01011011'
|
H'5B'
|
|
3
|
B'01001111'
|
H'4F'
|
|
4
|
B'01100110'
|
H'66'
|
|
5
|
B'01101101'
|
H'6D'
|
|
6
|
B'01111101'
|
H'7D'
|
|
7
|
B'00000111'
|
H'07'
|
|
8
|
B'01111111'
|
H'7F'
|
|
9
|
B'01101111'
|
H'6F'
|
|
A
|
B'01110111'
|
H'77'
|
|
b
|
B'01111100'
|
H'7C'
|
|
C
|
B'00111001'
|
H'39'
|
|
d
|
B'01011110'
|
H'5E'
|
|
E
|
B'01111001'
|
H'79'
|
|
F
|
B'01110001'
|
H'71'
|
|
.
|
B'10000000'
|
H'80'
|
PIC Assembly Kodu
;------------------------------Basit
Sayıcı-------------------------------------------
;---------------------------Tuna
Bulut tarafından yazıldı---------------------------
LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _XT_OSC &
_WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF &
_DATA_CP_OFF & _CP_OFF
CBLOCK H'20'
SAYAC
SAYAC1
SAYAC2
ENDC
MOVLW H'07'
MOVWF CMCON ;COMPARATOR ÖZELLİĞİ KAPALI VE PORTA I/O İÇİN AKTİF MODDA
CLRF PORTB ;PORTB Yİ SIFIRLA
;GİRİŞ-ÇIKIŞ TANIMLAMALARI
BANKSEL TRISA ;BANK1 E GEÇİŞ YAP
MOVLW H'FF'
MOVWF TRISA ;PORTA NIN BÜTÜN PİNLERİNİ GİRİŞ YAP
CLRF TRISB ;PORTB NİN BÜTÜN PİNLERİNİ ÇIKIŞ YAP
BANKSEL PORTB ;TEKRAR BANK0 A GEÇ
CLRF PORTB ;PORTB Yİ SIFIRLA
;ANA PROGRAM
CLRF SAYAC ;SAYAC'ı sıfırla
YAZ
MOVF SAYAC,W
;SAYAC değerini W ya yükle
ANDLW B'00001111'
;W'nin üst dört bitini sıfırla
CALL TABLO
;Tabloyu çağır
MOVWF PORTB ;Değeri displayde göster
INCF SAYAC,F
;SAYAC’ı 1 artır ve üstüne yaz
CALL GECIKME ;Gecikme
CALL GECIKME ;Gecikme
CALL GECIKME ;Gecikme
GOTO YAZ ;Bir
sonraki değeri yazdırmak için başa dön
TABLO
ADDWF PCL,F
RETLW H'3F' ;0
RETLW H'06' ;1
RETLW H'5B' ;2
RETLW H'4F' ;3
RETLW H'66' ;4
RETLW H'6D' ;5
RETLW H'7D' ;6
RETLW H'07' ;7
RETLW H'7F' ;8
RETLW H'6F' ;9
RETLW H'77' ;A
RETLW H'7C' ;b
RETLW H'39' ;C
RETLW H'5E' ;d
RETLW H'79' ;E
RETLW H'71' ;F
;-------------------195 MS'LİK
GECİKME-----------------------------------
GECIKME
MOVLW H'FF'
MOVWF SAYAC1
DONGU1
MOVLW H'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
END
Kodun Çalışma Mantığı
Kodun mantığı oldukça basit öncelikle bir tablo
oluşturuyoruz ve bu tablodaki değerleri sırasıyla displaye yüklüyoruz ve
istenilen değerleri böylelikle yazdırmış oluyoruz. Tablodaki değeri çağırmadan
önce W yazmacındaki değerlere b’00001111’ sayısıyla AND işlemini uyguluyoruz ki
tablodaki 16 değeri de çağırdıktan sonra W yazmacındaki değer 0 layıp başa
dönsün böylelikle display sürekli 0-F arasında saysın.
|