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

阿坝州住房和城乡建设厅网站旅游网站建设网站目的

阿坝州住房和城乡建设厅网站,旅游网站建设网站目的,seo研究中心学员案例,小程序开发教程全集免费一、按键消抖 这里记录 状态机 系统滴答定时器 的方法来实现按键消抖。 这是一种非阻塞式的方式实现,比较不错。 周期性检测 → 记录时间戳 → 超时后确认 → 处理释放。 // 按键状态定义 typedef enum {KEY_STATE_IDLE,//空KEY_STATE_DEBOUNCE,//防抖KEY_STATE…

一、按键消抖

这里记录 状态机 + 系统滴答定时器 的方法来实现按键消抖。

这是一种非阻塞式的方式实现,比较不错。

周期性检测 → 记录时间戳 → 超时后确认 → 处理释放。

// 按键状态定义
typedef enum {KEY_STATE_IDLE,//空KEY_STATE_DEBOUNCE,//防抖KEY_STATE_PRESSED//压
} KeyState;KeyState key_state = KEY_STATE_IDLE;
uint32_t key_timestamp = 0;
void key_scan()
{//按键一switch(key_state){case KEY_STATE_IDLE://状态一if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET){key_state = KEY_STATE_DEBOUNCE;key_timestamp = HAL_GetTick();//记录当前时间戳}break;case KEY_STATE_DEBOUNCE://状态二if(HAL_GetTick() - key_timestamp >= 20){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET){key_state = KEY_STATE_PRESSED;//执行任务//led_show(1);count ++ ;}else {key_state = KEY_STATE_IDLE;}//抖动误判}break;case KEY_STATE_PRESSED://状态三if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET){key_state = KEY_STATE_IDLE;}break;}//按键二//按键三//按键四
}

 二、区分长按键和短按键

// 状态定义(修正注释)
typedef enum {KEY_STATE_IDLE,          // 空闲KEY_STATE_PRESS_DEBOUNCE,// 按下消抖KEY_STATE_PRESSED,       // 已确认按下(等待长按触发)KEY_STATE_LONG_PRESS,    // 长按已触发KEY_STATE_RELEASE_DEBOUNCE // 释放消抖
} KeyState;KeyState key_state = KEY_STATE_IDLE;
uint32_t key_press_start_time = 0;
uint32_t key_release_start_time = 0;void key_scan() {switch(key_state) {// 初始状态:检测按下case KEY_STATE_IDLE:if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {key_state = KEY_STATE_PRESS_DEBOUNCE;key_press_start_time = HAL_GetTick();}break;// 按下消抖(等待20ms)case KEY_STATE_PRESS_DEBOUNCE:if (HAL_GetTick() - key_press_start_time >= 20) {if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {key_state = KEY_STATE_PRESSED; // 进入持续检测状态key_press_start_time = HAL_GetTick(); // 重置计时} else {key_state = KEY_STATE_IDLE; // 抖动误判}}break;// 已确认按下:持续检测时长case KEY_STATE_PRESSED:// 持续按下超过1秒 → 触发长按if (HAL_GetTick() - key_press_start_time >= 1000) {key_state = KEY_STATE_LONG_PRESS;count--; // 长按操作printf("Long Press Detected!\r\n");}// 检测是否提前释放else if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET) {key_state = KEY_STATE_RELEASE_DEBOUNCE;key_release_start_time = HAL_GetTick();count++; // 单击操作printf("Short Press Detected!\r\n");}break;// 长按已触发状态case KEY_STATE_LONG_PRESS:if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET) {key_state = KEY_STATE_RELEASE_DEBOUNCE;key_release_start_time = HAL_GetTick();}break;// 释放消抖(20ms)case KEY_STATE_RELEASE_DEBOUNCE:if (HAL_GetTick() - key_release_start_time >= 20) {key_state = KEY_STATE_IDLE;}break;}
}

三、按键消抖老方案(有问题)

一般我会用HAL_Delay();函数。

//B1按键
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET) //检测按键是否按下
{HAL_Delay(5000); // 消抖if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET) // 说明确实按下去了{执行任务while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET); // 等待按键释放	}
}

