STM32按键检测程序整理
一、
在硬件连接上,按键一端连接在普通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按键检测程序整理相关推荐
- stm32 工业按键检测_STM32f103按键检测程序实现长按短按
背景本文引用地址:http://www.eepw.com.cn/article/201807/384495.htm 只要使用单片机,按键检测基本上是一定要实现的功能.按键检测要好用,最重要的是实时和去 ...
- linux按键检测程序,Tiny4412 Linux驱动之按键(使用查询方式) | 技术部落
前几天在TIny4412开发板上做了LED点灯的Linux驱动,其实挺简单,GPIO驱动,今天再看一下按键的驱动,毕竟按键用的还是比较广泛的,本文使用查询的方式获取按键值,后面会有文章使用中断的方式进 ...
- 单片机按键检测程序c语言,单片机检测按键短击,连击c程序
/****************************************************************************/ //文 件 名:key.c //功 能:短 ...
- C语言 | 按键检测程序
/******************************************************************** > File Name: Key_control.c* ...
- STM32学习笔记——(5)按键检测
按键检测 一.按键检测 一.按键检测 如上图所示, 若按键KEY1未按下时检测点为低电平,按下时检测点为高电平. 若按键KEY2/3/4未按下时检测点为高电平,按下时检测点为低电平. 程序如下: /* ...
- 一个学妹写的按键检测函数把我秀翻了!
摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍 上来第一个例程就是使用按键点亮一个LED灯,好家伙.点灯小师弟比较在行,毕竟32.FP ...
- ZedBoard教程PL篇(2):按键检测
开发板环境:vivado2017.4 开发板:Zedboard 芯片型号:xc7z020clg484-1 本章主要使用用verilog编写一个按键检测程序,按一次按键LED亮一次,依次点亮八个LED灯 ...
- STC15单片机-按键检测单击、双击和长按(状态机)
按键检测(状态机) 传统的按键检测 在单片机的应用中,利用按键实现与用户的交互功能是相当常见的,同时按键的检测也是很讲究的,众所周知,在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释 ...
- STM32-蓝桥杯嵌入式之三行按键检测(按键的长、短,单击、双击)
STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 目录 STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 一.检测按键下降沿分析 二.检测按键上升沿分析 三.按键检 ...
最新文章
- 机器学习03-神经网络
- linux定时任务简记
- python的numpy matlib
- Netflix:我们为什么要将GraphQL引入前端架构?\n
- Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
- prometheus命令_Prometheus
- 有了HTML5,Flash还能走多远?
- 基于cat12和SPM12进行VBMSBM数据分析笔记1——数据预处理
- 面试常问--你是否曾经得到过低于自己预期的成绩?如果得到过,你是怎样处理这件事情的?
- [宝塔]配置ssl证书,提示错误:证书错误,请粘贴正确的PEM格式证书
- 应该怎么学大数据?该从哪学起?
- 中国混合现实产业调研分析及发展战略研究报告2021-2027年版
- 大华摄像头使用外网进行访问管理
- python—判断语句练习题05
- 一个喜欢研究车的80后开车人,自己的经验和感受
- 中国中医科学院医学实验中心杨洪军/陈鹏提出蛋白芯片
- PhotoshopCS6外挂滤镜安装
- 揭开ESP8266神秘的面纱
- HDOJ 1598 find the most comfortable road(并查集+贪心)
- 计算机组成原理——存储系统
热门文章
- 修改SQL Server默认的数据库文件保存路径
- python爬取火车票网的时刻表数据
- VC写一个荣光医院修补弹坑游戏助手
- 91. 基于Notes/Domino的文档工作流系统(三)
- 「boomyao」的求职简历(web前端)
- N76E003配置看门狗watchdog
- 编写一个python程序用来计算投资回收期_智慧职教云课堂Python程序设计基础(九江职业技术学院)题目答案...
- PLM系统如何帮企业提升能力
- ISE14.7 使用Chipscope调试方法
- 在线视频下载(Using Python / Bash / C / Reguar Expressions)