按键检测的2种模式(低电平触发和高电平触发)
12f509为控制芯片 GP5口是按键检测口
key_time_cnt//延时计数器
key_flag//按键标志(key_flag=1按键有效,否则无效)
TIME_MAX//计数阀值
num//按键的功能变量
模式1(低电平触发)
if(GP5==1)//如果I/O是高电平,说明没有键按下
{
key_flag=0;//按键标志清零(无效)
key_time_cnt=0;//延时计数器清零
}
else if(key_flag==0)//这句话的意思其实是else if((key_flag==0)&&(GP5==0))按键被按下,而且是第一次被按下
{
key_time_cnt++;//延时计数器开始延时计数
if(key_time_cnt>TIME_MAX)//达到最大阀值(认为是按键真的被按下了)
{
key_time_cnt=0;//计数器清零
key_falg=1;//按键标志置1,防止一直触发,
num++;//按键有效后的动作指令,可以点亮一个灯,或者功能号变化等等事件
}
}
模式2(高电平触发)//可以轻松检测交流电通断电的情况,只需要修改TIME_MAX值(与交流电同步信号波谷的10MS有关)。
if(GP5==0)//如果按键被按下
{
key_time_cnt++;//延时开始
if(key_time_cnt>TIME_MAX)//大于阀值
{
key_flag=1;//标志有效
}
}
else if(GP5==1)//按键松开,这句话对于单片机来说它并不知道,按键究竟是被按下弹起了,还是一直是处于没有被按下的状态,所以还要做进一步判断
{
key_time_cnt=0;//清延时计数器
if(key_flag==1)//如果按键被按下过,标志位为1说明按键曾经被按下过。这个条件和(GP5==1)组成松手状态
{
key_flag=0;//标志清零
num++;//按键有效后的动作指令,点亮等,功能变化等等事件
}
}
仅仅是为了防止自己忘记了这个思想而写。
上一篇:单片机之间通信(类红外发送与接收)
下一篇:PIC单片机入门指南
推荐阅读最新更新时间:2024-11-20 21:51
设计资源 培训 开发板 精华推荐
- EVAL-ADM1041EB,评估板允许在开关电源应用中快速评估 ADM1041
- 服务器电源插口
- LT8495IFE 450kHz、宽输入范围 12V 输出 SEPIC 转换器的典型应用电路
- AM6TW-2424DH35Z ±24V 6 瓦双路输出 DC-DC 转换器的典型应用
- 基于A6986I的38V、5W同步等压转换器评估板,具有单一的隔离输出
- CL330、3 通道、30mA 线性 LED 驱动器的典型应用
- 使用 MaxLinear, Inc 的 SP6655 的参考设计
- 针对 Terasic DE2-115 (Cyclone IV) 的电源解决方案
- 黄淮学院创客空间立创杯电子设计大赛-物联刘嘉伟-1002274A
- 【训练营】炫酷啊狗