数字系统设计大作业4×4阵列键盘键信号检测电路设计

2014 ~ 2015学年 第 1 学期 《数字系统设计》
大作业 题 目:
4×4阵列键盘键信号检测电路设计 专 业:
电子信息工程 班 级:
姓 名:
指导教师:
电气工程学院 2015 年 月 摘 要 人类文明已进入到高度发达的信息化社会。信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,Electronic Design Automation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。

本设计主要利用VHDL硬件描述语言在EDA平台xilinx.ise.7.1i上设计一个4×4阵列键盘扫描电路,将行扫描信号输入阵列键盘,读取列信号的值,输出按键编码,从而判断出按键按下的位置。并且使用Modelsim软件进行模拟仿真,下载到EDA实验箱进行硬件验证。

关键词:EDA VHDL语言 4×4阵列键盘扫描 目 录 《数字系统设计》
1 数字系统设计 2 摘 要 3 关键词:EDA VHDL语言 4×4阵列键盘扫描 3 1、实验目的 5 2、实验要求 5 3、 实验原理 5 4、 总体框图 6 4.1.1方案一 6 4.1.2方案二 6 4.2设计思路 7 5、功能模块介绍 9 5.1键盘消抖模块 9 5.2键盘模块 9 5.3VHDL部分程序 9 6、实验结果 11 6.1综合电路图 11 6.2时序仿真 12 1、实验目的 (1)通过常见基本组合逻辑电路的设计,熟悉EDA设计流程;

(2)熟悉文本输入及仿真步骤;

(3)掌握VHDL设计实体的基本结构及文字规则;

(4)理解硬件描述语言和具体电路的映射关系;

(5)用VHDL设计一个能识别4×4阵列键盘的实用电路。

2、实验要求 要求通过查阅相关书籍资料,熟悉和初步掌握VHDL语言的语法及其功能,深入分析4×4键盘扫描电路的原理,然后运用VHDL硬件描述语言和图形设计综合方法,实现4×4键盘扫描电路的程序设计,通过运用xilinx.ise.7.1i软件设置输入端口,实现模拟仿真,得到仿真波形图后,并记录结果。

3、 实验原理 4×4阵列键盘十分常用,如下图是此键盘电路的原理图,10芯接口也如下。通常,此类按键的识别法有两种:扫描法和反转法。扫描法,即当按下某键后,为了辨别和读取键信息,向A口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。若有键按下,则B口一定会输出对应的数据,这时,只要结合A、B口的数据,就能判断出键的位置。如当键S0按下,对于输入的A=1110时,那么B=0111.于是{B,A}=0111_1110就成了S0的代码。

反转法中,A、B口都必须接双向口。首先将A口设定为输出,B口设定为输入。然后向A口输出全0,接着读B口。若读入的数据中有一位是0,则表明与该位对应的列线上有某键被按下,存储此值(否则循环检测);
然后反过来,将A口设定为输入,B口设定为输出。向B口输出全0,读A口,其中必有一位为0.将此4位数与刚才从B口读得的数据组合即得被按键的特征码。最后通过查表即得所按键的码。

4×4按键电路 4、 总体框图 4.1.1方案一时钟脉冲 译码输出 键盘输入 键盘扫描 上图为方案一的设计框图,键盘按键按下后,经过键盘扫描电路后,直接输出显示。本方案优点在于简单易懂,缺点在于无法消除按键按下时和之后弹起时的抖动对扫描电路的干扰。

4.1.2方案二 时钟脉冲 键盘输入 键盘消抖 输出低电平 LED灯显示 键盘扫描 上图为方案二的设计框图,键盘按键按下后,先经过消除抖动电路之后,再进入键盘扫描电路,这样就可以使CPU只处理一次按键操作,避免了按键按下时和之后弹起时的抖动对扫描电路的干扰。另外,LED灯显示可以更直观地看到实验结果。

4.2设计思路 本设计采用方案二,主要由三个功能模块组成:键盘消抖模块、键盘扫描模块、译码显示模块。

(1)键盘消抖模块 因为普通的按键都是接触式的,当按键闭合或释放时,上下接触面都会产生一个很短暂的抖动,这个抖动时间一般都会持续5-10ms,虽然这个抖动时间很短,但对于FPGA工作在50M的高频率上的器件来说,还是可以捕捉的到的。为了使CPU对于一次按键操作只处理一次,在软件中必须加入消除抖动处理。

本模块是由四个上升沿触发型D触发器和一个四输入的与门构成的。四个D触发器用同步时序方式连接,即:将它们的时钟输入端都连在一起。在工作时四个D触发器与clk时钟信号同步,输入信号以移位串行方式向前传递。

