实用制作:基于单片机的数显可调定时器
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;
}
}
void main()//主函数
{
P1=0xff; //初始化
P3=0;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
while(1)
{
buffer[0]=minute%10;
buffer[1]=minute/10;
buffer[2]=hour;
display();
if(P1_0==0)//分钟“加十”
{
delay(5);
if(P1_0==0)
{minute+=10;if(minute>=59)minute=0;} while(P1_0==0);
}
if(P1_1==0)//分钟“减十”
{
delay(5);
if(P1_1==0)
{minute-=10;if(minute>=59)minute=0;}while(P1_1==0);
}
if(P1_3==0)//小时“加一”
//P1_3和P1_2互换位置,完全是因为PCB布局的需要
{
delay(5);
if(P1_3==0)
{hour++;if(hour>=9)hour=9;} while(P1_3==0);
}
if(P1_2==0)//小时“减一”
{
delay(5);
if(P1_2==0)
{hour--;if(hour>=9)hour=9;}while(P1_2==0);
}
if(P1_4==0)break;
//如果按下设置键,跳出本循环,定时开始
}
TR0=1;
while(1)
{
display();
}
}
- 高速PCI信号采集卡设计与实现综合实例之:硬件系统实现(06-04)
- STM32 数字电压表 LM317 可调电源(12-03)
- 单片机产生占空比可调方波(PWM)(12-02)
- 单片机产生频率和输出电压可调的矩形波信号发生器(12-02)
- 一个简单的单片机直流可调稳压电源设计(12-01)
- STC单片机实现可调PWM输出的C51程序(12-01)