矩阵键盘控制接口电路设计说明_第1页
矩阵键盘控制接口电路设计说明_第2页
矩阵键盘控制接口电路设计说明_第3页
矩阵键盘控制接口电路设计说明_第4页
矩阵键盘控制接口电路设计说明_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 .东 北 石 油 大 学课 程 设 计课 程 硬件课程设计 题 目 矩阵键盘控制接口电路设计 院 系 计算机与信息技术学院 专业班级 学生XX 学生学号 指导教师 2011年 07月 10 日东北石油大学课程设计任务书课程 硬件课程设计题目 矩阵键盘控制接口设计专业 计算机与信息技术09-4 学号 主要容、基本要求、主要参考资料等一、主要容:利用EL教学实验箱、微机和Quartus软件系统,设计并实现一个48键盘接口控制器。设计过程中使用层次设计方法和VHDL语言,完成硬件设计和功能仿真。最后下载到EL教学实验箱中予以实现。二、基本要求:1.按照层次设计方法实现键盘接口控制器中的时序产生电路

2、、键盘扫描电路、弹跳消除电路、键盘译码电路、按键码存储电路和显示八段数码管电路。2. 按下某一键时,在数码管上显示该键对应的键值。三、参考文献:1 松.EDA技术实用教程M.:科学, 2003.11-13.2 恒.FPGA/CPLD最新实用技术指南M.:清华大学, 2005.20-22.3 EDA先锋工作室.Altera FPGA/CPLD设计 M.:人民邮电2005.32-33.4 松.SOPC技术实用教程M .清华大学.2005.1-15.完成期限: 第19周 指导教师: 专业负责人:2011年 06 月28 日目 录第1章 EDA的概述11.1 EDA的概述1第2章 QUARTUS II

3、系统32.1 QUARTUS II3第3章矩阵键盘控制接口电路43.1 概述43.2 底层实体电路73.3 顶层实体电路103.4 仿真结果173.5 硬件验证结果18结论21参考文献2224 / 27第1章 EDA的概述1.1 EDA的概述EDA是电子设计自动化(Electronic DesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变

4、革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普与,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极提高了电路设计的效

5、率和可操作性,减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试与特性分析直到飞行模拟,都可能涉与到EDA技术。二、几个有关EDA的专题(1) EDA中心 (2) EDA中国门户 (3) 中国EDA工程网 .

6、edagc.(4) EDA爱好者 .edafans. (5) EDA教学与研究 .edateach. 三、设计方法(1) 前端设计(系统建模RTL 级描述)后端设计(FPGAASIC)系统建模(2) IP 复用(3) 前端设计(4) 系统描述:建立系统的数学模型。(5) 功能描述:描述系统的行为或各子模块之间的数据流图。6) 逻辑设计:将系统功能结构化,通常以文本、原理图、逻辑图、布尔表达式来表示设计结果。(7) 仿真:包括功能仿真和时序仿真,主要验证系统功能的正确性与时序特性。四、EDA工具软件EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。目前进

