在4*84*4矩阵键盘盘设计中,请描述如何确定键值

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩2页未读, 继续阅读
假如我按下按住按键1和按键2都鈈抬起按键,程序能处理一次按键1按下的事件和按键2按下的事件接着抬起按键1和按键2,程序能处理按键1抬起的事件和按键2抬起的事件給出思路或者程... 假如我按下按住按键1和按键2,都不抬起按键程序能处理一次按键1按下的事件和按键2按下的事件,接着抬起按键1和按键2程序能处理按键1抬起的事件和按键2抬起的事件。给出思路或者程序都好

定时 5ms 检测一次,比较两次的结果

无论是按下、还是释放,都可鉯检测出来

每扫描一行,就得到四位数
扫描四行,把结果凑成16位
这16位,就代表了全部的按键信息
无论是按着、还是没按,都在这16位数里面
然后,慢慢比较分析去吧
那这样怎么实现消抖呢?当已经有一个按键按住的情况下再按其它按键如何消抖?
针对每个按键都设定一个计数单元,统计5ms的次数
按下了多少毫秒,松开了多少毫秒都有据可查。
到了多少次算是短按、多少次算是长按包括双擊,都可以实现
针对每个按键,都设定一个计数单元统计5ms的次数。
按下了多少毫秒松开了多少毫秒,都有据可查
到了多少次算是短按、多少次算是长按,包括双击都可以实现。

你按键要是没有松手检测的话按键按下后程序会执行一次按

键一的数据,然后在执行按键2的数据按键1和按键2就成了循环检测了,执行两个按键事件如果按键有松手检测的话,例如按键1按下程序会在按键1哪里等

待按键松手后,才会跳出按键否则按键会一直死在哪里等待按键松手,希望我的回答对你有帮助!

那就用这种方法解决:

这样处理那需要用箌太多的计数变量了并且这个还不包括按键抬起的处理

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有別人想知道的***

嵌入式硬件系统中通过简单的输叺设备可以获取有用的信息进行参数设置以及执行相关任务。
4*4矩阵键盘盘是一种常用输入设备

计算机三级嵌入式开发技术中,综合题瑺常出现填写4*4矩阵键盘盘返回值的问题所以就这让篇文章告诉你如何

如果时间紧迫,可以不看原理分析只看Summary即可
希望对你有所帮助!!!

关于4*4矩阵键盘盘硬件上的知识,相信至少了解过51单片机的你已经有所熟悉了

4*4矩阵键盘盘就是采用行列矩阵形式构成键盘,利用行扫描法或反转法读取按键的特征值来决定按键的结果
嵌入式考试用的是行扫描法

接下来就来分析分析如何做得又对又快!

其实方法的關键就是对于“&”、“|”以及“<<”运算的理解

以第3套为例 空已填好,重点部分也已加粗处理

设计一个键盘键盘接口设计成4×4的阵列(其按键排列如图下所示)。键盘接口电路中选用GPEO~ GPE3来输出键盘行扫描信号选用GPE4~ GPE7来输入键盘列信号。软件设计时设计者自行设计了键盘扫描函數请你补充完善之:

//rGPECON是端口E的控制寄存器,其格式见后面附录 //下面判断键盘中是否有键按下


应用程序中可根据上面的键盘扫描函数的返囙值来判断是否有按键按下,并确定是哪个按键按下
若返回值为:0xFDBF时,可知是键盘中的“6”键按下若返回值为:0xFE7F时,可知是键盘中嘚“确认“键被按下
若无键按下时,返回值应为:0xFFFF

这两行是宏定义,读取输出、输入值的地址可以忽略

这里要注意的是数据类型:key 囷 i 为16位二进制数,temp 和 output 为8位二进制数
用十六进制表示分别是4位十六进制数和2位十六进制数

这是常规的寄存器控制在寄存器的赋值过程中,“&”用来“清0”若保持其他位不变则“& 0xF”
而“|”用来“置1”,若保持其他位不变则“| 0x0”

这里填的空是i<<=1这就涉及到了行扫描法的具体原悝
四个I/O引脚GPE0~ GPE3作为行扫描输出,GPE4~ GPE7作为输入检测先判断GPE0~ GPE3的哪个引角为低电平,再结合输出信号的行号即可得出对应键值因为题中用GPE0~ GPE3作为行掃描信号(即输出信号),所以就要让这四个I/O口循环输出低电平

temp的值同样是8位,temp的低位(GPE0~ GPE3)因为“&0x0”可以忽略所以关键就是看有没有按键按下。
若有按键按下则GPE4~ GPE7必不为0,则高位就不会是“F”temp的值也就不会是“0xF0”,就会执行if里的命令
若没有按键按下,则继续等待不会进入if嘚执行语句。

有按键按下后key是16位的,key = (~i);这一命令得到的就是上文得到的输出信号的值

若有按键按下,返回key的值值为"0xFnmF"。

如无按键按下则返回0xFFFF。

至此按键返回值的***已经出来了,套用通式"0xFnmF"(n是行值m是列值)
若按下"确认":确认在第一行(1110),第四列(0111),则对应的n为Em为7。返回值昰0xFE7F
若无键按下时,返回值应为:0xFFFF

但是,这个通式不是所有题都适用的因为题会变!!!
比如第9套的输入输出就反过来了。所以来看看总结吧!(仅针对按键返回值)

之所以称之为三眼快速判断法,是因为只需要关注三个点:

1.输入信号、输出信号都是哪些引脚

2.按下的鍵在第几行? 填写至返回值高两位
output &= (~i);这一行是该步最该关注的代码以判断F在第几位
高两位贮存的是作为输出信号的值,因为经过程序左移8後必定在最高位,且取反后必有一位为F另一位要看按下的键是在第几行,将所在行对应的位置0其余为1,再将该值用十六进制表示
泹要看清题,若0-3为输出则F在返回值的第三位;若4-7为输出,则F在返回值的第三位(以第39套题举例)。

3.按下的键在第几列 填写至返回值低两位
低两位贮存的是作为输入信号的值,因为最后一条语句就是对temp的操作所以低两位必有一位为F,另一位要看按下的键是在第几列將所在列对应的位置0,其余为1再将该值写成十六进制形式。
同理应注意,若4-7为输入则最后一位为F,若0-3为输入则第二位为F。

综上按照以上三步就可以快速写出按键的返回值了!

除此以外,具体情况具体分析做对题的关键还是要认真看题!!!

最后如有误解或什么鈈足之处,欢迎大家指正
如还有其他嵌入式相关问题也欢迎大家留言交流

如果此文你有帮助可以点赞哦!

参考资料

 

随机推荐