KST-51单片机:c语言编程实现数码管动态显示秒表的倒计时

/*60S倒计时*/
/*个位每1S变一次,从0~9*/
/*十位,个位为0的下一秒十位发生变化*/

#include<reg52.h>

sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;

unsigned char code LedChar[]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90
};

void main()
{
	unsigned int cnt=0; //记录中断次数
	unsigned int sec=0; //记录秒数
	unsigned char g=0;   //个位数码管
	unsigned char s=6;   //十位数码管 

	ENLED=0;			 //使能U3 选中数码管DS1
	TMOD=0x01;			 //T0为模式1
	TH0=0xB8;			 //T0赋初值0xB800
	TL0=0x00;
	TR0=1;				 //启动T0

	while(1)
	{
		ADDR3=1;
		P0=0xff;
		ADDR2=0;
		ADDR1=0;
		ADDR0=0;
		P0=LedChar[g];   //选中个位数码管
				
		if(TF0==1)		 //判断T0是否溢出
		{
			TF0=0;		 //T0溢出后清零中断标志
			TH0=0xB8;        //并重新赋值
			TL0=0x00;
			cnt++;
		}
		if(cnt>=50)	  //判断溢出是否达到50次
		{
			cnt=0;    //达到五十次(1s)清零
			sec--;    //秒数累加
		}

		P0=0xff;
		ADDR0=1;
		P0=LedChar[s];   //选中十位数码管,并显示当前秒数下的数字

		if(s==0&&g==0)    //避免00状态的出现,状态60~60时间为60s
			s=6;
		if(g==0&&sec%10==1)
			s--;
		if(sec%10!=0)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值