中断与数码管的应用——"9999"倒计时表
#include <reg52.h>
unsigned char code LedChar[10]={
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char LedBuff[4]={
0XFF,0XFF,0XFF,0XFF};
sbit Tube1 = P1^0;
sbit Tube2 = P1^1;
sbit Tube3 = P1^2;
sbit Tube4 = P1^3;
unsigned char i = 0;
unsigned int cnt = 0;
unsigned long sec = 0;
void main()
{
EA = 1;
ET0 = 1;
TMOD = 0X01;
TH0 = 0XFFED;
TL0 = 0XFFFF;
TR0 = 1;
while(1)
{
if(cnt>500)
{
cnt = 0;
sec++;
}
LedBuff[0] = LedChar[9-sec%10];
LedBuff[1] = LedChar[9-sec/10%10];
LedBuff[2] = LedChar[9-sec/100%10];
LedBuff[3] = LedChar[9-sec/1000%10];
}
}
void InterruptTimer() interrupt 1
{
TH0 = 0XFFED;
TL0 = 0XFFFF;
cnt++;
switch(i)
{
case 0:
P0 = LedBuff[0];Tube1=0;Tube2=1;Tube3=1;Tube4=1;i++;break;
case 1:
P0 = LedBuff[1];Tube1=1;Tube2=0;Tube3=1;Tube4=1;i++;break;
case 2:
P0 = LedBuff[2];Tube1=1;Tube2=1;Tube3=0;Tube4=1;i++;break;
case 3:
P0 = LedBuff[3];Tube1=1;Tube2=1;Tube3=1;Tube4=0;i=0;break;
default:break;
}
}