0

我的 7 段 2 位计数器有些问题。我正在使用带有 20Mhz 晶体的 PIC16F877A。我正在使用副本 PICKIT 3 和 MPLAB IDE 对我的图片进行编程。

电路

当我写 02,03,04,04...06 段时,它显示为 88 但 2。数字 C 和 F 段不像其他段那样亮。

02

当我写01,07,10时,一切正常

我的代码:

#include <16F877A.h>   
#use delay(clock=20m)
#define Dig2 PIN_A0
#define Dig1 PIN_A3
#define rfid PIN_A1
#define reset PIN_A2
#use fast_io(b)
#use fast_io(a)
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
//static const int digit[10]= { 0b0111111, 0b0000110, 0b1011011, 0b1001111,0b1100110,0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111 };// anode
static const int digit[10]= { 0b1000000, 0b1111001, 0b0100100, 0b0110000,0b0011001,0b0010010, 0b0000010, 0b1111000, 0b0000000, 0b0010000 };//cathode

//SECOND CODE
void display(unsigned char value)
{
    int onlar = value / 10;
    int birler = value % 10;
    output_low(Dig2);
    output_high(Dig1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(Dig1);
    output_high(Dig2);
    output_b(digit[birler]);
    delay_ms(5);
    }
/* FIRST CODE
// Written by Michaël Roy
void display(unsigned char value)
{
    static char tens = 0;
    char dig = (tens) ? (value / 10) : (value % 10);
    dig = digit[dig];
    output_high((tens) ? Dig1 : Dig2);
    output_b(dig); 
    output_low((tens) ? Dig2 : Dig1); 
    tens = !tens;
} */
void main()
{

   char sayi = 0;
   set_tris_b(0b10000000);
   set_tris_a(0b11111010);

   while(1)
   {
     display(sayi);

     if(input(rfid) == 0)
     {
        sayi++;       
    while(input(rfid) == 0)
    {
       display(sayi);
    }
    if (sayi == 100)
    {
                sayi = 0  ;

    }
}
     if(input(reset) == 0)
     {
                delay_ms(3000);
                if(input(reset) == 0)
                {
                   sayi = 0;
                   }
                }
}
}

我该如何解决这个问题?

4

0 回答 0