51单片机计时器有按键
时间: 2023-05-27 07:03:04 浏览: 129
51按键计数器
可以使用51单片机的定时器和外部中断来实现计时器有按键功能。
首先通过定时器的计数器来实现计时功能,然后在外部中断中检测按键的状态,如果按键按下,则暂停定时器计时,并将计时结果显示在数码管上;如果再次按下按键,则继续计时。
具体实现方法可以参考以下代码:
```
#include <reg52.h>
sbit KEY = P3^2; //按键连接在P3.2口
unsigned int count; //计时器计数值
unsigned char flag; //中断标志位
//定时器0中断函数
void timer0_isr() interrupt 1
{
TH0 = 0xFC; //重新赋初值,定时1ms
TL0 = 0x67;
count++; //计数器累加1
flag = 0; //清除中断标志位
}
//外部中断0函数
void ext0_isr() interrupt 0
{
delay(10); //延时消抖
if(KEY == 0) //按键按下
{
TR0 = 0; //暂停定时器计时
display(count); //显示计时结果
while(!KEY); //等待按键释放
TR0 = 1; //重新启动定时器计时
}
}
void main()
{
TMOD = 0x01; //定时器0工作模式1,16位自动重装载
TH0 = 0xFC; //定时1ms
TL0 = 0x67;
ET0 = 1; //允许定时器0中断
EA = 1; //开总中断
TR0 = 1; //启动定时器0计时
EX0 = 1; //允许外部中断0
IT0 = 1; //设置外部中断为下降沿触发
while(1);
}
```
在上述代码中,通过定时器0中断实现计时器的计时功能,并在每次计时时将计数值`count`加1,然后在外部中断0中检测按键状态,如果按键按下,则暂停计时器计时,并将计时结果显示在数码管上,等待再次按下按键时重新启动计时器计时。
阅读全文