STC单片机按键扫描程序

最近在做一个电子秤相关项目,使用STC系列单片机作为主控芯片,项目第一阶段直接使用IAP15W4K58S4驱动两个矩阵键盘,一切调试顺利,在项目即将结束时老板要求使用另一块单片机驱动矩阵键盘,读取键值后通过串口传回之前的IAP主控(理由是为了节省从矩阵键盘到主控板之间的长排线的成本,16P+10P);OK ,老板发话了,还能说什么呢,做呗,于是问题出现了。下面先简单介绍矩阵键盘的检测原理,然后说一说一些容易遇到的问题。

1.先简单介绍下矩阵键盘的扫描原理

对于N*M的矩阵键盘(N>=M),我们在编写程序的过程中,为提高扫描效率与降低程序的复杂程度,常设计N为列检测,M为行扫描,对应于程序上的检测输入与扫描输出。下图为矩阵键盘的示意图。

矩阵键盘示意图

检测原理:在上图示意键盘中,规定竖向为列,即是P10,P11,P12,P13为列检测;P14,P15,P16,P17为行扫描。没有按键按下是,列检测为到电平(一般为准双向IO,弱上拉),行扫描为低电平输出。当按键S5被按下后,P10与P15接通,P10由高电平变为低电平,单片机检测到P10-P13有任何一位被拉低时,认为有按键按下,此时程序应记录下哪一列按键被按下(得到按键的列坐标),然后按序拉高P14-P14,直到P10-P13全为初始状态(高电平),此时拉高的行即为被按下的按键的行坐标。例如:S5被按下后,P10为0,得到列坐标为1,当P15拉高后,P10-P14均为1,得到行坐标为2,最后得到按键坐标为2行1列--S5。其他按键检测原理相同。

单片机驱动扫描按键原理很简单,但是在实际使用中对不同单片机的配置有要求,配置不当容易检测到错误的键值。一下简要说明几个容易遇到的问题。

1.现在市面上的单片机IO基本都有4种标准模式(准双向IO、推挽输出、开漏输出、高阻输入)详解见:(https://blog.csdn.net/jbh18401/article/details/76048843)。一般列检测配置为准双向IO,但准双向IO的输出为弱上拉啊,拉电流弱,抗干扰性差,所以在列检测IO外部,应外加上拉电阻(10-100K),一确保按键的稳定性。

2.在按键扫描的程序中,由于单片机程序执行速度快,在检测按键行坐标时,拉高对应行后应适当延时,等待IO端口稳定后再检测行输入是否改变(程序如下)。若不加入延时,会导致因IO还没来得及完全拉高,列检测程序已经执行完毕,最终导致按键动作检测不到或者误检。

STC单片机按键扫描程序相关推荐

  1. 51单片机按键扫描程序汇编程序(独立按键与矩阵按键)(使用定时器)(可移植的汇编程序)矩阵键盘控制两个led数码管(汇编语言)与UART通信总结(上)

    一,按键控制数码管 1四按键控制程序(汇编) (您的关注点赞是作者创作的最大动力哦) //******************************************************* ...

  2. 单片机c语言的按键程序,51单片机按键扫描C程序

    原标题:51单片机按键扫描C程序 大二上学期做过80 的按键程序,当时项目要求实现按键控制 屏显示并且接收GPRS传来的数据.当时为了节省成本,就去大西电子市场买来8*8的LED块,然后自己一点一点的 ...

  3. 51单片机c语言按键扫描程序,单片机按键扫描数码管显示C语言程序

    电子科学与技术 单片机按键扫描数码管显示C语言程序 按键扫描数码管显示程序共定义了6个键的功能:K1.K2.K3.K4以及K5.K8组成的一对复合键,其中K2,K3为连击键,K5为上档键.在正常工作模 ...

  4. 独立按键扫描程序的思考(整合两种算法)

    摘自:http://blog.csdn.net/xuechaojie/article/details/6761772 网上看到Etual 2008年总结的<新型按键扫描>的博文,很有感触. ...

  5. 新型的按键扫描程序,仅三行程序(amo)

    新型的按键扫描程序 不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉.我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入 ...

  6. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)

    先来说一下这三种模式的意思: 1. 短按模式:单击按键时,返回一次有效按键值:长按时也只返回一次有效按键值.这样可以有效地排除因不小心长按带来的返回多次有效按键,进而执行多次按键处理程序. 2. 长按 ...

  7. 原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序

    近身边的很多同学都在学习原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序.由于问的人多,所以我也写了个心得,分享一下,老鸟别喷我哈.先贴上代码吧: //返回值: //0,没有任何按键按 ...

  8. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘

    请先阅读上篇: 短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动) 上面的程序适用于单个按键,那是不是也可以适用于矩阵键盘呢? 答案是肯定的. 接下来在这里做一个简单的扩展,具体框架不用改变, ...

  9. 单片机按键扫描:分别实现长按两秒运行一种功能,短按松开后运行另一种功能

    单片机按键扫描: 分别实现长按两秒运行一种功能,短按松开后运行另一种功能. 代码如下: #define KEY1_PRES 1 //KEY1短按松开生效 #define KEY1_LONG_PRES ...

最新文章

  1. 人工智能训练云燧T10
  2. 【Qt】QIcon::fromTheme:从系统主题中获取图标
  3. CSRF(Cross-site request forgery)跨站请求伪造
  4. 【随笔】卷积神经网络中的卷积怎么卷?
  5. ManageEngine保护您的浏览器
  6. from表单提交和JSON区别
  7. chrome 代理插件_Chrome浏览器拓展插件同步助手
  8. HookProc 和 CallNextHookEx
  9. 扇贝有道180929每日一句
  10. 什么是死亡之 Ping 攻击?
  11. matlab中带脚咪头怎么找,咪头用万能表怎么测_咪头怎么辨认正负极
  12. VMware如何开机自动启动虚拟机也启动
  13. Acwing1183. 电力
  14. python小练习之货币转换
  15. 智能家居 mysql_智能家居 数据库设计
  16. 桌面上计算机图标被误删,电脑桌面图标被误删?两个方法轻松帮你找回,根本不需要重装系统...
  17. MFC下ODBC方式连接数据库
  18. principal argument cannot be null
  19. WindowManager LayoutParams 上
  20. linux tail

热门文章

  1. 使用ado连接orical数据库
  2. Backblaze 2022 Q3 硬盘故障质量报告解读
  3. 俄罗斯取消封禁 加密聊天软件Telegram
  4. 黑马ssm整合mysql数据库
  5. R假设检验与一元线性回归分析
  6. gensim实现LDA主题模型-------实战案例(分析希拉里邮件的主题)
  7. 2020年VR全景加盟的行业趋势
  8. LeetCode Cookbook 哈希表(collections.Counter()和collections.defaultdict())
  9. 从健身教练角度聊聊培训机构
  10. 用python制作一个属于自己的英汉词典