一、对独立按键进行松手检测


当按键按下时,会导致51单片机相应引脚变为低电平。利用这个原理,可以进行按键检测。就像下面这段代码:

if(KEY1 == 0) {delay_ms(10);if(KEY1 == 0) {...}
}

如果想要对按键是否能够连按进行控制,只需改成下面的样子:
方法1——

uchar enable = 0;       //使能连按的标志位
while(1) {if(KEY1 == 0) {delay_ms(10);if(KEY1 == 0) {//执行按键被按下的操作...    //前面已经执行完了响应操作while(KEY1 == 0 && enable == 0){//enable=0不支持连按,如果一直按着就会卡在这个循环}//在while之后,表明此时已经松手了//因此,可以进行一些松手后的操作,例如LED1 = 0;delay_ms(10);LED1 = 1;}}
}

上面是一种比较粗暴的思路:如果一直按着按键,那么响应的I/O口一定一直是0,再加一个控制位,就可以实现对松手检测的使能了。
方法2——
如果是松手后再按下按键,那么一定在I/O口一定会出现一个由高电平到低电平的变化,我们只需要捕捉这个变化即可。

uchar before;
while(1) {//before = 1; 如果需要使用连按功能时,可以这样写before = KEY1;//如果之前值不等于现在值,必然发生了高低电平的变化//这种变化有两种可能,0变1或者1变0,只需在消抖后重新判断即可if(KEY1 != before) {delay_ms(10);if(KEY1 == 0) {...}}
}

当然还有一些思路。矩阵键盘的松手检测就采用了另一种思路。

对矩阵键盘的松手检测


矩阵键盘与独立按键的松手检测有一些不同。矩阵键盘的没有端口接地,8个端口全部接入I/O口,这就需要手动改变I/O口的输入来检测是否松手。这里,我将矩阵键盘扫描做成了函数,并且在里面嵌套了按键响应接口函数execute(key_val)接口函数,用户只需在execute()中编写响应操作即可:

//mode=1表示支持连按,flag是用于表示按键是否被连按的标志位
void key(uint time, uint mode, uint* flag)
{uint temp = 0x00;uint row = 0,line = 0,key_val = 0;/*逻辑说明:flag取值为0或1,mode取值为0或1当mode=1时,表示支持连按,无论*flag取何值,均可以进入键盘扫描判断当mode=0,*flag=1时,表示不支持连按,但是按键是被第一次按下的,可以进入键盘扫描判断当mode=0,*flag=0时,表示不支持连按,且按键不是第一次被按下,不可以进入键盘扫描判断所以,当mode,*flag均为0时,不可以进入键盘扫描判断,也就是说,当两者相加为0时,不能进入键盘扫描函数*/uint enable;enable = mode + *flag;P3 = 0x0f;       //行高列低,写引脚temp = P3 & 0x0f; //读引脚if(temp == 0x0f){            //如果检测到按键没有被按下,说明连按被中断了,此时恢复标志位*flag=1;}if(temp != 0x0f && enable != 0){delay(time);if(temp != 0x0f){switch(temp){case 0x0e:row = 1;break;case 0x0d:row = 2;break;case 0x0b:row = 3;break;case 0x07:row = 4;break;}P3 = 0xf0;        //列高行低temp = P3 & 0xf0;if(temp != 0xf0){      //之前已经消抖过了,所以这里不用消抖switch(temp){case 0xe0:line = 1;break;case 0xd0:line = 2;break;case 0xb0:line = 3;break;case 0x70:line = 4;break;}            }}P3 = 0xf0;       //P3重新赋值,方便之后的连按检测key_val = 4*(line-1)+row;execute(key_val);//在执行完函数之后,检测按键是否还在被按着if(mode == 0 && P3 != 0xf0){//如果按键还在被按着,并且不支持连按//改变标志位,告诉下一次的键盘扫描之前已经执行过响应操作了*flag = 0;         }}
}

emmmm,所以,看起来矩阵键盘的逻辑更加复杂一点。如果有更简单的方法,希望交流一下。

51单片机键盘、矩阵键盘松手检测相关推荐

  1. 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真

    51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 文章目录 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 实验内容 一.实验一 矩阵键盘中断实验 数码管显示 1.仿 ...

  2. 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤

    [51单片机]矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤 一.环境 二.硬件部分 1. Proteus新建工程 2. 添加元件 3.连接线路 4.硬件效果 三.软件部分 1 ...

  3. 51单片机4x4矩阵键盘扫描+数码管显示

    51单片机4x4矩阵键盘扫描+数码管显示 个位闪烁感在这篇文章已经修复<51单片机4x4矩阵键盘扫描+数码管显示(二)(修bug篇)> 材料:AT89C52.2位数码管.74HC595. ...

  4. 51单片机之矩阵键盘多按键检测和松手检测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文章目录 前言 一.矩阵键盘是什么? 二.多按键检测 1.基本思想 三.松手检测 四.你如何拿去使用? 其他的随便,但是这玩 ...

  5. (五)51单片机基础——矩阵键盘

    矩阵键盘介绍: 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用逐行或逐列的"扫描",就可以读出任何位置按键的状态 扫描: 数码管扫描(输出扫描) 原 ...

  6. 使用51单片机的矩阵键盘和LCD1602做一个密码锁

    文章目录 前言 一.工具准备 工具一:51单片机 工具二:LCD1602液晶显示屏 工具三:Keil软件 二.开始操作 1.LCD1602的程序调试 2.矩阵键盘的程序调试 3.密码锁程序设计 总结 ...

  7. 51单片机入门——矩阵键盘(附51代码)

    1.硬件介绍 矩阵键盘电路图 硬件如图非常简单,将一个4*4的矩阵键盘的8个管脚引到端子上,在连接到8个I/O口上,ARRAY_H代表着行,ARRAY_L代表着列,当行与列的电平都置低的时候,就选中的 ...

  8. 51单片机开发实例 基于51单片机的矩阵键盘+显示

    一.系统设计 通过在矩阵键盘内输入数字并在LCD1602上进行显示,可以输入的数字有16个,分别是0-15.按下矩阵键盘就会上LCD1602上显示对应的数字,整个系统使用STC89C52单片机进行主控 ...

  9. 单片机学习笔记————51单片机实现矩阵键盘的组合按键触发

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  10. 利用51单片机,矩阵键盘按键显示0--F在数码管

    代码如下: #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7 ...

最新文章

  1. [20161031]rman备份与数据文件OS块.txt
  2. Android性能优化:布局优化 详细解析(含include、ViewStub、merge讲解 )
  3. 敏捷估算:故事点与直接估算天数的差异
  4. 高达 800 万次下载量的 npm 包被黑客篡改了代码,你的设备或正成为挖矿机
  5. wordpress静态文件加速,整合CDN
  6. c# u盘使用记录_金属U盘定制加工 各种款式金属U盘加工
  7. WAP的技术、运动和现状(转)
  8. 8086系列(18):查找电话号码
  9. 使谷歌浏览器兼容ie浏览器
  10. tp6 多关联withJoin查询
  11. 计算机电脑怎么开热点,电脑怎么设置wifi热点共享
  12. virtual reality(虚拟现实)
  13. 为何硅谷第一性感女人也没能拯救雅虎?
  14. 手游还能这么玩?电脑控制手机鼠标键盘大屏玩手游了解一下
  15. 最强大脑记忆曲线(12)-- 录入数据修改
  16. 西门子S7-1200 作MODBUS TCP客户端配置方法补充
  17. Java基础(7)字符串
  18. linux系统如何下游戏,海岛纪元干货 在Linux系统下如何畅玩游戏攻略
  19. android studio环境下如何修改app名字
  20. 【打印机】argox入门

热门文章

  1. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本
  2. html5基础(网页基本标签、图像标签、超链接、列表、表格、媒体元素、iframe框架、表单)
  3. Ubuntu,CentOS安装TIM(QQ),liunx通用
  4. ​你在淘宝剁手,钱却可能进入黑客的口袋
  5. canvas 系列学习笔记二《绘制图形》
  6. 参加最牛逼的运营人年终聚会,是种什么样的体验
  7. 4款口碑爆棚的电脑软件,每一款都值得拥有
  8. Mac字体路径,解决matplotlib中文显示问题,超级好用~
  9. 2022第九届生物发酵展(济南)3月召开,拓展生物发酵行业新机遇
  10. KEIL5创建新工程模板 以及文件简介概述