实用制作:基于单片机的数显可调定时器
程序清单:
#include AT89X51.H>
#defi ne uchar unsigned char
#defi ne uint unsigned int
uchar bbit[]={0x04,0x02,0x01};
uchar buffer[]={0,0,0};
uchar hour=8,minute;//小时初始值为8,分钟为00
uint count;
void delay(uchar ms)//毫秒级延时子程序
{
uchar j;
for(;ms>0;ms--)
for(j=0;j120;j++);
}
void tt0() interrupt 1 using 1//定时器T0中断子程序
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
if(count==1200) //50ms*1200=60s(秒)
{
count=0;
if(hour==0minute==0)
{
P3_0=1; //继电器动作
while(1){P1_7=0;}//充电完成 灯由闪烁变常亮
}
if(minute==0)
{
minute=60; hour--;
if(hour>=9)hour=9;
}
minute--;
if(minute>=59)minute=59;
}
buffer[0]=minute%10;//秒的低位放入显示缓冲区
buffer[1]=minute/10;//秒的高位放入显示缓冲区
buffer[2]=hour; //小时放入显示缓冲区
count++;
if(count%10==0)
P1_7=!P1_7; //正在充电 充电指示灯每秒闪烁一次
}
void display()//数码管显示子程序
{uchar i;
for(i=2;i!=0xff;i--)
{
P0=buffer[i];
P2=bbit[i];
delay(10);
P0=0XFF;
}
}
评论