键盘扫描及计算器VHDL仿真文档格式.docx
- 文档编号:14842987
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:21
- 大小:48.24KB
键盘扫描及计算器VHDL仿真文档格式.docx
《键盘扫描及计算器VHDL仿真文档格式.docx》由会员分享,可在线阅读,更多相关《键盘扫描及计算器VHDL仿真文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
outSTD_LOGIC);
endcomponent;
beginU1:
fredivngenericmap(n=3)portmap(clkin=clk,clkout=clkout_kb);
endRTL;
仿真结果如下图:
达到预期的目的2.行驱动模块(依次对行置零):
键盘扫描的原理就是检测行列信号然后判断出具体是按下了哪一个按键。
所以,对行依次置零,当置零频率较快时,按下某一个按键后,一定能得到某一列的信号输出为零,如下图:
当行信号为1110时,若按下了0键,就会得到1110的列信号,立马就快可以译码出按键值,若按下4键、8键、C键则都不会有输出。
主要代码如下:
process(clkin)beginifclr=1thencount=elsifrising_edge(clkin)thenifcount=thencount=elsecount=count+1;
endif;
endprocess;
process(count)beginifcount=thenkeydrv=I0;
elsifcount=thenkeydrv=H1;
elsifcount=thenkeydrv=A1;
elsifcount=keydrv=1;
达到预期的目的3.键值编码模块依据行驱动模块,当按下某一个按键后,立马可以根据行列和并位信号得到唯一的键不11111位矢量来保存结果,当没有按键按下时,编码值一直保持着盘编码值,用5变,并在后端的模块中不对其做任何处理。
:
以下列出部分编码表(完整编码表见附录)十进制数elsesignalkeyvalue1:
STD_LOGIC_VECTOR(4signalkey1:
std_logic_vector(4downto0);
downto0);
STD_LOGIC;
Port(clkin,clr:
inkeyvalueinkey6=keycode;
15;
whenHEX0counter=counter+1;
signaltemp1:
STD_LOGIC_VECTOR(7downtothenfirst=2;
elsifn=henkeyvalue1key7show2=H1101;
7E4endif;
0);
elsifkeycode1=keyvaluein=conv_std_logic_vector(second,8);
elsiftemp1=A11011DEdownto0);
keydrvkey8show2=I1001;
335endif;
componentkeyscanthenelsifkeycode1=00henfirst=4;
elsifkeycode1=01henfirst=5;
elsifn=henkeyvalue1=10;
elsifDDelsifcount=thenkeydrvnull;
endcase;
num:
=conv_integer(k5Bkeyvalueinshow2show2=A1011;
process(clk)beginifclr=0thenifrising_edge(clk)theniftemp1=I01110thenkeyvalue1=-0elsiftemp1=I01101thenkeyvalue1=-1elsiftemp1=I01011then-2keyvalue1=elsiftemp1=I00111then-3keyvalue1=elsiftemp1=H11110then-4keyvalue1=00;
elsiftemp1=H11101thenkeyvalue1=01;
-5elsiftemp1=H11011thenkeyvalue1=10;
-6elsiftemp1=H10111then-7keyvalue1=11;
elsiftemp1=A11110thenkeyvalue1=00;
-8elsiftemp1=A11101thenkeyvalue1=01;
-9elsiftemp1=A11011then-10keyvalue1=10;
elsiftemp1=A10111then-11keyvalue1=11;
elsiftemp1=11110then-12keyvalue1=00;
elsiftemp1=11101thenkeyvalue1=01;
-13elsiftemp1=11011thenkeyvalue1=10;
-14elsiftemp1=10111thenkeyvalue1test3test4test5test6test7test8test9test10test11test12test13test14test15test16null;
iftest1=test5andtest2=test6andtest3=test7andtest4=test8andtest5=test9andtest6=test10andtest7=test11andtest8=test12andtest9=test13andtest10=test14andtest11=test15andtest12=test16and整瑳?
啜啕啕啕展then仿真波形如下:
从图中可以看出最终temp1从临时信号temp得到最终输出,达到防抖:
5.运算模块当前段的模块经过防抖处理以后得到稳定的按键信号,比如1+2=3,转化为编码值就是1011111100111=EDBBEB7DE7(具体编码表见附录)主要代码如下:
ifysfh=0thenresult=first+second;
elsifysfh=1thenresult=first-second;
elsifysfh=2thenresult=first*second;
n=n+1;
elsifn=thenn=endif;
process(n)beginifn=henkeyvaluein=conv_std_logic_vector(first,8);
elsifn=henkeyvaluein=conv_std_logic_vector(second,8);
elsifn=henkeyvaluein=conv_std_logic_vector(result,8);
仿真波形如下:
以1+3=4和5x6=30为例:
编码:
01+03=0405X06=1E6.数码管显示模块以及动态扫描模块由于次两个模块是密切相关的,所以统一到一起验证。
经过运算得到最终的显示结果后,要在七段数码管中显示,就必须有每一个数的七段码,同时,由于前面的运算模块的结果最大可以达到81,也就是需要8位二进制,两位十进制来表示,所以就必须通过显示模块来分离出十位和个位。
分离出十位和个位以后,就必须要利用动态扫描使两个数都能显示出来。
因为8个七段数码管的abcdefg位是连在一起的,只有利用分时间隔来显示,一次使能一个数码管,显示一位数,当频率较高时,就可以得到两位数的显示效果。
数码管显示模块主要代码如下:
ifnum=0thenten:
=0;
one:
=10;
elsifnum0thenten:
=num;
elsifnum9thenten:
=1;
=num-10;
elsifnum19thenten:
=2;
=num-20;
elsifnum29thenten:
=3;
=num-30;
elsifnum39thenten:
=4;
=num-40;
elsifnum49thenten:
=5;
=num-50;
elsifnum59thenten:
=6;
=num-60;
elsifnum69thenten:
=7;
=num-70;
elsifnum79thenten:
=8;
=num-80;
elsifnum89thenten:
=9;
=num-90;
t=conv_std_logic_vector(ten,4);
o=conv_std_logic_vector(one,4);
动态扫描模块主要代码如下:
ifcount=showout=show1;
en=elsifcount=thenshowout=show2;
enshowout01100003002=showout11011016D03=showout111100179由以上波形可以看出:
01+02=03的计算完成了。
五、总结本次EDA设计实践,完成了从VHDL代码编写到硬件实现的整个流程,掌握了一些FPGA的相关概念以及ISE软件和Active-HDL软件的使用方法。
最重要的就是组员之间的合作,因为VHDL程序是模块化编写的,所以不同模块是由不同人来完成编译的,要达到各个模块之间能够良好的衔接通信,就必须有一个很好的沟通交流,把大家的思路集中起来,一起讨论、编写、调试程序。
【附录一】完整程序:
libraryIEEE;
分频:
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useuseIEEE.STD_LOGIC_UNSIGNED.ALL;
IEEE.STD_LOGIC_UNSIGNED.ALL;
entityfredivnisentitykeyscanisPort(clr:
instd_logic;
generic(n:
integer:
=3);
clkin:
keydrv:
outPort(clkin:
STD_LOGIC_VECTOR(3downto0);
outendkeyscan;
STD_LOGIC);
ar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘 扫描 计算器 VHDL 仿真