51单片机矩阵按键扫描与短按、双击、长按的检测功能

c层做power按键识别 按键一般的处理流程都在java中。这里有一个需要,因为没有java层代码,需要在c层做一个进程,来检测power按键按 。 利用定时器做的按,在android的framework层是用延迟消息做的。 代码如下: #include #include #include #include #include #include #include #include #include 阅读详情

1. 简介

矩阵按键常用于实现多个按键的输入。下面演示如何在51单片机上使用C语言实现矩阵按键扫描,并添加短按、双击、长按的检测功能。

2. 技术原理

2.1 矩阵按键扫描

矩阵按键是通过将按键组织成行和列的交叉形式,通过扫描行和列的状态来检测按键是否被按下。基本原理是轮流将某一行设为高电平,同时检测每一列的电平状态,从而确定是否有按键按下。

2.2 消抖处理

按键在物理性质上容易产生抖动,即瞬间的多次触发。为了消除抖动,我们通常会使用非阻塞式的延时处理方法,即通过计数器和状态机设计来实现。

2.3 矩阵按键的多功能检测

  • 短按检测: 检测按键按下后的瞬时触发,通常通过消抖后的按键状态判断。

  • 双击检测: 判断两次短按之间的时间间隔,如果在一定时间内再次检测到按键按下,则认为是双击。

  • 长按检测: 判断按键按下后保持一定时间以上,认为是长按。

3. 代码实现

#include <reg51.h>

// 定义按键矩阵的行和列
#define ROWS 4
#define COLS 4

// 定义按键状态
typedef enum {
   
   
    IDLE,
    PRESSED,
    RELEASED,
    WAIT_DOUBLE_CLICK,
    DOUBLE_CLICKED,
    WAIT_LONG_PRESS,
    LONG_PRESSED
} KeyState;

