当前位置: 首页 > news >正文

途牛旅游线路网站建设分析东莞有哪几家网络开发公司

途牛旅游线路网站建设分析,东莞有哪几家网络开发公司,logo图片素材大全,企业系统定制开发背景 有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。 记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点&…

背景

有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。

记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点,只处理一个按键。并且这个按键,只检测短按、长按两种状态。

硬件

硬件原理图如下

这里不管使用哪个型号的MCU基本上都一样了,就是按键上拉,按下按键MCU管脚有个低电平输入信号。如下图所示,这里允许我偷个懒,把之前的图拿上来。因为实际项目的图,拿上来影响不好。反正原理就是这样的,你也可以将KEY上拉,这里的上拉可以在MCU的管脚配置为输入上拉。

如下图所示按下按键,单片机管脚KEY得到一个低电平输入。

 软件

这里就不限于使用的MCU,按键采用扫描的方式,获取按键值。

首先使用定时器定时1ms

这段代码是根据使用的MCU平台实现定时器的初始化配置,保证定时器中断1ms来一次,不同的MCU平台这里的代码都不一样的。例如STM32/GD32/等等其他的8位的MCU都可以。

void timer_init(void)
{//根据MCU平台实现,初始化代码}

定时器中断函数,实现按键扫描

这里的key_val/key_val_buf你可以理解上全局变量,读取按键消息,如果有按键就将按键值保存下来。


void    TIM_IRQHandler()
{key_val = ReadKey();if(key_val != NO_KEY){key_val_buf = key_val;}}  

具体检测长按的函数,这里是最关键

用一个状态机实现

代码如下

这里简单解释一下,每次定时器中断来,首先读取按键的管脚的当前值

如果状态0,检测到有按键按下,进入状态1,消除抖动

状态1确认有按键按下,则进入状态2

状态2等待按键松手,根据KeyTimeCnt 的数值来确定输出长按还是短按

这里2ms到1000ms为短按
1000ms以上认为短按

这个数值可以根据你自己的使用习惯进行调整。我这里也是根据实际按键的效果来调整得到的。


unsigned char ReadKey(void)
{static unsigned char KeyState = 0;static unsigned int KeyTimeCnt = 0;static unsigned int no_key_times = 0;unsigned char KeyReturn = NO_KEY;static unsigned char KeyCurValue = NO_KEY;KeyCurValue = key; //读取按键值switch(KeyState){case 0:{if(KeyCurValue == 0)        //检测到有键按下{KeyState++;                   //转到消抖确认状态 KeyTimeCnt = 0;no_key_times = 0;}else{no_key_times++;if(no_key_times >= 500)//500*20ms=10s{no_key_times = 0;}}break;}case 1:{if(KeyCurValue == 0)   //和上次按键相同确认有键按下{KeyState++;                  //转入等待按键释放状态}elseKeyState--;                  //两次键值不同 返回等待按键状态KeyTimeCnt = 0; break;}//增加时间按键的长按、短按检测case 2:  {if(NO_KEY == KeyCurValue)           // 按键已经释放{if((KeyTimeCnt > 2) && (KeyTimeCnt < 1000))     {KeyReturn = KEY1_DOWN;  KeyTimeCnt = 0; KeyState = 0;}else if(KeyTimeCnt >= 1000){KeyReturn = KEY1_DOWN_LONG;  //检测到长按KeyTimeCnt = 0; KeyState = 0;}else{KeyReturn = NO_KEY;KeyTimeCnt = 0; KeyState = 0;}}else{KeyTimeCnt++;}break;}default:{KeyState = 0;break;}}return KeyReturn;
}

之前的博客,也可以参考,有点复杂

这个按键检测就复杂很多了

STM32独立按键扫描,支持同时按下、长按、快速键值_stm32按键扫描_大牛攻城狮的博客-CSDN博客

http://www.yayakq.cn/news/460724/

相关文章:

  • 网站备案 优帮云电子商务网站建设与管理感想
  • 武城网站建设价格建筑网片的用途有哪些
  • 番禺网站建设专家网站备案 材料
  • 收费网站设计网站的主要功能模块
  • 电脑怎样做网站昆明网站建设哪个好
  • 公司一定建设网站网站主机哪买
  • 简约网站程序世界500强中国有几个
  • 做境外旅游的网站网站建设心得体会800字
  • 网站结构的规划网站建设详细设计
  • 网站建设费用包括哪些内容网页模板psd
  • 郑州 网站设计搜索引擎网站模板
  • 公司网站开发费用济南兴田德润评价怎么修改错误 wordpress
  • 做公司网站需要的资料动漫制作专业的学校
  • 第一个做电子商务的网站做分子生物实验常用网站
  • 巴音郭楞网站建设苏州建设交通高等职业技术学校网站
  • 网站免费打包外贸wordpress收款插件
  • 网站 绝对路径wordpress会员提成插件
  • 买了个域名怎么做网站局域网做网站 内网穿透
  • 网站制作论文 优帮云网站运营策略如何做
  • 网站怎么优化关键词做海岛旅游类网站的背景及意义
  • 常熟有做网站的网络公司吗新项目开发流程
  • 利用jsp做网站什么是网站建设中的专用主机
  • 六安市网站建设wordpress怎么注册
  • 网站开发一般用哪种语言网站开发的成本
  • 厦门哪家做网站好百度广告业务
  • 建设网站后期需要哪些四川建设网app
  • 网站的特征包括哪些方面互联网网站基础
  • 有哪些好的网站制作公司企业微信小程序制作
  • 张家界市住房和城乡建设局网站宁国做网站
  • 织梦网站模板 虎嗅网台州企业网站建设