7、入我国并具有广泛影响的EDA软件是系统设计软件辅助类和可编程芯片辅助设计软件:Protel、PSPICE、multiSIM7(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim,ISE,modelsim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。EDA工具软件厂商三巨头:Synopsys、Mentor Graphics、Cadence。“eda”在英汉词典中的解释(来源:百度词典):EDA abbr. 1. =Economic Development A

8、dministration (美国)(商务部)经济开发署 2. =Economic Development Association (美国)经济开发协会eda abbr. 1. =early departure authorized 经批准提前出发第2章 QUARTUS II系统2.1 QUARTUS IIQuartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以与AHDL(Altera Hardware Description Language)等多种设计输入形式,嵌自有的综合器以与仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

9、Quartus II可以在XP、Linux以与Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可

10、编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面与简便的使用方法。 Altera

11、Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。 Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。支持MAX7000/MAX3000等

12、乘积项器件第3章 矩阵键盘控制接口电路3.1 概述在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的FPGA的I/O口作为输出端,而列线所接的I/O口则作为输

13、入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。实验仪器中48矩阵键盘的电路原理图如图所示:图3-1 48矩阵键盘的电路原理图扫描信号为BCOM8.1,在BCOM8.1前已接有一个3-8译码器,3-8译码器的输入为SEL0SEL3。当3-8译码器的输入为“000”时,即BCOM1为0,其他位为1,我们按下第一排第一键,此时KIN0输出0,KIN1KIN3输出全为1,按下第二排第二键时,KIN1输出0,其他输出1;当3-8译码器输入为001时,即BCOM2为0,我们按下第一排第

14、二键,此时KIN0输出0,KIN1KIN3输出全为1,同理其他键依此类推。键盘上的每个按键就是一个开关,当某键被按下时,该按键的接点会呈现0状态,反之为1。扫描信号为SEL2.0进入3-8译码器,再从译码器输出到键盘,所以第一次只能扫描一排,依此周而复始。按键位置与数码的关系如表50-1所示。若从KIN3.0输出的皆为1时,表示没有按键按下,代表该列没有按键被按下,则不进行按键编码的操作,反之,如果有被按下时,则应将KIN3.0读出的值送到译码电路进行编码。设置扫描信号为SEL2SEL0,列线按键输入信号KIN3KIN0与按键位置的关系如表所示:SEL2SEL0KIN3KIN0对应的按键键盘译

15、 码输出按键功能0001110000000数字01101600100数字61011LAST10100功能键0111CTRL11000功能键0011110100001数字11101700111数字71011STEP10101功能键0111EMPTY111010扩展10101110200010数字21101REG10010功能键1011C01100字母C0111EMPTY211011扩展20111110300011数字31101EXEC10011功能键1011D01101字母D0111EMPTY311100扩展31001110MEM10000功能键1101801000数字81011E01110字母

16、E0111EMPTY411101扩展41011110ESC10001功能键1101901001数字91011F01111字母F0111SHIFT11001功能键1101110400100数字41101A01010字母A1011NEXT10110功能键0111NONE11110无定义1111110500101数字51101B01011字母B1011ENTER10111功能键0111NONE11110无定义图3-2 键盘参数表3.2 底层实体电路弹跳消除电路因为按键大多是机械式开关结构,在开关切换的瞬间会在接触点出现来回弹跳的现象,对于激活关闭一般电器并不会有何影响,但对于灵敏度较高的电路,却有可

17、能产生误动作而出错。弹跳现象产生的原因可从图50-2说明。虽然只是按下按键一次然后放掉,然而实际产生的按键信号却不只跳动一次,经过取样的检查后将会造成误判,以为按键两次。按键信号抽样信号抽样结果图3-3 弹跳现象产生错误的抽样结果如果调整抽样频率,可以发现弹跳现象获得了改善。按键信号抽样信号抽样结果图3-4 调整抽样频率后得到的抽样结果因此必须加上弹跳消除电路,避免误操作信号的发生。注意,弹跳消除电路所使用脉冲信号的频率必须比其它电路使用的脉冲信号的频率更高;通常将扫描电路或LED显示电路的工作频率定在24HZ左右,两者的工作频率是通常的4倍或更高。该元件为一个通用的全功能的消抖动元件,含有自

18、由计数器模块、消抖动模块和微分模块。各引脚说明如下:Key为按键输入信号,高电平有效,有抖动毛刺;clr是清零信号,低电平有效;clk是同步时钟信号,选择20MHZ;dly_out是消抖动输出;diff_out是消抖动微分输出。LIBRARY IEEE; -消除USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY debouncing ISPORT(clk,key:IN STD_LOGIC; clr:IN STD_LOGIC; dly_out,dif_out:OUT STD_LOGIC);END debouncin

19、g;ARCHITECTURE a OF debouncing IS SIGNAL sample,dly,diff:STD_LOGIC; BEGINfree_counter:block -计数器模块 SIGNAL :STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL d0:STD_LOGIC; BEGIN PROCESS(clr,clk) BEGIN if clr=0then d0=0; 0); elsif clkevent and clk=1then d0= (4); = +1; end if; end process; sample=not( (4) and (not

20、d0);end block free_counter;debunce:block -消抖动模块 signal d0,d1,s,r:std_logic;begin process(clk,clr) begin if clr=0 then dly=0; elsif rising_edge(clk) then if sample=1 then d1=d0; d0=key; s=d0 and d1; r=not d0 and not d1; if s=0 and r=0 then dly=dly; elsif s=0 and r=1 then dly=0; elsif s=1 and r=0 then

21、 dly=1; else dly=0; end if; end if; end if; end process; dly_out=dly;end block debunce;differential:block -微分模块 signal d1,d0:std_logic; begin process(clk,clr) begin if clr=0then d0=0;d1=0; elsif rising_edge(clk)then d1=d0;d0=dly; end if; diff=d0 and not d1; end process; dif_out=diff;end block differ

22、ential;END a;弹跳消除电路生成元件:图3-5 弹跳消除电路生成元件3.3 顶层实体电路1、 时钟产生电路当一个系统中使用不同操作频率的脉冲波形时,最方便的方法就是利用一个自由计数器来产生各种频率。本电路中就使用三种不同频率的工作脉冲波形。它们分别是:系统时钟(它是系统部所有时钟的提供者,频率最高)、弹跳消除取样信号、键盘扫描信号和七段显示器扫描信号。在很多的电路设计中,键盘扫描信号和七段显示器扫描信号可以使用一样的时钟信号,本设计也采用此方法。该模块中的扫描信号就是取了计数器中的3个值,使用语句: SELTMP=Q(7 DOWNTO 5);此处SELTMP要预先定义为3bit的宽度

23、。2、 键盘扫描电路扫描电路的作用是用来提供键盘扫描信号的电路,扫描信号的变化的顺序依次为000-001-010-011-100-101-110-111依次的周而复始。扫描时依序分别扫描八列按键,当扫描信号为000时,扫描0这一列按键每扫描一列按键,就检查一次是否有按键按下,如果这排有按键按下,就马上停止扫描,立即进行按键编码动作,存储键码,如果没有按键按下,则继续扫描下一列。用语句SELTMP=Q(7 DOWNTO 5); SELOUT=SELTMP;即可实现键盘扫描。3、 键盘译码电路上述键盘中的按键可分为数字键和功能键。数字键主要用来输入数字,但键盘所产生的输出KIN3KIN0无法拿来直

24、接使用;另外不同的数字按键也担负不同的功能,因此必须由键盘译码电路来规划第个按键的输出形式,以便执行相应的动作。译码电路负责的工作有:a)判别是否有键按下。b)将被按下键编码成对应的ZOUT7.08位二进制编码,即用十进制数来显示按键值:KEY_CODE=ZOUT;c)把KEY_CODE送到部下一级电路,即按键码的寄存器_选择器模块。4、 按键码存储电路因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后记录下来。5、 显示电路该模块把DB3.0的值译成8位的数码管所对应的0、1、2、3、4、5、6、7、8、9,使数码管正常显示按键值。libra

