动态数码管秒计时

#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;		
	}				  
}

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值