优化这串代码,对于此功能加入按键进行打开和复位
时间: 2024-03-26 18:35:53 浏览: 13
好的,以下是基于 Keil4 和 51 单片机的优化代码,加入了按键进行打开和复位功能:
```
#include<reg52.h>
sbit beep = P1^5;
sbit key = P3^2;
void delay(unsigned int i)
{
while(i--);
}
void timer0() interrupt 1
{
static unsigned char cnt = 0;
TH0 = 0x3C;
TL0 = 0xAF;
cnt++;
if(cnt >= 60)
{
cnt = 0;
beep = 1;
delay(1000);
beep = 0;
}
}
void main()
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0xAF;
TR0 = 0; //定时器先关闭,等待按键打开
ET0 = 1;
EA = 1;
while(1)
{
if(key == 0) //按键按下
{
delay(10); //延时去抖
if(key == 0) //确认按键按下
{
TR0 = ~TR0; //打开或关闭定时器
while(!key); //等待按键松开
delay(10); //延时去抖
}
}
if(key == 0) //按键按下
{
delay(10); //延时去抖
if(key == 0) //确认按键按下
{
TR0 = 0; //关闭定时器
beep = 0; //蜂鸣器停止
delay(10); //延时去抖
TR0 = 1; //开启定时器
}
}
}
}
```
在上述代码中,我们使用了一个按键来实现开关定时器和复位计数器的功能。具体实现方法是使用一个变量`TR0`来控制定时器的开关,按下按键时将`TR0`取反即可。此外,为了避免按键抖动的干扰,我们在按键检测时加入了延时去抖的处理。
值得注意的是,由于按键的引脚是`P3^2`,需要将其设置为输入模式。同时,按键复位计数器的功能是在定时器关闭时实现的,因此需要先关闭定时器再进行复位操作。