#include <STC89C5xRC.H>
unsigned char code LedChar[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,0};
unsigned char ledbuff[] = {0,0,0,0,0,0,0,0};
unsigned int cnt = 0;
unsigned long sec = 0;
unsigned char i = 0;
unsigned char d = 0;
void main()
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
while(1)
{
if(cnt==1000)
{
cnt = 0;
sec++;
ledbuff[0] = sec%10;
ledbuff[1] = sec/10%10;
ledbuff[2] = sec/100%10;
ledbuff[3] = sec/1000%10;
ledbuff[4] = sec/10000%10;
ledbuff[5] = sec/100000%10;
ledbuff[6] = sec/1000000%10;
ledbuff[7] = sec/10000000%10;
}
}
}
void InterruptTimer0() interrupt 1
{
TL0 = 0x18;
TH0 = 0xFC;
cnt++;
if(sec<=9)
{
for(d=1;d<=7;d++)
{
ledbuff[d]=10; //LedChar[10]数码管不显示
}
}
if(sec<=99)
{
for(d=2;d<=7;d++)
{
ledbuff[d]=10;
}
}
if(sec<=999)
{
for(d=3;d<=7;d++)
{
ledbuff[d]=10;
}
}
if(sec<=9999)
{
for(d=4;d<=7;d++)
{
ledbuff[d]=10;
}
}
if(sec<=99999)
{
for(d=5;d<=7;d++)
{
ledbuff[d]=10;
}
}
if(sec<=999999)
{
for(d=6;d<=7;d++)
{
ledbuff[d]=10;
}
}
if(sec<=9999999)
{
ledbuff[7]=10;
}
P3 = 0;
switch(i)
{
case 0:P24=1;P23=1;P22=1;P3 = LedChar[ledbuff[0]];i++;break;
case 1:P24=1;P23=1;P22=0;P3 = LedChar[ledbuff[1]];i++;break;
case 2:P24=1;P23=0;P22=1;P3 = LedChar[ledbuff[2]];i++;break;
case 3:P24=1;P23=0;P22=0;P3 = LedChar[ledbuff[3]];i++;break;
case 4:P24=0;P23=1;P22=1;P3 = LedChar[ledbuff[4]];i++;break;
case 5:P24=0;P23=1;P22=0;P3 = LedChar[ledbuff[5]];i++;break;
case 6:P24=0;P23=0;P22=1;P3 = LedChar[ledbuff[6]];i++;break;
case 7:P24=0;P23=0;P22=0;P3 = LedChar[ledbuff[7]];i=0;break;
default: break;
}
}
动态数码管秒计时
猜你喜欢
转载自blog.csdn.net/asty008/article/details/114953629
今日推荐
周排行