集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1327|回复: 1

雾盈FPGA笔记之(二十六)六位四则运算计算器(2)矩阵键盘扫描模块

[复制链接]
雾盈 发表于 2016-8-28 12:35:43 | 显示全部楼层 |阅读模式
本帖最后由 雾盈 于 2016-8-28 13:43 编辑

六位四则运算计算器(2)矩阵键盘扫描模块
                                                        雾盈 2016-8-26


雾盈FPGA笔记汇总目录

一、写在前面

        上一篇文章我写了计算器整个设计的框架结构和设计思路,这一篇文章我们来谈谈矩阵键盘模块。
矩阵键盘扫描程序可以由多种方式来写,但是原理都是一样的。我把矩阵键盘模块分为两个小模块——矩阵键盘扫描模块和矩阵键盘消抖模块。

        今天,我们这篇文章只谈第一个小模块——矩阵键盘扫描模块,下一篇文章再讲消抖模块。

       

 
二、矩阵键盘原理

        使用矩阵键盘可节省大量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的最高位是按键有无按下的标志位。


       
        下面为源程序:


       


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
芙蓉王 发表于 2016-8-29 10:50:08 | 显示全部楼层
                        
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 10:15 , Processed in 0.065568 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表