基于VHDL的键盘扫描及显示电路.docx

上传人:李医生 文档编号:6307201 上传时间:2020-10-23 格式:DOCX 页数:15 大小:131.83KB
返回 下载 相关 举报
基于VHDL的键盘扫描及显示电路.docx_第1页
第1页 / 共15页
基于VHDL的键盘扫描及显示电路.docx_第2页
第2页 / 共15页
基于VHDL的键盘扫描及显示电路.docx_第3页
第3页 / 共15页
基于VHDL的键盘扫描及显示电路.docx_第4页
第4页 / 共15页
基于VHDL的键盘扫描及显示电路.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于VHDL的键盘扫描及显示电路.docx》由会员分享,可在线阅读,更多相关《基于VHDL的键盘扫描及显示电路.docx(15页珍藏版)》请在三一文库上搜索。

1、广西工学院EDA课程设计说 明 书设计题目基于 VHDL的键盘扫描及显示电路系别电控系专业班级_学生姓名_学号 _指导教师_日期 _基于 VHDL的键盘扫描及显示电路一、工作原理:可编程器件的 KEY_HANG3.0行信号输出端不停循环输出“1110”“ 1101”“1011”“ 0111”。当没有键按下时可编程器件的 KEY_LIE3.0 列信号输入端检测到的是“ 1111”。当有按键按下时,如按下 1,此时 KEY_HANG3.0行信号输出为“ 0111”,即 KEY_HANG3.0的3管脚为“ 0”,可由电路看出,此时输入端 KEY_LIE3.0 检测到的将是“ 0111”。 KEY_L

2、IE3.0 的 3管脚为 0,可以在编写程序时,将输出信号KEY_HANG3.0与输 入信 号 KEY_LIE3.0同 时判 断, 比 如 可以 认 为当 数据“ KEY_HANG&KEY_”LIE为“ 01110111”时,可译码成数据 1, 。同理可得其他按键的编码。根据不同数据的编码译成不同的数据。名称IO属性描述备注clkin输入时钟,和频率KEY_HANG3.0矩阵键盘的扫描输入端口KEY_LIE3:0矩阵键盘的扫描输出端口STARTout数据输出标志DISP DATA6.0out数码管译码显示译码 bit输出DASP SEL1.0数码管扫描输出CLK_1KCLK_40KCLK_1K

3、STARTKEY_HANG3.0CLE_40KDATA_P7.0DISP DATA6.0KEY_LIEDASP SEL1.0二、设计思路:1. 循环输出行信号,检测列信号输入,将行列信号相并。2. 译键值。去抖动。在译没一个键值后,为了防止抖动,加了一个计算环节,一旦检测到列信号后,译码,紧跟着进入计数环节,此时键抖动不会进入其他环节,这样可以防止抖动。数码管译码、循环显示。电路的具体功能罗列如下:1) 采用 44矩阵键盘作为操作数和操作符的输入设备。2) 采用 2位8段数码管作为输出显示设备,显示按下的数字及简单的功能。3) 由于所有键盘在按下或者弹起的时候均有按键抖动,所以应该采用去抖电路

4、,当检测到有按键按下去的时候,应该延时 20ms后,再进行检测,如果仍有键盘按键被按下去的话,则进行键盘读值。矩阵键盘模块 key_4_4的RTL电路图如下 所示。当 CLK_1K上升沿到来时状态转为 state0 ,然后判断列与非后的值,看是否有按键按下,如果有输入数据,则自动启动 20ms的计数器, 当计满数后,产生一个指示信号,此信号为 1bit ,高电平有效。当读到此指示信号后, 便再次将 row信号锁存至寄存器,便得到键盘的一个返回值。如果 row没有变化,则 state 转换为 state2 ,对第二行进行按键扫描。依此类推,扫描第三行与第四行。因为普通的按键都是接触式的,当按键闭

