打铁小肥罗 发表于 2016-8-24 00:13:14

用矩阵键盘在数码管上输出十六进制和十进制数

一.如题,要用矩阵键盘在数码管上显示十六进制数和十进制数,肯定要用到键盘输入和数码管,顶层可以这样搭建:
如图:顶层1~3.javascript:;javascript:;
顶层包含Keyboard(键盘输入模块)和smg(数码管模块)两个子模块。javascript:;以上信号为顶层的输入和输出。
二.接下来看键盘输入模块。
javascript:;javascript:;javascript:;
按照电路顺序为:
1.scankey(键盘扫描模块)→2.key_xd(键盘消抖模块)→3.key_reg(数据寄存模块)
1.scankey(键盘扫描模块)
javascript:;javascript:;javascript:;
键盘扫描模块又分两个子模块a.        key_switch(进制切换模块)和b.        scan(扫描模块).
a.        Key_switch(进制切换模块)
我们输入的是两种进制,所以在输入的时候要有一个选择,作为我们输入进制的标志,我们在这里用板子上四位按键之中的S4按键作为我们的switch输入,控制输入进制状态state,为了便于观察,我外接了一盏LED灯(pio_led),亮的时候表示输入十进制,灭的时候表示输入十六进制。
b.        Scan(扫描模块)
矩阵键盘的扫描,用FPGA向键盘发送扫描列电平col,与FPGA从键盘接收过来的行电平row,以及我们的进制状态state组成扫描码scancode={state,col,row},用一个case语句,把我们的按键扫描出来。
javascript:;javascript:;
注意:我的程序由外部键盘输入的十六进制数是8421码
十进制输入的直接是BCD码!
2.key_xd(键盘消抖模块)
javascript:;
消抖模块大概思路:
先对键盘连续输出的N个数字进行取值,在进行判断,如果这连续的N个数值相同,则为真实输出,否则为抖动,在每一次按键按下且有真实输出的情况下,我们将keynum_vld拉高为高电平,知道按键放开再将为低电平,我们认为这是一次有效输出。
3.key_reg(数据寄存器模块)
javascript:;javascript:;
我们以keynum_vld(按键输出脉冲信号)为基准,向寄存器中写入数据。
上面三个步骤即为键盘输入模块的思路。下面我们来探讨数码管模块的思路。
三.数码管模块
javascript:;javascript:;
数码管模块分为:
1.smg_light(数码管亮灭控制模块)→2.smg_display(数码管显示模块)。
1.smg_light(数码管亮灭控制模块)
javascript:;
思路:
从最高位开始,从第一个不是零的开始点亮数码管。用到一个csaex语句。
javascript:;
2.smg_display(数码管显示模块)
javascript:;
一共六个数码管(3’b000~3’b101)分分别对应数码管十万,万,千,百,十,个位。再把我们在上一模块的数码管点亮使能信号与六个数码管一一对照,如图
javascript:;
再扫入数码管即可:
javascript:;javascript:;

芙蓉王 发表于 2016-8-24 09:37:27

                        感谢分享

Blondie 发表于 2016-8-24 09:47:51

             多谢分享

Esmiamor 发表于 2016-8-24 11:13:39

                     加油

zhiweiqiang33 发表于 2016-8-24 14:45:41

坚持 写的很好,继续加油努力

zxopenljx 发表于 2022-11-16 09:55:36

用矩阵键盘在数码管上输出十六进制和十进制数
页: [1]
查看完整版本: 用矩阵键盘在数码管上输出十六进制和十进制数