独立按键的长按和短按
文章目录
1. 硬件部分
1.1 按键简介
1.2 按键抖动
1.3 按键识别
按键长按与短按判别流程图
1.4 按键选择
2. 软件编程
2.1 框架式编程结构搭建
- 新建ROTARY_Drive.c,ROTARY_Drive.h
-
保存
-
添加进工程
- 打标签
- all.h包含LCD1602_Ser.h
- ROTARY_Drive.c包含all.h
2.2 初始化
- 定义管脚,并设置标准IO模式
- 初始化函数,并声明,主函数里调用
2.3 按键扫描数据分配
- 定义按键读取函数,外部声明
- 主函数里新建数据分配函数,按键读取函数包含在内,主函数调用
测试:简单判断按键的按下,放开
判断按键值0/1,数码管输出结果
定义变量读取按键并输出,外部声明
测试1:变量赋值并通过数码管显示
字节型变量,需要3位数码管显示十进制
测试2:按键放开25,按下100
2.4 按键检测
总图:
按键状态:
ROTARY_MUTE==0 按下
ROTARY_MUTE==1 释放
消抖,延时
划分两种状态
短按
长按
上述代码是最简单的长短按判断
由图可发现flag1的作用:
长按释放后不会被判断为短按,将退出
宏定义几种按键的动作
使用场景测试
- 长按 短按连续++
新开变量,并声明,同时数码管显示改由此变量赋值
此时短按、长按可以不断累加值
- 长按一次和长按不放的区别
长按1次执行1次对应结果,不会连续执行长按结果
引入flag2
判为长按,flag2便写0
只有当按键释放,flag2=1重新导通开关
下一次长按才执行长按输出
- 短按+1,长按自动++