15 Haziran 2018 Cuma

PIC 16f84 ile 4 Digit 7 Segment ileri sayıcı

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