问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机汇编矩阵键盘实验(扫描法)

发布网友 发布时间:2022-04-24 17:50

我来回答

3个回答

热心网友 时间:2023-05-19 03:45

关于扫描按键的原理,可以看下面这篇文章。

本文以循序渐进的思路,引导大家思考如何用最少的IO驱动更多的按键,并依次给出5种方案原理图提供参考。在实际项目中我们经常会遇到有按键输入的需求,但有的时候为了节省资源成本,我们都会选择在不增加硬件的情况下使用最少的控制器IO驱动更多的按键,那么具体是怎么做的呢,下面我们就以用5个IO引脚为例,讲下怎么设计可以实现更多的按键?共有5种设计思路,下面依次介绍。

思路一

首先通常想到的可能是下面这样的设计:

上图形式的按键就是我们通常说的行列式按键,它的驱动思路是这样的:

1. 对IO1、2、3配置为推挽输出,依次只让其中一个输出为0其他输出为1。

2. 对IO4、5进行读操作,根据读出的结果判断哪个按键按下。

例如:配置IO1、2、3为011,读IO4、5,若IO4为0则SW14按下,若IO5为0则SW15按下;

依次的配置IO1、2、3为101,读IO4、5,若IO4为0则SW24按下,若IO5为0则SW25按下;

依次的配置IO1、2、3为110,读IO4、5,若IO4为0则SW34按下,若IO5为0则SW35按下;

思路二

但是我们在不知道行列式按键之前我们肯定是依次将IO口接一个按键到GND或者到VCC,然后去读IO口去判断哪个按键按下,这也是最简单的方法,但是很浪费IO口,下面这种就结合了这种简单方法和行列式的思路,实现了又多增加3个按键,如下图:

这里我们的思路是先依次读IO1、2、3的电平来识别S1、2、3,哪个按键按下,其后的流程和思路一是一样的,这样就可以识别11个按键了。

思路三

按照扫描的思想,某一时刻设置一个IO口为0,其他IO口读,如果有IO口读到0,则有对应按键按下。比如IO1为0,然后读到IO5也为0,那么K15就是按下的。对照这样的思路,我们可以有下面的设计:

这个电路按键识别思路是这样的:

1. 只配置IO1为0,其他IO读,若IO5读到0,则K15按下,若IO4读到0,则K14按下,依次识别K13,K12;

2. 只配置IO2为0,其他IO读,若IO5读到0,则K25按下,若IO4读到0,则K24按下,依次识别K23;

3. 只配置IO3为0,其他IO读,若IO5读到0,则K35按下,若IO4读到0,则K34按下;

4. 只配置IO4为0,其他IO读,若IO5读到0,则K45按下;

思路四

对于思路3我们发现,如果只配置IO5为0,其他IO读,若IO1读到0,则K15按下,若IO2读到0,则K25按下,依次可识别K35和K45。这样就存在重复,那么有么有好的方法,解决这样的重复呢?我们发现,若配置IO1为0,K15按下,电流流向IO1的,若配置IO5为0,同样K15按下,电流是流向IO5的。这样我们就可以通过区分电流的流向来避免重复。于是就有了下图的设计:

这样就可以避免重复,IO5为0时,按K15,IO1是读不到0的。那么怎样设计,IO5为0时对应一个按键按下IO1为0呢?如是就有人想到下面的设计:

这个电路按键识别思路是这样的:

1. 只配置IO1为0,其他IO读,若IO5读到0,则K51按下,若IO4读到0,则K41按下,依次识别K31,K21;

2. 只配置IO2为0,其他IO读,若IO5读到0,则K52按下,若IO4读到0,则K42按下,依次识别K32,K21';

3. 只配置IO3为0,其他IO读,若IO5读到0,则K53按下,若IO4读到0,则K43按下,依次识别K32’,K31';

4. 只配置IO4为0,其他IO读,若IO5读到0,则K54按下,若IO4读到0,则K43’按下,依次识别K42’,K41';

