#include<reg52.h>
sbit HCA = P2^2;
sbit HCB = P2^3;
sbit HCC = P2^4;
unsigned char code LEDCHAR[] = {
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char LEDBUFF[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char i = 0;
unsigned int x = 0;
unsigned char sign = 0;
unsigned char y = 7;
void main()
{
unsigned long sec = 0;
EA = 1;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
ET0 = 1;
TR0 = 1;
while(1)
{
if(sign == 1)
{
sign = 0;
sec++;
LEDBUFF[0] = LEDCHAR[sec%10];
LEDBUFF[1] = LEDCHAR[sec/10%10];
LEDBUFF[2] = LEDCHAR[sec/100%10];
LEDBUFF[3] = LEDCHAR[sec/1000%10];
LEDBUFF[4] = LEDCHAR[sec/10000%10];
LEDBUFF[5] = LEDCHAR[sec/100000%10];
LEDBUFF[6] = LEDCHAR[sec/1000000%10];
LEDBUFF[7] = LEDCHAR[sec/10000000%10];
while(LEDBUFF[y] == 0x3F)
{
LEDBUFF[y] = 0x00;
y--;
}
y = 7;
}
}
}
void InterruptTimer0()interrupt 1
{
TH0 = 0xFC;
TL0 = 0x67;
x++;
if(x == 1000)
{
x = 0;
sign = 1;
}
P0 = 0x00;
switch(i)
{
case 0:HCC = 0;HCB = 0;HCA = 0;i++;P0 = LEDBUFF[0];break;
case 1:HCC = 0;HCB = 0;HCA = 1;i++;P0 = LEDBUFF[1];break;
case 2:HCC = 0;HCB = 1;HCA = 0;i++;P0 = LEDBUFF[2];break;
case 3:HCC = 0;HCB = 1;HCA = 1;i++;P0 = LEDBUFF[3];break;
case 4:HCC = 1;HCB = 0;HCA = 0;i++;P0 = LEDBUFF[4];break;
case 5:HCC = 1;HCB = 0;HCA = 1;i++;P0 = LEDBUFF[5];break;
case 6:HCC = 1;HCB = 1;HCA = 0;i++;P0 = LEDBUFF[6];break;
case 7:HCC = 1;HCB = 1;HCA = 1;i = 0;P0 = LEDBUFF[7];break;
default:break;
}
}
求助!!!虽然使用了中断,但当秒数小于十时,只有十位依然会抖动;当秒数大于十时,就又恢复正常无抖动发生,不知道为什么。