欢迎来到天天文库
浏览记录
ID:47588757
大小:161.96 KB
页数:19页
时间:2020-01-12
《键盘扫描及计算器VHDL仿真》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、电子设计自动化EDA简易计算器设计简易计算器设计——EDA实验报告一、实验内容实验要求:完成个位数的加减乘运算,输入用矩阵键盘,输出用数码管显示,每输入一次数据要显示在数码管上。矩阵键盘共16个按键,用其中10个做个位数的输入,用3个分别做加减乘运算,用其中1个做等于操作,各位数的运算结果最多两位,用动态扫描数码管显示运算结果。二、小组成员三、实现方法系统组成及连接原理如图所示,主要由由七个功能模块组成:分频模块(为键盘扫描模块和防抖模块提供时钟)、键盘扫描驱动模块(依次置零)、键盘按键值编码模块
2、、键盘编码值防抖模块、运算模块,数码管显示驱动模块、动态扫描驱动模块。分频键值编码防抖键盘矩阵行驱动时钟数码管显示运算数码管动态显示1.分频模块由于FPGA实验板的原始时钟频率高达33.8688MHz,所以不能直接接入设计模块中使用,就需要用到分频模块。将33.8688MHz分频到4KHz和10Hz来使用,一个用于行驱动扫描时钟,一个用于防抖模块。所以,采用写一个可变分频元件来调用。元件视图:电子设计自动化EDA简易计算器设计主要代码如下(完整代码见附录,下同):architectureRTLof
3、freq_divisioniscomponentfredivnisgeneric(n:positive);Port(clkin:inSTD_LOGIC;clkout:outSTD_LOGIC);endcomponent;beginU1:fredivngenericmap(n=>3)portmap(clkin=>clk,clkout=>clkout_kb);endRTL;仿真结果如下图:达到预期的目的2.行驱动模块(依次对行置零):键盘扫描的原理就是检测行列信号然后判断出具体是按下了哪一个按键。所以
4、,对行依次置零,当置零频率较快时,按下某一个按键后,一定能得到某一列的信号输出为零,如下图:电子设计自动化EDA简易计算器设计当行信号为1110时,若按下了0键,就会得到1110的列信号,立马就快可以译码出按键值,若按下4键、8键、C键则都不会有输出。主要代码如下:process(clkin)beginifclr='1'thencount<="00";elsifrising_edge(clkin)thenifcount="11"thencount<="00";elsecount<=count+1;
5、endif;endif;endprocess;process(count)beginifcount="01"thenkeydrv<="1110";elsifcount="10"thenkeydrv<="1101";elsifcount="11"thenkeydrv<="1011";elsifcount="00"thenkeydrv<="0111";endif;endprocess;仿真结果如下图:达到预期的目的3.键值编码模块依据行驱动模块,当按下某一个按键后,立马可以根据行列和并位信号得到唯一的
6、键盘编码值,用5位矢量来保存结果,当没有按键按下时,编码值一直保持着‘11111’不变,并在后端的模块中不对其做任何处理。以下列出部分编码表(完整编码表见附录):十进制数行&列HEX七段码HEX011101110EE11111107E411011110DE011001133511011101DD10110115B主要代码如下:电子设计自动化EDA简易计算器设计process(clk)beginifclr='0'thenifrising_edge(clk)theniftemp1="11101110"
7、thenkeyvalue1<="00000";--0elsiftemp1="11101101"thenkeyvalue1<="00001";--1elsiftemp1="11101011"thenkeyvalue1<="00010";--2elsiftemp1="11100111"thenkeyvalue1<="00011";--3elsiftemp1="11011110"thenkeyvalue1<="00100";--4elsiftemp1="11011101"thenkeyvalue1<="
8、00101";--5elsiftemp1="11011011"thenkeyvalue1<="00110";--6elsiftemp1="11010111"thenkeyvalue1<="00111";--7elsiftemp1="10111110"thenkeyvalue1<="01000";--8elsiftemp1="10111101"thenkeyvalue1<="01001";--9elsiftemp1="10111011"thenkeyvalue1<="01010";-
此文档下载收益归作者所有