单片机课设-60秒倒计时器

proteus单片机实现60秒倒计时器

项目要实现的60s秒表倒计时器,用 AT89C51单片机的定时 / 计数器 T0 产生一秒的定时时间,实现 59 到 0秒的循环显示的功能。具体要求:
1)按下启动按键后,倒计时器开始工作,从60S开始倒计时。
2)再次按下启动按键后,倒计时器复位。
3)按下暂停按键后,倒计时器停止计时工作。
4)再次按下暂停按键后,倒计时器继续进行计时工作。
单片机课设-60秒倒计时器_第1张图片
顺序图:
单片机课设-60秒倒计时器_第2张图片
流程图:
单片机课设-60秒倒计时器_第3张图片
组件图:
单片机课设-60秒倒计时器_第4张图片
代码如下:

#include 
unsigned char code LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char m,buf[4];
unsigned int shu,j;
void delay(unsigned char x)
{
	unsigned char y;
	for(;x>0;x--)
		for(y=110;y>0;y--);					
}
void dis(unsigned int temp)
{
	unsigned char i;
	buf[0]=0;
	buf[1]=0;
	buf[2]=temp/10;
	buf[3]=temp%10;
	
	for(i=0;i<4;i++)
	{
		P2=(0x01<<i);
		P1=LED[buf[i]];
		delay(5);
		P1=0xff;
	}
}

void INT_0( ) interrupt 0 
{	
	TR0=~TR0;
}
void INT_1( ) interrupt 2 
{	
	TR0=~TR0;
	TL0=(65536-50000)%256;	
    TH0=(65536-50000)/256;
	shu=60;
    j=0; 
          	
}
void TIME_0( ) interrupt 1
{
    TL0=(65536-50000)%256;	
    TH0=(65536-50000)/256;			
    j++;
	if(j==20)
	{
	    j=0;
		shu--;
		if(shu==0)
		TR0=0;
	}
}
void main()
{       
    TCON=0x05;
    IP=0x00;
    TMOD=0x01;
    TL0=(65536-50000)%256;	
    TH0=(65536-50000)/256;	
    TR0=1;
    IE=0x87;
    shu=60;
    j=1;
	while(1)
	{
		dis(shu);
	}		
}

你可能感兴趣的:(单片机,单片机,c语言)