PIC16F84A Mikrodenetleyici ile Ortak Katotlu 7 Segment Display Sayıcı Uygulama Devresi ve Program Kodu



Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 haneli 7 Segment Display Sayıcı Uygulama Devresi görülmektedir.

Devrede ortak katotlu 7 segment display kullanılmıştır.

Rb7'ye bağlı olan butona basıldığında görüntülenen sayı değeri 1 artar.

PIC16F84A Mikrodenetleyici devresi +5V gerilim ile çalışmaktadır.

4 basamaklı 7 Segment Display Sayıcı PIC16F84A Mikrodenetleyici CCS C kodu

1 // 4-Digit digital counter using PIC16F84A (common cathode type)
2 // Common cathode 7-segment display
3 // İçeriğe ulaşabilmek veya forumu aktif kullanabilmek için öncelikle GİRİŞ yapmalısınız, Üye değilseniz KAYIT olmalısınız
veya aradığınız konu hakkında ElektroBLOG sayfalarımızdan arama yapabilirsiniz
4
5 #include <16F84A.h>
6 #fuses HS,NOWDT,PUT,NOPROTECT
7 #use delay(crystal=8000000)
8
9 short s; // Used to know button position
10 unsigned int digit, digit1, digit10, digit100,digit1000;
11 unsigned long i;
12 unsigned int seg(unsigned int num) {
13 switch (num) {
14 case 0 : return 0x3F;
15 case 1 : return 0x06;
16 case 2 : return 0x5B;
17 case 3 : return 0x4F;
18 case 4 : return 0x66;
19 case 5 : return 0x6D;
20 case 6 : return 0x7D;
21 case 7 : return 0x07;
22 case 8 : return 0x7F;
23 case 9 : return 0x6F;
24 }
25 }
26 void main() {
27 while(TRUE) {
28 if(input(PIN_B7) == 1)
29 s = 1;
30 if(s == 1) {
31 if(input(PIN_B7) == 0) {
32 s = 0;
33 i++;
34 if(i > 9999)
35 i = 0;
36 }
37 }
38 digit = i % 10;
39 digit1 = seg(digit);
40 output_a(0); // Turn off all displays
41 output_b(digit1); // Send ones digit
42 output_a(8); // Turn on display for ones
43 delay_ms(5);
44 digit = (i / 10) % 10;
45 digit10 = seg(digit);
46 output_a(0); // Turn off all displays
47 output_b(digit10); // Send tens digit
48 output_a(4); // Turn on display for tens
49 delay_ms(5);
50 digit = (i / 100) % 10;
51 digit100 = seg(digit);
52 output_a(0); // Turn off all displays
53 output_b(digit100); // Send hundreds digit
54 output_a(2); // Turn on display for hundreds
55 delay_ms(5);
56 digit = (i / 1000) % 10;
57 digit1000 = seg(digit);
58 output_a(0); // Turn off all displays
59 output_b(digit1000); // Send thousands digit
60 output_a(1); // Turn on display for thousands
61 delay_ms(5);
62 }
63 }