實用制作:基于單片機的數(shù)顯可調(diào)定時器
程序清單:
#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;//秒的低位放入顯示緩沖區(qū)
buffer[1]=minute/10;//秒的高位放入顯示緩沖區(qū)
buffer[2]=hour; //小時放入顯示緩沖區(qū)
count++;
if(count%10==0)
P1_7=!P1_7; //正在充電 充電指示燈每秒閃爍一次
}
void display()//數(shù)碼管顯示子程序
{uchar i;
for(i=2;i!=0xff;i--)
{
P0=buffer[i];
P2=bbit[i];
delay(10);
P0=0XFF;
}
}
評論