7段无法正常工作

时间:2017-08-19 22:54:23

标签: c pic seven-segment-display

我对7段2位数的计数器有些麻烦。我使用的是带有20Mhz晶振的PIC16F877A。我使用副本PICKIT 3和MPLAB IDE对我的图片进行编程。

Circuit

当我写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;
                   }
                }
}
}

我该如何解决这个问题?

0 个答案:

没有答案