5、合或释放时,上下接触面都会产生一个很短暂的抖动,如图 2.2 所示,这个抖动时间一般都会持续 5-10ms,虽然这个抖动时间很短,但对于 FPGA工作在 50M的高频率上的器件来说, 还是可以捕捉的到的。 为了使CPU对于一次按键操作只处理一次,在软件中必须加入去除抖动处理。图2.2按键闭合时产生的抖动由图中可以看出,最简单的去抖方法就是每隔一段时间读一次键盘,时间间隔大于10ms即可。如果连续两次检测都有按键被按下,则可以肯定有按键被按下,而且也进入闭合稳定期。三、数码管显示译码模块设计数码管显示译码电路主要用来对实际的二进制数据装换为 8段数码管的实际显示控制码,采用两个 2位的 8段共阴

6、极数码管,数码管的显示方式有两种:静态显示和动态显示。具体如下 :静态显示方式:所谓静态显示就是指无论是多少位数码管,同时处于显示状态。静态显示的优点是:数码管显示无闪烁,亮度高,软件控制比较容易;缺点是:需要的硬件电路较多 (每一个数码管都需要一个锁存器) ,将造成很大的不便, 同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。所以,在大部分的硬件电路设计中,很少采用静态显示方式。动态显示方式:所谓动态显示, 是指无论在任何时刻只有一个数码管处于显示状态,每个数码管轮流显示。动态显示的优点是: 硬件电路简单 (数码管越多, 这个优势越明显

7、),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:数码管亮度不如静态显示时的亮度高,例如有 8个数码管,以 1秒为单位,每个数码管点亮的时间只有 1/8 秒,所以亮度较低; 如果刷新率较低, 会出现闪烁现象; 如果数码管直接与单片机连接,软件控制上会比较麻烦等。显示译码方式如下:1) 时钟上升沿到来时分别对位选和段选进行译码。2) 将输入的 2bite 位选数据译码成 4比特数据控制数码管的 2位,由于是共阴极数码管要选定相应的数码管则使该位位低电平,其它位为高电平即可,如: 0000译码为 0111_1111,对应于实验板上的左边第一位数码管。3) 将输入的 4bi

8、te 段选数据译码为 8比特数据控制 8个 LED的亮灭,最高位接 A, 最低位接小数点位 DP。若要显示 0则对应的译码为 8 b1111_1100。四、仿真没有键按下时行循环输出“”“”“”“”当随机按下时行保持所按下的状态不变五、结论这次 EDA课程设计历时十天,学到很多很多的东西。同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,都会很高兴。在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误。 排除困难后, 程序编译

9、就通过了。 在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示,后来,经过屡次的调试之后,才发现在写代码之前对信号的相位考虑不足。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次设计还是比较成功的,在设计中遇到了很多问题,最后在老师的

10、辛勤指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的老师和所有同学再次表示忠心的感谢!六、程序LIBRARY IEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY HH ISPORT(CLK_1K : IN STD_LOGIC;-时钟输入CLK_40K : IN STD_

11、LOGIC;- 时钟输入 K HZKEY_LIE : IN STD_LOGIC_VECTOR(3 DOWNTO 0);-列输入START :OUT STD_LOGIC;-二- 十进制数据输出标志KEY_HANG :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -行输出DATA_P : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);- 二 - 十进制数输出DISP_DATA : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-数码管显示译码输出DISP_SEL : OUT STD_LOGIC_VECTOR(1 downto 0);-

12、数码管显示扫描输出 END ;ARCHITECTURE RTL OF HH ISSIGNAL INT : STD_LOGIC;-列与非信号SIGNAL CLK_SEL : STD_LOGIC;-键值控制 1khz的时钟信号 SIGNAL START_REG:STD_LOGIC; 数-据输出标志信号SIGNAL DISP_SEL_REG:STD_LOGIC_VECTOR(1 DOWNTO数0);码-管显示扫描信号 SIGNAL DATA_L,DATA_H:STD_LOGIC_VECTOR(3DOWNTO0);- 二 - 十进制 低位、高位信号SIGNAL DATA_TMP:STD_LOGIC_V

