动态数码管秒计时

#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