5. 只配置IO5为0,其他IO读,若IO4读到0,则K54’按下,若IO3读到0,则K53’按下,依次识别K52’,K51'。

思路五

很多人可能认为思路四已经识别20个按键了,但是真的就没有其他方法了吗?不要忘了,我们还没有将思路二你介绍的那种最简单的方法结合进去,于是又可以多5个按键,如下图:

这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、K05在5个IO口都为读取的情况下,就可以识别,不需要扫描识别处理,相当于这5个按键优先级高与其他按键。

总结

综合上述,5个IO口最多可以识别25个按键,思路五程序上处理比较麻烦,若实际中只按思路四设计,也可识别20个按键,那么如果有N个IO口可识别多少按键呢?这里给出如下公式:

假设有N个IO口按照思路三可以识别N*(N-1)/2个;

按照思路四可识别N*(N-1)个;

按照思路5可以识别N*(N-1)+N个。

最后再说下,如果实际设计时,还是按思路四设计好,软件也没那么麻烦。如果是你的话你会选择哪种方法呢?你还有没有其他的设计方法呢?

热心网友 时间:2023-05-19 03:45

主程序写的不对,这样写,开机后只读一次键盘,可是还没有按键就过去了,然后进入死循环了
while(1);这是死循环。
改成这样
void main()
{
unsigned char num;
lcd_init();
while(1) //这行不能打分号;
{
num=key_num();
lcd_onedis(0,1,num);
}
}追问可以用汇编吗?

可以用汇编吗?

热心网友 时间:2023-05-19 03:45

电动车江河湖海发财
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
二手房物业费该怎么处理 二手房物业费该如何处理 今年八月份买的房子,物业让交一一年欠的物业费,我应该交么,_百度知 ... 深圳房产评估费怎么收费 1小时3分59秒24如何简写 稿纸上怎么写时间 玉米荷叶茶的功效与作用是什么 玉米荷叶茶的作用和功效禁忌是什么 眼睛上眼皮靠眼角的地方摸上去感觉有个硬疙瘩,而且眼睛很疼肿... 上眼皮突然肿了很痒怎么回事 英雄联盟集锦类似的视频,可以用pr做出来吗 请问都有那些和'土豆网'相似的在线视频网站??? 有没有类似的短视频? 请问制作一个类似宣传片的视频用什么软件的好? 求这个视频的出处和类似的视频 那些小视频软件,有哪些相似与不同之处? 这种视频的制作需要什么软件?需要多少钱能够制作出来类似的视频? 和德育学堂相似的视频有哪些? 类似爱拍的视频网站有哪些? 多数短视频内容相似,互相搬运!为何会出现这样的发展趋势? 检测报告应至少包括哪些信息 手机进入访客模式可以下载软件么? 谁知道哪个软件可以刷空间访客人气 一加访客模式怎么共享应用 淘宝无线app访客要怎么增加才比较快? 为什么电脑在不关机的状态下关闭显示器,过一段时间再开显示器就不亮了 宜家供应链管理中有哪些问题 宜家召回17万件缺陷餐具,计划何时结束? 宜家商品降价保价吗 电商运营的主要方向是什么? 微信钱包软件怎么弄的假的 魔兽里有多少品种? 魔兽世界有几种种族 魔兽世界的所有种族? 什么是细度模数??? 魔兽世界种族有什么区别? 细度模数计算公式是什么? 魔兽有几个种族 砂子的细度模数是什么意思? 魔兽争霸的种族共有多少种?(不仅是自定战役中的) 什么叫细度模数,又如何计算? 魔兽争霸种族共有几种? 砂的细度模数是什么 魔兽种类 砂的细度模数是什么? 魔兽世界的所有种族是哪些? 细度模数计算公式怎么来的? 剑起八荒披风怎么获得? 魔兽世界各个种族的英文名称 什么是机制砂的细度模数?