0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的4x4矩阵键盘驱动设计

CHANBAEK 来源:哈勒昆 作者:沈长棋 2023-07-23 11:41 次阅读

本次设计采用FPGA驱动4x4矩阵键盘,这个原理其实很简单,但是我在做的时候曾经理解错了一个地方,导致走了一天的弯路,因为感觉比较有意思,所以想在这分享一下。

014x4矩阵键盘驱动原理

首先看一下矩阵键盘的原理图,矩阵键盘的原理与独立按键类似,可以将单独的一行或一列当做一个独立按键使用。图中的row_one ~ row_four表示矩阵键盘的四行,col_one~col_four表示矩阵键盘的四列。

图片

矩阵键盘的扫描识别可以通过行列扫描来完成,首先我们先将4行的I/O口(row_one、row_two、row_three、row_four)全部输出高电平,4列的I/O口(col_one、col_two、col_three、col_four)全部输出低电平,若是这4行按键里有按键按下,那么按键按下的那一行对应的I/O口电平就会被拉低,这样我们就能确定按下按键的行坐标。接下来便需要确定列坐标,获取列坐标的方法与行坐标的方法类似,就是先让4行的I/O口全部输出低电平,4列的I/O口全部输出高电平,这样按键按下的那一列I/O口的电平就会被拉低,这样我们便确定了对应的列坐标,如此便能获取到对应按下按键的行列坐标。

02设计思路

这里需要讨论的便是如何实现4×4矩阵键盘的程序,其逻辑流程图如下图所示。首先需要定义8个输出端口,分别表示四行四列,然后先让四行的I/O输出高电平,四列的I/O输出低电平,这是初始状态。然后便是编写消抖程序,当有按键按下时,首先便是进行消抖,利用状态机编写消抖程序,识别判断当前状态是否为抖动。确定为按键按下后便开始判断4行中哪一行的电平被拉低,这样便能确定是哪一行的按键被按下,这里需要定义一个表示行的标志位,用来标志是哪一行按键按下。随后便将四行的I/O输出低电平,四列的I/O输出高电平,然后便开始逐列判断哪一列的电平被拉低,如此便能判断按下按键的列坐标。此处也需要定义一个表示列的标志位。最后便是综合判断,通过行的标志位和列的标志位来判断按下按键的行列坐标,如此便确定具体按下的按键。

图片

接下来看程序(此处分享的程序为没有带按键消抖的,只是按照矩阵键盘的扫描识别思路大致写了一下),首先是端口的定义,定义四行四列,但是有一点,原理上讲解的是输出电平,在这里这四个端口先定义为输入状态,因为这不是顶层文件,在顶层文件中再定义为输出。然后定义的key_lock为输出控制端,我这里是利用矩阵键盘设置的密码锁,每一个矩阵按键对应一个键值,当按下四个按键对应密码正确时,key_lock输出高电平。key_row_flag为行标志位,当检测到第一行的按键被按下时标志位置1,当第一行的按键被按下时标志位置2,同理,第三行置3第四行便置4。key_col_flag为列标志位,原理与行标志位一样。然后row_flag与col_flag为行扫描标志位与列扫描标志位,当row_flag为1时进行行扫描,当col_flag为1时进行列扫描。key_output为输出按下对应按键的键值。key_row_col为当前扫描状态,为1时表示行扫描结束,为2时表示列扫描结束,标志列扫描结束后便开始获取按键的键值。

图片

接下来便开始看行扫描,行扫描和列扫描初始状态为row_flag为1、col_flag为0。然后开始捕捉四行的引脚哪一行的引脚出现下降沿置0,若有一行的引脚被拉低置0时,行标志位立刻记下是第几行被拉低,然后行列状态标志位便置1,行扫描标志位row_flag清零,列扫描标志位置1,开始进入列扫描。

图片

然后就是列扫描,在列扫描中与行扫描原理一样,检测每一列引脚的电平,若其中一列的电平被拉低,则列标志位立刻记录被拉低的列数为第几列,然后恢复行扫描标志位准备进入下一轮扫描,同时将列扫描标志位清零,行列状态标志位置2,准备进入判断按下按键键值模式。

图片

接下来便是开始判断按下按键的键值,因为我这里只需要0~9这十个数字,而矩阵键盘有16个按键,所以写的稍微简单一点。从第一行第一列开始为1,第一行第二列为2,后面的依次类推。将第四列和第四行的键值全部设置的为0。这里进入判断键值的条件为行列标志位key_row_col置2,也就是必须在列扫描完成之后才能进入判断。

图片

