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