Elektrik elektronik eğitimi ile ilgili bilgiler, kitap özetleri, kitap sınav soruları ve eğitime dair her şey
Sayfalar
▼
30 Ağustos 2019 Cuma
PIC16F84A Mikrodenetleyici ile Ortak Anotlu 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 anotlu 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 anode type)
2 // http://elektrikelektronikegitimi.blogspot.com
3
4 #include <16F84A.h>
5 #fuses HS,NOWDT,PUT,NOPROTECT
6 #use delay(crystal=8000000)
7
8 short s; // Used to know button position
9 unsigned int digit, digit1, digit10, digit100,digit1000;
10 unsigned long i;
11 unsigned int seg(unsigned int num) {
12 switch (num) {
13 case 0 : return 0xC0;
14 case 1 : return 0xF9;
15 case 2 : return 0xA4;
16 case 3 : return 0xB0;
17 case 4 : return 0x99;
18 case 5 : return 0x92;
19 case 6 : return 0x82;
20 case 7 : return 0xF8;
21 case 8 : return 0x80;
22 case 9 : return 0x90;
23 }
24 }
25 void main() {
26 while(TRUE) {
27 if(input(PIN_B7) == 1)
28 s = 1;
29 if(s == 1) {
30 if(input(PIN_B7) == 0) {
31 s = 0;
32 i++;
33 if(i > 9999)
34 i = 0;
35 }
36 }
37 digit = i % 10;
38 digit1 = seg(digit);
39 output_a(0x0F); // Turn off all displays
40 output_b(digit1); // Send ones digit
41 output_a(0x07); // Turn on display for ones
42 delay_ms(5);
43 digit = (i / 10) % 10;
44 digit10 = seg(digit);
45 output_a(0x0F); // Turn off all displays
46 output_b(digit10); // Send tens digit
47 output_a(0x0B); // Turn on display for tens
48 delay_ms(5);
49 digit = (i / 100) % 10;
50 digit100 = seg(digit);
51 output_a(0x0F); // Turn off all displays
52 output_b(digit100); // Send hundreds digit
53 output_a(0x0D); // Turn on display for hundreds
54 delay_ms(5);
55 digit = (i / 1000) % 10;
56 digit1000 = seg(digit);
57 output_a(0x0F); // Turn off all displays
58 output_b(digit1000); // Send thousands digit
59 output_a(0x0E); // Turn on display for thousands
60 delay_ms(5);
61 }
62 }
Hiç yorum yok:
Yorum Gönder