按键检测非阻塞代码(2种模式)

发布者:BlossomSunrise最新更新时间:2019-11-14 来源: 51hei关键字:按键检测  非阻塞  2种模式 手机看文章 扫描二维码
随时随地手机看文章

按键检测的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++;//按键有效后的动作指令,点亮等,功能变化等等事件
}
}

仅仅是为了防止自己忘记了这个思想而写。

关键字:按键检测  非阻塞  2种模式 引用地址:按键检测非阻塞代码(2种模式)

上一篇:单片机之间通信(类红外发送与接收)
下一篇:PIC单片机入门指南

推荐阅读最新更新时间:2024-11-20 21:51

stm32中非阻塞式多按键状态检测函数
最近做的项目中,关于按键检测调用比较多,因此我也做个适当用法总结。按键状态检测的原理,一般都是通过读相应IO口位是否置位来判断是否按下,并且用延时来消抖以及区分长短按。根据延时的用法,也可以区分为阻塞式和非阻塞式。阻塞式即在延时过程中一直等待到计数值,CPU一直被占用无法去执行别的过程,一般这样是不太合理的设计。所以我们都采用非阻塞式,即用轮询的方式去判断是否延时时间到达,其具体代码如下图: 具体思路就是在第一次检测到按下的情况下,给计时变量赋定时器的计数值,等到大于设定长按时间值后,赋长按状态值给按键状态位。等到松手后,若判断大于消抖时间后赋值短按,然后计时变量初始化,最后返回状态值。 但是这样的写法始终存在一个BUG,
[单片机]
stm32中非<font color='red'>阻塞</font>式多<font color='red'>按键</font>状态<font color='red'>检测</font>函数
MC9S12G128 按键检测
/***************************************************************** ** 程序名:MC9S12G128 按键检测 ** 参 数:无 ** 功 能:当按下按键后,打开或关闭LED灯 ** 注 意:LED位于G128 PD0口,按键位于G128 PB0口 程序中使用的寄存器如下图所示: ******************************************************************/ #include hidef.h /* common defines and macros */ #include
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved