求单片机c语言定时程序。初始条件下继电器断开,继电器低电平有效。

求单片机c语言定时程序。初始条件下继电器断开,继电器低电平有效。显示共三位数码管,小时1位0-9.分钟两位00-59.k1健+1,k2健-1,k3健移位。k4健清零,继电器断开。谢谢

第1个回答  2016-06-30
#include //假定继电器是安装在P3.5,按键分别安装在P3.6, P3.7,时钟频率12MHzsbit sw1=P3^6;sbit sw2=P3^7;sbit relay=P3^5; void SetupTimer0(){ TMOD &= 0XF0; //仅保留T1信息 TMOD |= 0X02; //设置T0: 定时功能,方式2,自动重载8位定时器/计数器 TH0 = 256-250;//定时每0.25ms中断一次 TL0 = 256-250; TR0 = 1; //开启定时器 ET0 = 1; //定时器0中断打开} data unsigned char us250;data unsigned int relay_timer;void Timer0_ISR() interrupt 1 //定时中断服务程序,为按键消抖服务{//如果一个动作过程刚刚开始,则设定继电器延时3000ms,并打开继电器if (0==relay_timer && 0==sw1) {relay_timer=3000; relay=1;} if (++us250>=4) //250us中断一次,每四次得到1ms { us250=0; if(relay_timer==0) relay=0; //如继电器延时为0,则关继电器 else --relay_timer; //否则继电器延时递减 } //如果当前正处于一个动作过程且有sw2按下,则修改继电器延时为1000msif (relay_timer && 0==sw2) relay_timer=1000;} void main(){us250=0;relay_timer=0;relay=0; SetupTimer0(); EA = 1; //全局中断打开 while(1); //所有的动作均在中断函数内完成}
相似回答