完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、写在前面 上一篇文章我写了计算器整个设计的框架结构和设计思路,这一篇文章我们来谈谈矩阵键盘模块。 矩阵键盘扫描程序可以由多种方式来写,但是原理都是一样的。我把矩阵键盘模块分为两个小模块——矩阵键盘扫描模块和矩阵键盘消抖模块。 今天,我们这篇文章只谈第一个小模块——矩阵键盘扫描模块,下一篇文章再讲消抖模块。 二、矩阵键盘原理 使用矩阵键盘可节省大量I/0口,按键越多,优势越明显。 矩阵键盘原理示意图如下: 1. 键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。 行线(row)通过上拉电阻接到+3.3V电源上。 无按键按下时,行线(row)处于高电平的状态,而当有按键按下时, 行线(row)电平由此行线(col)相连的列线电平决定。 2.列扫描确定矩阵键盘按键位置。 第一步, 使行线(row[3:0])为FPGA的输入线(input),列线(col[3:0])为输出线(output),让列线(col[3:0]) 按照足够快的频率循环扫描输出,这段程序如下图。 第二步,列扫描 将上一步产生的列线(col[3:0])扫描,输入进矩阵键盘, 让其不断的循环扫描四列,即从第一列开始逐行的拉低各列,无论拉低哪一列其他三列都为高电平。 第三步,确定按键位置 当某一个按键按下时,行线(row)的某一行被拉低,而列线(col[3:0])在进行快速的扫描,当某一列检测到低电平的时候,就可以确定按键所在位置。 举个例子: “5”键的检测 “5”没有被按下的时候,行线全为高阻,row[3:0] = 4’b1111 ; 当扫描列线扫描到第二列时(col[3:0]=4’b1101),若有“5”键被按下, 此时row[3:0]= 4’b1101 ;即可确定按键的位置。 第四步,译码 从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码。 译码程序如下: 其中keynum的最高位是按键有无按下的标志位。 下面为源程序: |
|
相关推荐
|
|
|
|
|
|
|
|
|
|
|
|
|
|
正在学习中谢谢
|
|
|
|
|
|
1421 浏览 1 评论
1215 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1426 浏览 0 评论
913 浏览 0 评论
2229 浏览 0 评论
1431 浏览 34 评论
5616 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:44 , Processed in 0.544046 second(s), Total 44, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号