25、ry ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;entity keys_test isport(clk20,clr:in std_logic; selout:out std_logic_vector(2 downto 0); notselout_0:out std_logic; key:in std_logic_vector(3 downto 0); segout:out std_logic_vector(7 downto 0);end key

26、s_test; architecture a of keys_test iscomponent debouncing -键盘扫描模块 port(key:in std_logic; clk,clr:in std_logic; dly_out:out std_logic);end component; signal clk,clk1,clk2,clk4:std_logic; signal seltmp:std_logic_vector(2 downto 0); signal key_code:std_logic_vector(7 downto 0); signal c:std_logic_vect

27、or(3 downto 0); signal db,key_in:std_logic_vector(3 downto 0); signal seg:std_logic_vector(7 downto 0);begin segout(7 downto 0)=seg; selout=seltmp; notselout_0=not seltmp(0); key_in=not key;fenpin:block signal m:integer range 0 to 10#5#; begin process(clk20) begin if clk20event and clk20=1then if m=

28、10#5# then m=0; else m=m+1; end if; end if; end process; process(m) begin if m=10#5# then clk4=1; else clk4=0; end if; end process; end block fenpin;counter:block -时钟产生电路 signal q:std_logic_vector(10 downto 0); begin process(clk4,clr) begin if clr=0 then q0); elsif clk4event and clk4=1 then q=q+1; e

29、nd if;end process; clk=q(0); clk1=q(2); clk2=q(4); seltmpkey_in(0), dly_out=c(0),clr=clr,clk=clk); u2:debouncing port map(key=key_in(1), dly_out=c(1),clr=clr,clk=clk); u3:debouncing port map(key=key_in(2), dly_out=c(2),clr=clr,clk=clk); u4:debouncing port map(key=key_in(3),dly_out=c(3),clr=clr,clk=c

30、lk);end block debounuing;key_decoder:block -键盘译码电路 signal z:std_logic_vector(6 downto 0); signal zout:std_logic_vector(7 downto 0); beginz=(not c)&seltmp; key_code=zout; -用十进制数显示 process(clk1,clr) beginif clr=0 then zout0);elsif clk1event and clk1=1 thencase z isWHEN1110000=ZOUTZOUTZOUTZOUTZOUTZOUTZ

31、OUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUT=11111111;end case;END IF;END PROCESS;END BLOCK key_decoder;REG_MULTIPLEXER:BLOCK -按键码的存储模块SIGNAL KEY_CODE1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLK2,clr)begin if clr=0 then KEY_CODE10); E

32、LSIF(CLK2EVENT AND CLK2=1)THEN if(key_code=11111111) then KEY_CODE1=KEY_CODE1; ELSE KEY_CODE1=KEY_CODE; end if; END if;END PROCESS;DB=KEY_CODE1(3 DOWNTO 0)WHEN(SELTMP(0)=0)ELSE KEY_CODE1(7 DOWNTO 4)WHEN(SELTMP(0)=1)ELSE 0000;End Block REG_MULTIPLEXER;seven_segment:block -显示模块 begin seg=00111111 when

33、 db=0000 else 00000110 when db=0001 else 01011011 when db=0010 else 01001111 when db=0011 else 01100110 when db=0100 else 01101101 when db=0101 else 01111101 when db=0110 else 00000111 when db=0111 else 01111111 when db=1000 else 01101111 when db=1001 else 01110111 when db=1010 else 01111100 when db

34、=1011 else 00111001 when db=1100 else 01011110 when db=1101 else 01111001 when db=1110 else 01110001 when db=1111 else 00000000; end block seven_segment; end a;顶层实体电路生成元件:图3-6 顶层实体电路生成元件3.4 仿真结果弹跳消除电路设计实体仿真波形图:图3-7 弹跳消除电路设计实体仿真波形图顶层设计实体仿真波形图:图3-8 顶层设计实体仿真波形图3.5 硬件验证结果将实验箱与微机和电源分别连接好。首先检测试验箱是否可以使用,经检测无误后,开通电源。根据引脚的锁定情况,将CLK20时钟接20MHZ时钟输入,KEY3.0分别接实验仪器的键盘输出KIN3.0,SELOU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论