c51单片机写一个系统上电后,长按按键3秒激活一个子程序。在这个子程序激活的状态下,长按按键5秒就关闭这个子程序。这个子程序用butto();表示
时间: 2024-05-09 14:14:25 浏览: 80
下面是使用C语言编写的c51单片机代码,实现系统上电后长按按键3秒激活一个子程序,再长按按键5秒关闭这个子程序,并使用butto()函数表示:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit btn = P3^2; // 按键引脚
uint count = 0; // 计时器计数器
bit flag = 0; // 标志位,0表示子程序未激活,1表示子程序已激活
void delay(uint ms) // 延时函数
{
uint i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void timer0_init() // 定时器0初始化函数
{
TMOD |= 0x01; // 定时器0工作在模式1下
TH0 = 0xFC; // 定时器0初始值,计数器从65536-7812 = 57724开始计数,1秒钟
TL0 = 0x18;
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 开启总中断
}
void main()
{
timer0_init(); // 初始化定时器0
while (1)
{
if (btn == 0) // 检测按键是否按下
{
delay(10); // 延时去抖动
if (btn == 0)
{
while (!btn); // 等待按键释放
if (count >= 3000 && count < 5000) // 长按3秒激活子程序
{
flag = 1;
butto(); // 调用子程序
}
else if (count >= 5000) // 长按5秒关闭子程序
{
flag = 0;
}
count = 0; // 计数器清零
}
}
}
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = 0xFC; // 重新赋值计数器初始值
TL0 = 0x18;
count++; // 计数器加1
}
```
在上述代码中,使用定时器0来计时,每秒钟计数器加1。当按键按下时,计数器清零,并开始计时。当计时器计数值达到3秒时,表示长按3秒,激活子程序,调用butto()函数;当计时器计数值达到5秒时,表示长按5秒,关闭子程序,将标志位flag设为0。
阅读全文