// 按键矩阵
bit keyMatrix[ROWS][COLS] = {
   
   
    {
   
   1, 1, 1, 1},
    {
   
   1, 1, 1, 1},
    {
   
   1, 1, 1, 1},
    {
   
   1, 1, 1
STM32按键识别实战:用状态机实现按、短按双击(附完整代码) 本文详细介绍了如何在STM32开发中使用状态机实现按键识别功能,包括按、短按双击操作的检测算法。通过硬件消抖、定时器配置和状态转移逻辑的完整代码示例,帮助开发者高效解决嵌入式系统中的按键交互问题,提升用户体验和系统可靠性。 阅读详情

相关推荐

51单片机按键消抖实战:从独立按键矩阵键盘的软件解决方案

本文详细解析51单片机按键消抖的软件解决方案,涵盖独立按键矩阵键盘的处理方法。通过延时检测、状态机算法和定时器中断扫描等核心技术,有效解决机械按键抖动导致的误触发问题,提升系统稳定性和响应准确性。

aa123的博客 707

【实战解析】基于状态机的按键检测短按双击的C语言实现

本文详细解析了基于状态机的按键检测方法,通过C语言实现短按双击的精准识别。文章从状态机原理、代码实现到STM32实战配置,提供了完整的解决方案,有效解决按键抖动和误触问题,提升嵌入式设备的人机交互可靠性。

vvv99的博客 206

【实战解析】基于状态机的按键检测短按双击的嵌入式实现

本文详细解析了基于状态机的嵌入式按键检测实现方法,涵盖短按按和双击识别逻辑。通过状态转换模型和定时器协同设计,提供了可靠的代码实现方案,适用于智能家居、工业控制等场景,有效解决了传统按键检测的局限性。

9o8p7i6u5y的博客 621

单片机按键检测 短按

短按按区别: 短按一下按键1,Led1点亮,再短按一下按键1,Led1熄灭,可循环; 按一下按键1,Led2点亮,再按一下按键1,Led2熄灭,可循环; 短按按不论在什么情况下都互不影响,互不干扰。 同样,按键2控制Led3和Led4的情况一样。

m0_70513237的博客 1445

51单片机扫描按键短按双击功能

按键扫描是一个常见的任务,涉及到硬件交互和状态处理。本篇教程将讲解一个简单的51单片机按键扫描程序,基于状态机实现短按双击功能,并解释其实现原理。按键消抖采用的非阻塞式,这样可以大大提高单片机效率。

ByteBox的博客 2993

STM32学习7 按键扫描

本实验使用普中STM32-F1开发板,芯片型号是STM32F103ZET6。其按键电路如下:对应的芯片引脚:从电路可以看出,键盘的 KEY_UP 键如果接通,会连接高电平。KEY_UP:GPIOA GPIO_Pin0 引脚KEY_LEFT:GPIOE GPIO_Pin2 引脚KEY_RIGHT:GPIOE_GPIO_Pin4 引脚KEY_DOWN:GPIOE_GPIO_Pin3 引脚// 引脚和端口// 读取引脚状态。

猿来这样-谢厂节的博客 3793

51单片机独立按键短按按触发连发功能)以及双击功能

独立按键按、短按双击的判断,运用了状态的分析,短按按的区别为按键按下的时间不同所以从短按状态到按状态的条件为按键按下的时间超过设定的按时间,而二者的共同点为:按键只按下一次。而双击前者的不同在于双击按键按下了两次。 我在这先识别【单击】和【按】然后在有一次按键按下的基础下,且必须是【单击】的情况下再去在规定的间隔内检测双击】。 由于在我们按键按下的时候会有抖动,实际中会有这种情况:按键松开了但没松完,或者按键没有完全按下,只是很轻的按单片机也会判断为【单击】,所以我们在这需要设置判.

m0_63192327的博客 2万+

【软件模块】适用于所有单片机按键扫描算法

本文介绍了一种简单高效的独立按键检测算法和C语言代码实现,经测试,该算法实现稳定的按键短按检测

seanliu19的博客 5153

stc89c51单片机矩阵键盘扫描

c51单片机矩阵键盘扫描实现代码

fgs的博客 7056

【蓝桥杯单片机】2.2 矩阵键盘的按、短按

关于51单片机矩阵键盘的短按问题,依托于蓝桥杯单片机(STC15F2K60S2)。代码风格近似于B站小蜜蜂老师,欢迎交流指正~

2301_80281610的博客 3085

单片机按键检测程序(定时器法消抖)

单片机按键检测程序(定时器法消抖) 相信大家在初学51单片机的时候按键检测为了消抖都会加一些空循环做软件延时。这样做可是浪费了CPU的不少资源。对于51这种低端单片机做一些功能很多的项目时软件延时的方法不仅浪费CPU资源而且软件还会莫名其妙的出现很多BUG。所以我们今天就试着剖析一下按键抖动的问题。 下面我们分析一下按键的抖动 我已经先把图上的这个时间标出来了,按键按下的前抖动和按键松开的后抖动是按键本身的机械特性决定的,这不是人能控制的。而中间的那个稳定闭合区是我们所能控制,不过以我们人体的反应和控制能力

weixin_44663976的博客 6438

51系列单片机实战:矩阵按键扫描状态机优化

本文详细探讨了51系列单片机矩阵按键的优化扫描方案。通过引入状态机模型,有效解决了传统扫描方式在按键消抖、检测和连按处理等方面的局限性,显著提升了按键响应的准确性和系统性能,为复杂输入场景提供了稳定可靠的检测方法。

vv45678的博客 943

按键交互模式实现:单击、双击检测设计

本文还有配套的精品资源,点击获取 简介:该资源介绍了在电子设备和嵌入式系统中实现按键交互的重要性,并提供了一个支持单击、双击按三种操作模式的按键扫描程序。程序设计旨在准确识别和区分用户的按键操作,避免误触发,适用于复杂操作的设备。内容涵盖了按键扫描、去抖动处理、时间间隔检测、事件分离及参数设置等方面,以状态机模型为基础,确保了用户界面的友好性和系统的响应性。 ...

weixin_42360846的博客 3372

51单片机学习】(2)定时器扫描实现按键按和短按

基于B站江科大定时器扫描按键模板

sudoeast的博客 3090

基于51单片机和8X8LED点阵屏(板载74HC595驱动)的普中开发板矩阵按键控制的小游戏《贪吃蛇》

51单片机 矩阵键盘按键 普中A2开发板 8X8LED点阵屏 贪吃蛇 小游戏 扫描显示 STC89C52RC

gantengsheng的博客 3478

普中51单片机教程-5.矩阵键盘

普中51单片机矩阵键盘介绍运用

m0_68839913的博客 3186

51单片机自学--完美的单击、双击按、中断消抖

完整的单击、双击按代码。 工作原理:当有按钮第一次按下时,设置第一个标志An,当按钮第一次释放后,进入中断消抖延时计数,假如在计数范围内第二次按钮按下,设置第二标志Aa,这样就把单击和双击区分开,而且是可靠的逻辑标志,按为大于1秒的判断. 中断消抖及按钮单击、双击按处理,双击在仿真中稳稳地检测到执行。 之前发布的矩阵按键也一样可以采用中断延时,不过时间应该更短,如50-100毫...

浤济的专栏 1万+

状态机实现双击短按按等按键识别检测算法

按键识别算法在不同的技术和应用背景下有不同的作用,但其核心目标都是准确、可靠地检测和区分用户通过物理或虚拟按键所执行的操作。按键识别算法在各类电子设备及系统中起到至关重要的作用,它确保了人机交互的有效性和准确性,提升了用户体验,并保证了系统的正常运行。按键识别算法也有较多的种类,在这一部分主要介绍独立按键双击短按识别算法

weixin_49337111的博客 4512
上一篇: 51单片机串口接收:支持可变长度数据和超时处理
下一篇: STC89C51定时器1详解及应用指南
字节人生
博客等级 码龄3年 1827粉丝 162原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值