集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3287|回复: 5

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

[复制链接]
打铁小肥罗 发表于 2016-8-23 23:30:24 | 显示全部楼层 |阅读模式
用矩阵键盘在数码管上输出十六进制和十进制数
一.如题,要用矩阵键盘在数码管上显示十六进制数和十进制数,肯定要用到键盘输入和数码管,顶层可以这样搭建:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5CFB.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D0C.tmp.jpg
顶层包含Keyboard(键盘输入模块)和smg(数码管模块)两个子模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1D.tmp.jpg
以上信号为顶层的输入和输出
二.接下来看键盘输入模块。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1E.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1F.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D20.tmp.jpg
按照电路顺序为:
1.scankey(键盘扫描模块)2.key_xd(键盘消抖模块)3.key_reg(数据寄存模块)
1.scankey(键盘扫描模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D21.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D31.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D32.tmp.jpg
键盘扫描模块又分两个子模块a.        key_switch(进制切换模块)和b.        scan(扫描模块).
a.        Key_switch(进制切换模块)
我们输入的是两种进制,所以在输入的时候要有一个选择,作为我们输入进制的标志,我们在这里用板子上四位按键之中的S4按键作为我们的switch输入,控制输入进制状态state,为了便于观察,我外接了一盏LED灯(pio_led),亮的时候表示输入十进制,灭的时候表示输入十六进制。
b.        Scan(扫描模块)
矩阵键盘的扫描,用FPGA向键盘发送扫描列电平col,与FPGA从键盘接收过来的行电平row,以及我们的进制状态state组成扫描码scancode={state,col[3:0],row[3:0]},用一个case语句,把我们的按键扫描出来。
注意:我的程序由外部键盘输入的十六进制数是8421
十进制输入的直接是BCD码!
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D43.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D44.tmp.jpg




2.key_xd(键盘消抖模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D54.tmp.jpg
消抖模块大概思路:
先对键盘连续输出的N个数字进行取值,在进行判断,如果这连续的N个数值相同,则为真实输出,否则为抖动,在每一次按键按下且有真实输出的情况下,我们将keynum_vld拉高为高电平,知道按键放开再将为低电平,我们认为这是一次有效输出。

3.key_reg(数据寄存器模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D55.tmp.jpg
我们以keynum_vld(按键输出脉冲信号)为基准,向寄存器中写入数据。
上面三个步骤即为键盘输入模块的思路。下面我们来探讨数码管模块的思路。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D56.tmp.jpg


三.数码管模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D67.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D68.tmp.jpg
数码管模块分为:
1.smg_light(数码管亮灭控制模块)→2.smg_display(数码管显示模块)。
1.smg_light(数码管亮灭控制模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D69.tmp.jpg
思路:
从最高位开始,从第一个不是零的开始点亮数码管。用到一个csaex语句。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7A.tmp.jpg
2.smg_display(数码管显示模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7B.tmp.jpg
一共六个数码管(3b000~3b101)分分别对应数码管十万,万,千,百,十,个位。再把我们在上一模块的数码管点亮使能信号与六个数码管一一对照,如图file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7C.tmp.jpg
再扫入数码管即可:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8C.tmp.jpgfile:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8D.tmp.jpg


用矩阵键盘在数码管上输出十六进制和十进制数
一.如题,要用矩阵键盘在数码管上显示十六进制数和十进制数,肯定要用到键盘输入和数码管,顶层可以这样搭建:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5CFB.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D0C.tmp.jpg
顶层包含Keyboard(键盘输入模块)和smg(数码管模块)两个子模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1D.tmp.jpg
以上信号为顶层的输入和输出
二.接下来看键盘输入模块。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1E.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1F.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D20.tmp.jpg
按照电路顺序为:
1.scankey(键盘扫描模块)2.key_xd(键盘消抖模块)3.key_reg(数据寄存模块)
1.scankey(键盘扫描模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D21.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D31.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D32.tmp.jpg
键盘扫描模块又分两个子模块a.        key_switch(进制切换模块)和b.        scan(扫描模块).
a.        Key_switch(进制切换模块)
我们输入的是两种进制,所以在输入的时候要有一个选择,作为我们输入进制的标志,我们在这里用板子上四位按键之中的S4按键作为我们的switch输入,控制输入进制状态state,为了便于观察,我外接了一盏LED灯(pio_led),亮的时候表示输入十进制,灭的时候表示输入十六进制。
b.        Scan(扫描模块)
矩阵键盘的扫描,用FPGA向键盘发送扫描列电平col,与FPGA从键盘接收过来的行电平row,以及我们的进制状态state组成扫描码scancode={state,col[3:0],row[3:0]},用一个case语句,把我们的按键扫描出来。
注意:我的程序由外部键盘输入的十六进制数是8421
十进制输入的直接是BCD码!
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D43.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D44.tmp.jpg




2.key_xd(键盘消抖模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D54.tmp.jpg
消抖模块大概思路:
先对键盘连续输出的N个数字进行取值,在进行判断,如果这连续的N个数值相同,则为真实输出,否则为抖动,在每一次按键按下且有真实输出的情况下,我们将keynum_vld拉高为高电平,知道按键放开再将为低电平,我们认为这是一次有效输出。

3.key_reg(数据寄存器模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D55.tmp.jpg
我们以keynum_vld(按键输出脉冲信号)为基准,向寄存器中写入数据。
上面三个步骤即为键盘输入模块的思路。下面我们来探讨数码管模块的思路。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D56.tmp.jpg


三.数码管模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D67.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D68.tmp.jpg
数码管模块分为:
1.smg_light(数码管亮灭控制模块)→2.smg_display(数码管显示模块)。
1.smg_light(数码管亮灭控制模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D69.tmp.jpg
思路:
从最高位开始,从第一个不是零的开始点亮数码管。用到一个csaex语句。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7A.tmp.jpg
2.smg_display(数码管显示模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7B.tmp.jpg
一共六个数码管(3b000~3b101)分分别对应数码管十万,万,千,百,十,个位。再把我们在上一模块的数码管点亮使能信号与六个数码管一一对照,如图file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7C.tmp.jpg
再扫入数码管即可:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8C.tmp.jpgfile:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8D.tmp.jpg


用矩阵键盘在数码管上输出十六进制和十进制数
一.如题,要用矩阵键盘在数码管上显示十六进制数和十进制数,肯定要用到键盘输入和数码管,顶层可以这样搭建:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5CFB.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D0C.tmp.jpg
顶层包含Keyboard(键盘输入模块)和smg(数码管模块)两个子模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1D.tmp.jpg
以上信号为顶层的输入和输出
二.接下来看键盘输入模块。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1E.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1F.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D20.tmp.jpg
按照电路顺序为:
1.scankey(键盘扫描模块)2.key_xd(键盘消抖模块)3.key_reg(数据寄存模块)
1.scankey(键盘扫描模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D21.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D31.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D32.tmp.jpg
键盘扫描模块又分两个子模块a.        key_switch(进制切换模块)和b.        scan(扫描模块).
a.        Key_switch(进制切换模块)
我们输入的是两种进制,所以在输入的时候要有一个选择,作为我们输入进制的标志,我们在这里用板子上四位按键之中的S4按键作为我们的switch输入,控制输入进制状态state,为了便于观察,我外接了一盏LED灯(pio_led),亮的时候表示输入十进制,灭的时候表示输入十六进制。
b.        Scan(扫描模块)
矩阵键盘的扫描,用FPGA向键盘发送扫描列电平col,与FPGA从键盘接收过来的行电平row,以及我们的进制状态state组成扫描码scancode={state,col[3:0],row[3:0]},用一个case语句,把我们的按键扫描出来。
注意:我的程序由外部键盘输入的十六进制数是8421
十进制输入的直接是BCD码!
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D43.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D44.tmp.jpg




2.key_xd(键盘消抖模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D54.tmp.jpg
消抖模块大概思路:
先对键盘连续输出的N个数字进行取值,在进行判断,如果这连续的N个数值相同,则为真实输出,否则为抖动,在每一次按键按下且有真实输出的情况下,我们将keynum_vld拉高为高电平,知道按键放开再将为低电平,我们认为这是一次有效输出。

3.key_reg(数据寄存器模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D55.tmp.jpg
我们以keynum_vld(按键输出脉冲信号)为基准,向寄存器中写入数据。
上面三个步骤即为键盘输入模块的思路。下面我们来探讨数码管模块的思路。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D56.tmp.jpg


三.数码管模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D67.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D68.tmp.jpg
数码管模块分为:
1.smg_light(数码管亮灭控制模块)→2.smg_display(数码管显示模块)。
1.smg_light(数码管亮灭控制模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D69.tmp.jpg
思路:
从最高位开始,从第一个不是零的开始点亮数码管。用到一个csaex语句。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7A.tmp.jpg
2.smg_display(数码管显示模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7B.tmp.jpg
一共六个数码管(3b000~3b101)分分别对应数码管十万,万,千,百,十,个位。再把我们在上一模块的数码管点亮使能信号与六个数码管一一对照,如图file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D7C.tmp.jpg
再扫入数码管即可:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8C.tmp.jpgfile:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D8D.tmp.jpg


用矩阵键盘在数码管上输出十六进制和十进制数
一.如题,要用矩阵键盘在数码管上显示十六进制数和十进制数,肯定要用到键盘输入和数码管,顶层可以这样搭建:
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5CFB.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D0C.tmp.jpg
顶层包含Keyboard(键盘输入模块)和smg(数码管模块)两个子模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1D.tmp.jpg
以上信号为顶层的输入和输出
二.接下来看键盘输入模块。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1E.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D1F.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D20.tmp.jpg
按照电路顺序为:
1.scankey(键盘扫描模块)2.key_xd(键盘消抖模块)3.key_reg(数据寄存模块)
1.scankey(键盘扫描模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D21.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D31.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D32.tmp.jpg
键盘扫描模块又分两个子模块a.        key_switch(进制切换模块)和b.        scan(扫描模块).
a.        Key_switch(进制切换模块)
我们输入的是两种进制,所以在输入的时候要有一个选择,作为我们输入进制的标志,我们在这里用板子上四位按键之中的S4按键作为我们的switch输入,控制输入进制状态state,为了便于观察,我外接了一盏LED灯(pio_led),亮的时候表示输入十进制,灭的时候表示输入十六进制。
b.        Scan(扫描模块)
矩阵键盘的扫描,用FPGA向键盘发送扫描列电平col,与FPGA从键盘接收过来的行电平row,以及我们的进制状态state组成扫描码scancode={state,col[3:0],row[3:0]},用一个case语句,把我们的按键扫描出来。
注意:我的程序由外部键盘输入的十六进制数是8421
十进制输入的直接是BCD码!
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D43.tmp.jpg
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D44.tmp.jpg




2.key_xd(键盘消抖模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D54.tmp.jpg
消抖模块大概思路:
先对键盘连续输出的N个数字进行取值,在进行判断,如果这连续的N个数值相同,则为真实输出,否则为抖动,在每一次按键按下且有真实输出的情况下,我们将keynum_vld拉高为高电平,知道按键放开再将为低电平,我们认为这是一次有效输出。

3.key_reg(数据寄存器模块)
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D55.tmp.jpg
我们以keynum_vld(按键输出脉冲信号)为基准,向寄存器中写入数据。
上面三个步骤即为键盘输入模块的思路。下面我们来探讨数码管模块的思路。
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D56.tmp.jpg


三.数码管模块
file:///C:\Users\st\AppData\Local\Temp\ksohtml\wps5D67.tmp.jpg
[img=554,160]file:///C:\Users\st\AppData
芙蓉王 发表于 2016-8-24 09:38:13 | 显示全部楼层
                        感谢楼主分享
Blondie 发表于 2016-8-24 09:47:01 | 显示全部楼层
                      楼主好人
zhiweiqiang33 发表于 2016-8-24 14:47:50 | 显示全部楼层
代码贴出来 加上注释 方便初学者学习 感谢分享
saddyxia 发表于 2017-8-21 11:16:46 | 显示全部楼层

感谢楼主分享
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-12-23 23:46 , Processed in 0.067135 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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