#51单片机#中断与数码管的应用

中断与数码管的应用——"9999"倒计时表

#include <reg52.h>

unsigned char code LedChar[10]={//数码管显示的数字0~9
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()
{
	//开启T0中断
	EA = 1;
	ET0 = 1;

	//设置T0
	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];	
	}
}

//定时器0中断服务
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;
	}
}
发布了9 篇原创文章 · 获赞 0 · 访问量 170

猜你喜欢

转载自blog.csdn.net/kkkkkkc1/article/details/104366430