一、
在硬件连接上,按键一端连接在普通IO口上,另一端接地,IO配置为内部弱上拉。

在软件上,先配置一个5ms定时器并打开中断,每进入该定时中断则置位一次标志位“key_handle”。接着在主循环调用一个“scan_key()”函数,判断“key_handle”标志位是否在定时器内被置位,若被置位则将该位复位并读取连接按键的IO口值。

此时,“scan_key()”函数内分为按键按下和松开两个分支:

按键按下,则计数值“longkey”每隔5ms自加一次,因为这个分支每隔5ms才会进入执行一次;

按键放开,则先判断“longkey”的值,若“longkey”的值换算出来代表按键按下时间在10ms-1s内,(10ms是去抖值,1s是与短按与长按的分界点。)则判断按键为短按;若“longkey”的值大于1s,则判断按键为长按。并将按键状态赋值给按键状态变量“keybuf”。同时,由于此时按键已经放开,因此“longkey”的值要置位“0”等待用户下次按下按键并执行从“0”开始的自加操作。

若程序又一次进入按键检测代码段,说明所有功能块代码已经获知key状态,有对key感兴趣的代码段也肯定已经进行过相应处理,因此此时要及时将“keybuf”置为无按键按下状态以此来同步实际按键状态。

void scan_key(void)
{unsigned char key_status;if((longkey == 0) && (keybuf != _KEYNULL)){// 在keybuf被标记为长按或短按后,若是按键已经松开,// 则在主循环跑完一次后,及时将按键状态标记为无按键按下。keybuf = _KEYNULL;}if(key_handle == _ON) { //5ms进入一次key_handle = _OFF;    // 复位5ms标志位 key_status = GPIO_ReadInputDataBit(KEYRESET_GPIO_PORT, KEYRESET_GPIO_PIN);if(key_status == 0) {   //按下按键longkey++;}else {  // 松开按键if((longkey >= 3) && (longkey <= 100) ){    // 15ms - 1skeybuf = _SHORTKEY;} else if(longkey >= 200) { // 2skeybuf = _LONGKEY;} else {keybuf = _KEYNULL;// 若为扰动,按键状态也该为无按键按下}longkey = 0;}}
}

STM32按键检测程序整理相关推荐

  1. stm32 工业按键检测_STM32f103按键检测程序实现长按短按

    背景本文引用地址:http://www.eepw.com.cn/article/201807/384495.htm 只要使用单片机,按键检测基本上是一定要实现的功能.按键检测要好用,最重要的是实时和去 ...

  2. linux按键检测程序,Tiny4412 Linux驱动之按键(使用查询方式) | 技术部落

    前几天在TIny4412开发板上做了LED点灯的Linux驱动,其实挺简单,GPIO驱动,今天再看一下按键的驱动,毕竟按键用的还是比较广泛的,本文使用查询的方式获取按键值,后面会有文章使用中断的方式进 ...

  3. 单片机按键检测程序c语言,单片机检测按键短击,连击c程序

    /****************************************************************************/ //文 件 名:key.c //功 能:短 ...

  4. C语言 | 按键检测程序

    /******************************************************************** > File Name: Key_control.c* ...

  5. STM32学习笔记——(5)按键检测

    按键检测 一.按键检测 一.按键检测 如上图所示, 若按键KEY1未按下时检测点为低电平,按下时检测点为高电平. 若按键KEY2/3/4未按下时检测点为高电平,按下时检测点为低电平. 程序如下: /* ...

  6. 一个学妹写的按键检测函数把我秀翻了!

    摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍 上来第一个例程就是使用按键点亮一个LED灯,好家伙.点灯小师弟比较在行,毕竟32.FP ...

  7. ZedBoard教程PL篇(2):按键检测

    开发板环境:vivado2017.4 开发板:Zedboard 芯片型号:xc7z020clg484-1 本章主要使用用verilog编写一个按键检测程序,按一次按键LED亮一次,依次点亮八个LED灯 ...

  8. STC15单片机-按键检测单击、双击和长按(状态机)

    按键检测(状态机) 传统的按键检测 在单片机的应用中,利用按键实现与用户的交互功能是相当常见的,同时按键的检测也是很讲究的,众所周知,在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释 ...

  9. STM32-蓝桥杯嵌入式之三行按键检测(按键的长、短,单击、双击)

    STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 目录 STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 一.检测按键下降沿分析 二.检测按键上升沿分析 三.按键检 ...

最新文章

  1. 机器学习03-神经网络
  2. linux定时任务简记
  3. python的numpy matlib
  4. Netflix:我们为什么要将GraphQL引入前端架构?\n
  5. Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
  6. prometheus命令_Prometheus
  7. 有了HTML5,Flash还能走多远?
  8. 基于cat12和SPM12进行VBMSBM数据分析笔记1——数据预处理
  9. 面试常问--你是否曾经得到过低于自己预期的成绩?如果得到过,你是怎样处理这件事情的?
  10. [宝塔]配置ssl证书,提示错误:证书错误,请粘贴正确的PEM格式证书
  11. 应该怎么学大数据?该从哪学起?
  12. 中国混合现实产业调研分析及发展战略研究报告2021-2027年版
  13. 大华摄像头使用外网进行访问管理
  14. python—判断语句练习题05
  15. 一个喜欢研究车的80后开车人,自己的经验和感受
  16. 中国中医科学院医学实验中心杨洪军/陈鹏提出蛋白芯片
  17. PhotoshopCS6外挂滤镜安装
  18. 揭开ESP8266神秘的面纱
  19. HDOJ 1598 find the most comfortable road(并查集+贪心)
  20. 计算机组成原理——存储系统

热门文章

  1. 修改SQL Server默认的数据库文件保存路径
  2. python爬取火车票网的时刻表数据
  3. VC写一个荣光医院修补弹坑游戏助手
  4. 91. 基于Notes/Domino的文档工作流系统(三)
  5. 「boomyao」的求职简历(web前端)
  6. N76E003配置看门狗watchdog
  7. 编写一个python程序用来计算投资回收期_智慧职教云课堂Python程序设计基础(九江职业技术学院)题目答案...
  8. PLM系统如何帮企业提升能力
  9. ISE14.7 使用Chipscope调试方法
  10. 在线视频下载(Using Python / Bash / C / Reguar Expressions)