13、ECTOR(3DOWNTO0);-二- 十进制低位高位暂存信号SIGNAL KEY_HANG_TMP:STD_LOGIC_VECTOR(3 DOWNTO行输0);出-信号SIGNAL DISP_DATA_REG:STD_LOGIC_VECTOR(3DOWNTO0);- 二- 十进制低位、高位暂存信号(数码管用)SIGNAL KEY_CODE:STD_LOGIC_VECTOR(7 DOWNTO行0);列- 相并信号 SIGNAL DATA_P_REG:STD_LOGIC_VECTOR(7 DOWNTO 二0);- -十进制数信号BEGINKEY_CODE=KEY_HANG_TMP&KEY_行LI

14、E;、列-相并DATA_P=DATA_P_REG;START= START_REG;KEY_HANG=KEY_HANG_TMP;DISP_SEL=DISP_SEL_REG;CLK_SEL=CLK_1K AND ( NOT INT);-无键按下时有 CLK-SEL时钟信号输出PROCESS (CLK_SEL,CLK_40K , INT)VARIABLE STATE : INTEGER RANGE 0 TO 3 ;BEGINIF RISING_EDGE(CLK_40K)THEN-一个 40K的脉冲上升沿到来输入一次列状态以判断是否有按键按下INTKEY_HANG_TMPKEY_HANG_TMPKE

15、Y_HANG_TMPKEY_HANG_TMPDATA_TMP - 再嵌套一个 CASE语句CASE KEY_CODE IS-实现把像并数据译码十六进制的 1到 FWHEN 01110111 =DATA_L =0001;-把1放入低四位DATA_HDATA_L =0010;DATA_H DATA_L =0011;DATA_H DATA_L =0100;DATA_H DATA_L =0101;DATA_H DATA_L =0110;DATA_H DATA_L =0111;DATA_H DATA_L =1000;DATA_H -9 DATA_L =1001; DATA_H -0 DATA_L =00

16、00; DATA_H -A键,实现步进加一功能IF DATA_H =1001 THENIF DATA_L=1001 THENDATA_H=1001;DATA_L=1001;ELSE DATA_L=DATA_L + 1;END IF;ELSIF DATA_L=1001 THENDATA_L=0000;DATA_H=DATA_H+1;ELSEDATA_L=DATA_L+1;DATA_H-B键,实现步键加十IF DATA_H=1001 THENDATA_H=1001;ELSEDATA_L=DATA_L;DATA_H-C键,实现步进减一IF DATA_L=0000 AND DATA_H=0000 TH

17、ENDATA_L=0000;DATA_H=0000;ELSIF DATA_L=0000 THENDATA_L=1001;DATA_H= DATA_H-1;ELSEDATA_L =DATA_L-1;DATA_H-D键,实现步进减 十IF DATA_H=0000 THENDATA_H=0000;ELSEDATA_L=DATA_L;DATA_H-E键,实现送数功能DATA_L=DATA_L;DATA_H=DATA_H;DATA_P_REG=DATA_H&DATA_L;START_REG-F键,实现清零功能DATA_L=0000;DATA_H不-可缺少STATE:=2;END CASE;WHEN 2

18、=-状态 2实现去抖动功能IF COUNTER=31 THEN -计数延时去抖COUNTER:=0;STATE:=3;ELSECOUNTER:=COUNTER+1;STATE:=2;END IF;WHEN 3 =- 清除数据输出标志START_REGDISP_SEL_REG=10;- 输入 10到数码管显示扫描信号DISP_DATA_REGDISP_SEL_REG=01;DISP_DATA_REGDISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATADISP_DATA=0000000;END CASE;END IF;END PROCESS;END;(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1