原代码问题分析

 阻塞式设计
while(HAL_GPIO_ReadPin(...)); // 卡死在这里等待释放
  • 问题:在等待按键释放时,CPU 被完全占用

  • 后果

    • 系统无法响应其他任务(如屏幕刷新、通信)

    • 若按键被意外卡住,程序将永久死锁


文章转载自:

http://rCq5wpXp.Lsnnc.cn
http://JIQ7w77s.Lsnnc.cn
http://YlajWZxR.Lsnnc.cn
http://ijriz0rt.Lsnnc.cn
http://dcpTX9lu.Lsnnc.cn
http://kbEdQ9Qi.Lsnnc.cn
http://F6MWL0fi.Lsnnc.cn
http://D7b5qJhe.Lsnnc.cn
http://CyARFiXu.Lsnnc.cn
http://LrU6TAe5.Lsnnc.cn
http://GoxBmOrf.Lsnnc.cn
http://YHex25QC.Lsnnc.cn
http://bsLHmqq6.Lsnnc.cn
http://9ZpTUQ3L.Lsnnc.cn
http://X3t5DlJs.Lsnnc.cn
http://wrX8nAuK.Lsnnc.cn
http://qGOHjVHY.Lsnnc.cn
http://usvo6JnX.Lsnnc.cn
http://7HWbZ3Zb.Lsnnc.cn
http://W8FPX6th.Lsnnc.cn
http://MizWdLU0.Lsnnc.cn
http://1Hq3Nf5B.Lsnnc.cn
http://dwdjIUfL.Lsnnc.cn
http://mxJHXmsq.Lsnnc.cn
http://HhendoCh.Lsnnc.cn
http://rc6IPFJ0.Lsnnc.cn
http://TC5URdC7.Lsnnc.cn
http://oX6uzxoB.Lsnnc.cn
http://hVqh6yUO.Lsnnc.cn
http://pMq84NDf.Lsnnc.cn
http://www.dtcms.com/wzjs/648653.html

相关文章:

  • spring可以做多大的网站在静安正规的设计公司网站
  • 什么网站做视频给钱高邮做网站
  • 长沙建长沙建网站公司外包公司辞退员工补偿标准
  • 服装设计师常用网站青岛网站快速排名提升
  • 做关于星空的网站wordpress用户密码重置
  • 企业网站案例欣赏如何申请微信企业号
  • 毕业设计代写网站互联网服务商
  • 北京西站到八达岭长城最快路线玉环建设规划局网站
  • 与设计行业相关的网站wordpress 4.0 中文版
  • 做外贸建网站需要推广吗网页设计就业
  • 深圳网站制作就找兴田德润优化推广网站推荐
  • 莘庄网站建设电影购买网站怎么设计
  • 旅游网站开发代码宝安沙井海岸城
  • html网站开发主要涉及哪些技术农业技术网站建设原则
  • 全国首批9所重点马院网站建设网络维护员工资多少
  • win7如何建设免费网站用asp做网站怎么美观
  • 长白山网站学做管理厦门旅游必去十大景点
  • 公司网站建立wordpress学校机构
  • php网站的开发环境网站建设 荆州
  • 濮阳网站建设熊掌号公司做网站济南
  • 毕业设计做网站哪种好成都山猫vi设计公司
  • 做番号网站违法么企业做网站好处
  • 网站上线前准备方案沈阳企业建站
  • 建网站需要学习什么做ps的网站有哪些功能吗
  • 天津网站建设网站推广在线ip代理网页
  • 做众筹网站如何免费建企业网站
  • 小米路由可以做网站吗net网站开发 介绍
  • 没钱怎么做网站网页设计怎么运行
  • 上海网站优化海民宿推广平台有哪些
  • 怎么免费建个免费的站点成都黑马程序员培训机构官网