1、基于VHDL的键盘扫描及显示电路广西工学院 课程设计说 明 书 装 订 线 设计题目 系 别 专业班级 学生姓名 学 号 指导教师 日 期 基于VHDL的键盘扫描及显示电路摘要运VHDL硬件描述语言和图形设计综合方法,实现了44键盘扫描电路的程序设计,通过运用Quartus软件平台生成电路符号,建立波形文件,设置输入端口,实现模拟仿真,得到仿真波形图。关键字: VHDL Quartus 数码管1题目分析本次课程设计题目为44键盘扫描电路的设计。要求通过查阅相关书籍资料,熟悉和初步掌握VHDL语言的语法及其功能,根据要求首先进行理论上的分析,深入分析44键盘扫描电路的原理,然后根据分析结果设计程
2、序,进行上机的调试,通过Quartus4.1以上软件进行仿真,并记录仿真的结果。 装 订 线 2 矩阵键盘及显示电路设计思路矩阵键盘及显示电路能够将机械式44矩阵键盘的按键值依次显示到8个7段数码管上,每次新的按键值显示在最右端的第O号数码管上,原有第06号数码管显示的数值整体左移到第17号数码管上显示,见图1。总体而言,矩阵键盘及显示电路的设计可分为4个部分:(1)矩阵键盘的行及列的扫描控制和译码。该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。(2)机械式按键的防抖设计。由于机械式按键在按下和弹起的过程中均有510 ms的信号抖动时间
3、,在信号抖动时间内无法有效判断按键值,因此按键的防抖设计是非常关键的,也是该设计的一个重点。(3)按键数值的移位寄存。由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。(4)数码管的扫描和译码显示。由于该设计使用了8个数码管,因此需要对每个数码管进行扫描控制,并根据按键值对每个数码管进行7段数码管的译码显示。2 矩阵键盘及显示电路的实现本文所设计的矩阵键盘及显示电路的电路符号如图2所示。其中,clk为时钟信号输入端(频率可为1 02432 768Hz);start为清零控制端;kbrow为列扫描信号输入端;kbeol为行扫描信号输出端;s
4、can为数码管地址扫描信号输出端;seg7为数码管显示信号输出端。3.矩阵键盘及显示电路的电路符号44键盘扫描电路的电路符号如图2所示。其中clk1为时钟信号输入 装 订 线 端,start1为开始信号输入端,kbcol13.0为行扫描信号输出端,kbrow 13.0为列扫描信号输入端,seg717.0为八段显示控制信号输出端,scan12.0为数码管地址选择控制信号输出端。4.程序设计44键盘扫描电路用VHDL语言描述,全部代码由五个模块组成,其代码分别如下:键盘扫描模块程序、原理图及仿真波形:library ieee;use ieee.std_logic_1164.all;use ieee
5、.std_logic_unsigned.all;entity saomiao is port( en: out std_logic; state: out std_logic_vector(1 downto 0); clk : in std_logic; kbrow : in std_logic_vector(3 downto 0); kbcol : out std_logic_vector(3 downto 0) );End saomiao ;architecture one of saomiao is signal count:std_logic_vector(1 downto 0);be
6、ginprocess (clk , kbrow)beginen = not ( kbrow(0) or kbrow(1) or kbrow(2) or kbrow(3) );if( clkevent and clk=1) thenif not ( kbrow(0) or kbrow(1) or kbrow(2) or kbrow(3) )=1 then count kbcol= 0001;state kbcol = 0010;state kbcol= 0100;state kbcol= 1000;state kbcol case brow is when 0001=atatat atnull;
7、 end case; when 01= case brow is when 0001=atatat atnull; end case; when 10= case brow is when 0001=atatat atnull; end case; when 11=Case brow isWhen 0001= at at at at null; end case; end case;end if ;end process;End;防抖模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entit
8、y dizfenp is port( n: in std_logic;da : in std_logic_vector(3 downto 0);data : out std_logic_vector(3 downto 0); start : in std_logic; clk : in std_logic; scan : out std_logic_vector(2 downto 0) );End dizfenp ;architecture one of dizfenp is signal temp:std_logic_vector(31 downto 0);Signal fnq : std_
9、logic; Signal cnt8: std_logic_vector(2 downto 0);Signal key :std_logic_vector(7 downto 0);beginprocess(clk)variable reg8: std_logic_vector(7 downto 0);beginif(clkevent and clk=1) thenreg8:=reg8 (6 downto 0) & n;end if;key= reg8;end process;fnq=key(0) and key(1) and key(2) and key(3) and key(4) and k
10、ey(5) and key(6) and key(7) ;process(fnq,start)beginif start=0 thentemp=00000000000000000000000000000000;elsif (fnqevent and fnq=1) thentemp=temp(27 downto 0)&da;end if;end process;process(clk,temp,cnt8)beginif clkevent and clk=1 then cnt8 scan =000;data scan =001;data scan =010;data scan =011;data
11、scan =100;data scan =101;data scan =110;data scan =111;datanull;end case;end process;End;译码模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yima is port( data : in std_logic_vector(3 downto 0); seg7 : out std_logic_vector(7 downto 0) );End yima;architecture one of y
12、ima is beginProcess(data)BeginCase data isWhen 0000 = seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 clk1 , kbrow = kbrow1,kbcol= kbcol1,en= a,state= b);U2: shuju port map(clk =clk1, brow =kbrow1, at = c, tate =b );U3: dizfenp port map(n =a, da=c,data=d,start =start1
13、, clk = clk1, scan = scan1);U4: yima port map(data=d, seg7= seg71);End architecture one ;5.仿真及结果用Quartus软件平台对设计进行模拟仿真,得到44键盘扫描电路功能仿真结果如图3所示,时序仿真结果如图4所示。观察波形可知,列扫描信号kbrow1在时钟控制下循环扫描,当有键按下时,行扫描信号kbcol1读入相应的列信号来判断按键,seg71输出按键对应的数据,直到下一个按键被按下时才更新数据。6.心得体会本次主要做的是EDA方面的一些简单应用,通过对44键盘扫描电路的设计,初步了解的EDA方面的一些知
14、识,加深了对硬件描述语言VHDL的了解。在实际动手解决问题的过程中初步学习了VHDL语言的功能,同时真正体会到了其硬件描述语言的良好的可读性、可移植性和易理解等优点。而且在设计的过程中运用Quartus软件平台模拟仿真,学习了这一实用性很高的软件,初步了解的Quartus的用法,丰富了我的知识储备。虽然一开始对设计题目和要求满头雾水,对VHDL语言和Quartus软件平 装 订 线 台知之甚少,基本不会操作,但是通过查阅大量的书籍、报刊、杂志、专业网站、论坛的方式,找寻所需资料,反复比对研究有关资料,终于初步的了解了VHDL的编程和Quartus平台的用法,完成了设计。所以不但加深了我对所学知识的理解,进一步升华了以前学过的电力电子技术、数电和模电、EDA等知识。而且提高了我分析问题、解决问题的能力,进一步加强了我的综合素质,对我是一次很好的锻炼机会。将在我今后的学习工作生活中起到积极的作用。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1