PIC 16f84, 7404 ve 4 adet ortak anotlu 7 segment display ile yapılmış 0-9999 sayıcı devresidir. Devrede artırma butonu ile ileri sayar reset butonu ise sıfırlamak için kullanılır. 12voltla çalışır 7805 entegresiyle gerilim PIC'in çalışa bileceği 5volt'a düşürülmüştür.
MALΖEME LİSTESİ:
1-7805
2-4MHz kristal
3-2adet 22pf
4-100nf
5-4k7
6-7adet 330hom
7-10k
8-16F684A
9-2adet 1k
10-2adet buton
11-7404
13-4digit ortak anotlu displey
DEVRE ŞEMASI:
CCSC KODU:
#include <16F84A.h>#fuses XT,NOWDT,PUT,NOPROTECT
#use delay(crystal=4000000)
short s; // Buton konumu için
short y; // Buton konumu için
unsigned int digit, digit1, digit10, digit100,digit1000;
unsigned long i;
unsigned int seg(unsigned int num)
{
switch (num)
{
case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
}
}
void main()
{
while(TRUE)
{
if(input(PIN_b7) == 1)
s = 1;
if(s == 1)
{
if(input(PIN_b7) == 0)
{
s = 0;
i++;
if(i > 9999)
i = 0;
}
}
digit = i % 10;
digit1 = seg(digit);
output_a(0x0F); // Ekranlar söndürülür
output_b(digit1); // birler hanesi b portuna konulur
output_a(0x07); // birler hanesi aktif
delay_ms(5);
digit = (i / 10) % 10;
digit10 = seg(digit);
output_a(0x0F); // Ekranlar söndürülür
output_b(digit10); // onlar hanesi b portuna konulur
output_a(0x0B); // onlar hanesi aktif
delay_ms(5);
digit = (i / 100) % 10;
digit100 = seg(digit);
output_a(0x0F); // Ekranlar söndürülür
output_b(digit100); // yüzler hanesi b portuna konulur
output_a(0x0D); // yüzler hanesi aktif
delay_ms(5);
digit = (i / 1000) % 10;
digit1000 = seg(digit);
output_a(0x0F); // Ekranlar söndürülür
output_b(digit1000); // binler hanesi b portuna konulur
output_a(0x0E); // binler hanesi aktif
delay_ms(5);
}
}
Hiç yorum yok:
Yorum Gönder