这里在键值判断完成之后便是将当前获取的键值存储起来。这里因为行列标志位key_row_col比按键输出键值key_output差了一个时钟周期,所以赋值错误,然后我便重新定义了一个寄存器key_row_col_r用来过渡一下。下面定义的one起初是为了在key_row_col为2时不重复赋值才写的,是为了避免赋值后面输出的按键键值,也就是20ns的周期中只进去赋值一次,但是后面发现了时序相差一个时钟周期便在else中加入了那段,还未解决便定义了寄存器key_row_col_r,这才得以解决。

图片

图片

图片

最后便是设置密码,输出控制部分。此处将密码设置为2653。

图片

接下来便是波形仿真部分,在这里写入2653每一个键值对应按键的行列坐标便可。仿真脚本文件写好之后便可导入仿真。

图片

图片

图片

图片

03仿真波形

在仿真波形图中根据写入的对应键值来观察行、列标志位中的行列坐标是否正确,然后根据行列坐标来观察按键输出键值key_output是否一致,key_temp系列的值为存储的四位密码,当每一位与设置的密码一致时,key_lock输出高电平。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593195
  • 原理图
    +关注

    关注

    1268

    文章

    6180

    浏览量

    225681
  • 矩阵键盘
    +关注

    关注

    7

    文章

    204

    浏览量

    31131
  • 驱动设计
    +关注

    关注

    1

    文章

    108

    浏览量

    15187
收藏 人收藏

    评论

    相关推荐

    【proteus练一练2.15】4X4 矩阵键盘控制条形LED显示

    欢迎大家跟帖或发帖讨论,一起解决问题。。。/*名称:4X4 矩阵键盘控制条形 LED显示 说明:运行本例时,按下的按键值越大点亮的LED越多。 */ #include #include
    发表于 02-15 09:56

    4X4键盘接口数码管显示

    用C51仿真4X4键盘,然后在数码管上显示。
    发表于 10-22 14:55

    4X4键盘计算器

    4X4键盘计算器 给需要的同学
    发表于 01-02 12:06

    求助4X4矩阵按键点亮LED程序

    求助4X4矩阵按键点亮LED程序,按下按键,相应的lde灯(不是数码管)点亮,放开熄灭,在按下了一个按键相对应的led灯点亮,放开熄灭,C语言程序,谢谢。
    发表于 01-23 17:07

    勇敢的芯伴你玩转Altera FPGA连载19:4X4矩阵按键电路

    `勇敢的芯伴你玩转Altera FPGA连载19:4X4矩阵按键电路特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1i5LMUUD FPGA
    发表于 11-03 18:46

    基于FPGA4x4键盘矩阵

    基于FPGA4x4键盘矩阵
    发表于 12-14 01:26

    求一篇汇编语言写的4x4矩阵键盘控制条形LED显示的程序

    求一篇汇编语言写的4x4矩阵键盘控制条形LED显示的程序,电路图如下。求助求助
    发表于 12-25 09:30

    【案例分享】基于FPGA4x4矩阵键盘驱动调试

    首先找了本书看了下矩阵键盘驱动原理,一般来说4x4矩阵键盘的原理图如下,有四根行线和四根列线,
    发表于 07-09 08:30

    如何接口矩阵4x4键盘接口与spartan 3e fpga

    嗨,请帮我接口矩阵4x4键盘接口与spartan 3e fpga,描述fpga上要使用的引脚和要写入的代码。
    发表于 11-11 11:51

    4X4键盘的与CPU的接口原理

    一、实验目的1. 学习4X4键盘的与CPU的接口原理2. 掌握键盘芯片HD7279的使用,及8位数码管的显示方法;二、实验内容1. 通过4X4按键完成在数码管上的各种显示功能,以及LC
    发表于 07-26 08:24

    分享基于STM32 4x4键盘扫描尝试过程中踩到的雷

    基于STM32 4x4键盘扫描小白接触ARM快两周了,开发板上4个按键已经不能满足学习需要。开发板上按键都是一个按键对应一个IO口,大量浪费IO口资源,那需要很多很多按键怎么办呢,难道没有什么方法
    发表于 01-05 07:56

    什么是矩阵键盘

    很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘4X4和8X8,其中用的最多的是
    发表于 01-07 07:43

    如何对一种4X4矩阵薄膜键盘模块进行仿真呢

    什么是矩阵键盘呢?薄膜键盘的优点有哪些呢?如何对一种4X4矩阵薄膜键盘模块进行仿真呢?
    发表于 01-17 08:36

    4x4矩阵按键的扫描步骤是怎样的?

    4x4矩阵按键的扫描步骤是怎样的?
    发表于 01-21 06:21

    带有stm32的宏键盘4x4矩阵

    描述带有stm32的宏键盘4x4矩阵
    发表于 08-16 06:48