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-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 一.检测按键下降沿分析 二.检测按键上升沿分析 三.按键检 ...
最新文章
- 9.9学python靠谱吗-宅家亲测:9.9的python体验课,到底值不值?
- layui中onchange失效以及form动态渲染失效的问题
- c语言怎样输入动态数组代码,求助~~ 如何把数组变成动态输入的?
- 【DKN】(六)KCNN.py
- TVM:使用 Schedule 模板和 AutoTVM 来优化算子
- 并发的线程入门到并发安全原理解析,offer拿到手软
- PAT 1012. 数字分类 (20)
- ObjC点击H5图片Native预览
- 云计算决策指南:解析医疗的7大解决方案
- pantum打印机驱动安装m6506_奔图PantumM6506驱动程序官方版
- 了解Spring的变迁从Spring3到Spring5
- 从零开始学习鸿蒙系统
- Contest Design with Threshold Objectives(博弈论+机制设计) 论文阅读笔记
- H-大时钟(扩展欧几里得)
- java蓝桥杯练习 学做菜
- str_rot13() 函数
- javascript大全
- Android canvas
- windows开启IIS服务,配置HTTP服务器
- linux管理控制面板--可视化管理linux