(2)键盘扫描模块 阵列式键盘又叫做行列式键盘,用带有I/O口的线组成行列结构,按键设置在行列的交点上。此模块所用键盘是表1所示的4×4阵列键盘。按键设置在行列交叉点,行列线分别接到按键开关的两端,每个键的按下与否由这个键的行电平和列电平共同决定,当按下时为低电平“0”,没有按下时为高电平“1”。

表1、4×4阵列键盘 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D 本模块设计采用扫描的方法来实现对键盘上每个键的识别,即当进行行扫描时,扫描信号由行线进入键盘,以“1110”、“1101”、“1011”、“0111”的顺序每次扫描不同的一行。之后,读取列线的电平信号,判断是哪个键按下了,如果列线全为高电平,则代表该列没有按键按下,如果列线有输入低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。假设行线为a,列线为b,长度都为4。将输入行扫描值a与列读取值b并置形成组合值作为按键的输入值,并对每一个键进行编码(如表2键盘参数所示),使其送入输出变量r(定义为4位),即可判断出按键按下的位置。

表2、键盘参数 行扫描a 列读取b 键盘按键 按键编码 1110 0111 1 0000 1101 0111 4 0001 1011 0111 7 0010 0111 0111 * 0011 1110 1011 2 0100 1101 1011 5 0101 1011 1011 8 0110 0111 1011 0 0111 1110 1101 3 1000 1101 1101 6 1001 1011 1101 9 1010 0111 1101 # 1011 1110 1110 A 1100 1101 1110 B 1101 1011 1110 C 1110 0111 1110 D 1111 3)译码显示模块 该模块包括输出低电平与LED灯显示。因为实验箱的LED灯是低电平有效,所以需要把输出变量r进行逻辑“非”变换。该部分采用了4个非门,分别将输入的4位扫描模块输出变量取反。LED灯的亮灭表示输出变量r。r为高电平时灯亮,r为低电平时灯灭,这样就能更清晰地显示出实验结果,使人一目了然。

5、功能模块介绍 5.1键盘消抖模块 图5-1消抖动模块 图4为消抖模块的逻辑符号,其中D(3:0)输入按键按下时带抖动的信号,经过消抖之后,Q(3:0)输出消除抖动之后的信号,使得CPU可以只对一次按键处理一次信号。

5.2键盘模块 图5-2键盘模块 图5-2为扫描模块的逻辑符号,其中a[3:0]是4位的行扫描信号,b[3:0]是4位的列读取信号,r[3:0]是4位的按键编码输出。

5.3VHDL部分程序 library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_1164.all; entity k44 is port (clk : in std_logic;--1khz以下 b,a : in std_logic_vector(3 downto 0); r : out std_logic_vector(3 downto 0)); end; architecture one of k44 is --signal c:std_logic_vector(1 downto 0); signal ba:std_logic_vector(7 downto 0); --signal e:std_logic_vector(3 downto 0); begin ba<=b&a; --ba<=e&a;b<=e; process(a,clk) begin -- if rising_edge(clk) then c<=c+1; --case c is -- when “00“=>e<=“0111“;when “01“=>e<=“1011“; -- when “10“=>e<=“1101“;when “11“=>e<=“1110“; --when others=>null; --end case; case ba is when “01111110“=>r<=“0000“;when “01111101“=>r<=“0001“; when “01111011“=>r<=“0010“;when “01110111“=>r<=“0011“; when “10111110“=>r<=“0100“;when “10111101“=>r<=“0101“; when “10111011“=>r<=“0110“;when “10110111“=>r<=“0111“; when “11011110“=>r<=“1000“;when “11011101“=>r<=“1001“; when “11011011“=>r<=“1010“;when “11010111“=>r<=“1011“; when “11101110“=>r<=“1100“;when “11101101“=>r<=“1101“; when “11101011“=>r<=“1110“;when “11100111“=>r<=“1111“; when others=>null; end case; --end if; end process; end; 6、实验结果 6.1综合电路图 图6-1(a)电路原理图 图6-1(b)RTL电路 6.2时序仿真 对源程序进行操作,生成tbw文件后,继续对.tbw进行操作,点击Simulate Behavioral Model出现如下时序图,并对输入与输出进行赋值,如下:
图6-2(a)时序仿真初始图 图6-2(b)时序仿真结果图 具体分析:
如图6-2(b)所示, (1)当a=0111,b=1110时,对应输出s=0000,此时对应键盘上的S0,输出信息为1;

(2)当a=0111,b=1101时,对应输出s=0001,此时对应键盘上的S2,输出信息为2;

(3)当a=1101,b=1001时,对应输出s=1001,此时对应键盘上的SA,输出信息为9. 综上所分析,实验仿真结果显然满足课题要求,故该实验方案成立。

推荐访问: