您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 4X4阵列键盘键信号检测电路设计
4X4阵列键盘显示电路设计VCCCLKINPUTVCCA[3..0]INPUTB[3..0]OUTPUTRR[6..0]OUTPUTCLKA[3..0]B[3..0]R[3..0]K4X4instA[3..0]LED7S[6..0]DECL7Sinst4CycloneIIinclk0frequency:20.000MHzOperationMode:NormalClkRatioPh(dg)DC(%)c01/20.0050.00inclk0c0PLL20inst1upcounterclockq[15..0]coutCNT8inst2•考查题目:(1-4选择两题)•1、模拟路灯控制系统的设计;•2、音乐自动播放系统的设计;•3、4*4键盘扫描、显示系统的设计(包含消抖电路);•4、VGA动画图像显示控制电路设计;•5、开发板上FPGA芯片引脚对应关系(必做)。•要求:(1)写出设计思路;•(2)写出设计方案(可以多考虑几种方案);•(3)写出程序及仿真的波形;•(4)讨论设计结果及写出设计后的收获。•交考查卷子的时间:2013年元月10日。•过期不候!实验与设计一、4*4键盘的原理:实验与设计•1、每一个按键就是一个开关电路;•2、按下时为0状态;•3、未按下为1状态;•4、A是列,B是行A0A1A2A3B3001111110101111101201111011301110111B2410111110510111101610111011710110111B1811011110911011101A11011011B11010111B0C11101110D11101101E11101011F11100111A0A1A2A3实验与设计实验原理:实验与设计4X4键盘扫描程序设计:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;--------------------------------------------------------------------------------------------------------------------------entityk44isport(clk:instd_logic;--扫描时钟频率不宜过高,一般在1KHz以下A:instd_logic_vector(3downto0);--读入列码B:outstd_logic_vector(3downto0);--输出行码,扫描信号R:outstd_logic_vector(3downto0);--输出键值endentity;接下页architectureoneofk44issignalBA:std_logic_vector(7downto0);signalE:std_logic_vector(3downto0);--行扫描信号signalC:std_logic_vector(1downto0);--用于计数产生扫描信号beginBA=E&A;B=E;process(A)beginifrising_edge(clk)thenc=c+1;casecis--产生行扫描信号when0=E=“0111”;--P07口为低电平,P06~P04均为高电平when1=E=“1011”;--P06口为低电平,P07,P05,P04均为高电平when2=E=“1101”;--P05口为低电平,P07,P06,P04均为高电平when3=E=“1110”;--P04口为低电平,P07~P05均为高电平whenothers=NULL;endcase;实验与设计casebais--按键定义when“0111_1110”=R=“0000”;when“0111_1101”=R=“0001”;when“0111_1011”=R=“0010”;when“0111_0111”=R=“0011”;when“1011_1110”=R=“1000”;when“1011_1110”=R=“0101”;when“1011_1011”=R=“0110”;when“1011_0111”=R=“0111”;when“1101_1110”=R=“1000”;when“1101_1101”=R=“1001”;when“1101_1011”=R=“1010”;when“1101_0111”=R=“1011”;when“1110_1110”=R=“1100”;when“1110_1110”=R=“1101”;when“1110_1011”=R=“1110”;when“1110_0111”=R=“1111”;whenothers=NULL;endcase;endif;endprocess;end;接上页VerilogHDL语言程序:moduleK4X4(CLK,A,B,R);inputCLK;input[3:0]A;output[3:0]B;output[3:0]R;reg[1:0]C;reg[3:0]R,B;always@(posedgeCLK)beginC=C+1;case(C)0:B=4'B0111;1:B=4'B1011;2:B=4'B1101;3:B=4'B1110;endcasecase({B,A})8'B0111_1110:R=4'H0;8'B0111_1101:R=4'H1;8'B0111_1011:R=4'H2;8'B0111_0111:R=4'H3;8'B1011_1110:R=4'H4;8'B1011_1101:R=4'H5;8'B1011_1011:R=4'H6;8'B1011_0111:R=4'H7;8'B1101_1110:R=4'H8;8'B1101_1101:R=4'H9;8'B1101_1011:R=4'HA;8'B1101_0111:R=4'HB;8'B1110_1110:R=4'HC;8'B1110_1101:R=4'HD;8'B1110_1011:R=4'HE;8'B1110_0111:R=4'HF;endcaseendendmodule二、显示程序(七段显示译码器):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECL7SISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDECL7SISBEGINPROCESS(A)BEGINCASEAISWHEN0000=LED7S=0111111;WHEN0001=LED7S=0000110;WHEN0010=LED7S=1011011;WHEN0011=LED7S=1001111;WHEN0100=LED7S=1100110;WHEN0101=LED7S=1101101;WHEN0110=LED7S=1111101;WHEN0111=LED7S=0000111;WHEN1000=LED7S=1111111;WHEN1001=LED7S=1101111;WHEN1010=LED7S=1110111;WHEN1011=LED7S=1111100;WHEN1100=LED7S=0111001;WHEN1101=LED7S=1011110;WHEN1110=LED7S=1111001;WHEN1111=LED7S=1110001;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;END;实验与设计三、分频器_十六位计数器程序(LPM):LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYlpm;USElpm.all;ENTITYCNT8ISPORT(clock:INSTD_LOGIC;cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCNT8;实验与设计ARCHITECTURESYNOFcnt8ISSIGNALsub_wire0:STD_LOGIC;SIGNALsub_wire1:STD_LOGIC_VECTOR(15DOWNTO0);COMPONENTlpm_counterGENERIC(lpm_direction:STRING;lpm_port_updown:STRING;lpm_type:STRING;lpm_width:NATURAL);PORT(clock:INSTD_LOGIC;cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCOMPONENT;BEGIN实验与设计BEGINcout=sub_wire0;q=sub_wire1(15DOWNTO0);lpm_counter_component:lpm_counterGENERICMAP(lpm_direction=UP,lpm_port_updown=PORT_UNUSED,lpm_type=LPM_COUNTER,lpm_width=16)PORTMAP(clock=clock,cout=sub_wire0,q=sub_wire1);ENDSYN;实验与设计四、设计扩展(1)实验任务1:修改扫描程序,使第二个case语句成为一个独立的有时钟敏感信号的过程结构,再根据以前的方法使程序自动生成ROM替代模块(要检测键功能是否改变);或干脆例化进一个LPM_ROM以取代第二个case语句。检测其功能和资源的变化情况。(2)实验任务2:利用此实验设计一个加、减、乘法计算器。(3)实验任务3:为键盘电路加上去抖动电路模块。(4)实验任务4:扫描程序中,为何将两个case语句包括于IF语句中?这会导致怎样的硬件结果?用仿真波形说明之。•4.2.1密码锁输入电路的设计•图4.2是电子密码锁方案一的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个3×4矩阵式键盘组成。图4.2密码锁的输入电路框图弹跳消除电路键盘译码电路按键数据缓存器123456789*0#键盘扫描电路工作时钟脉冲信号键盘输入按键数据键盘扫描信号•1.矩阵式键盘的工作原理•矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。图4.3是一个3×4矩阵式键盘的面板配置图,其中数字0~9作为密码数字输入按键,*作为“上锁”功能按键,#作为“解锁/清除”功能按键。图4.33×4矩阵式键盘的面板配置123456789*0#键盘扫描信号KY3(00)1110KY2(01)1101KY1(10)1011KY0(11)0111KX2KX1KX0经提升电阻至VCC表4.1按键位置与数码关系•2.密码锁输入电路各主要功能模块的设计•1)时序产生电路•本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。•2)键盘扫描电路•扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3~KY0)的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。•3)弹跳消除电路•由于本设计中采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。•从图4.4中可以观察出弹跳现象产生的原因,虽然只是按下按键一次然后放掉,然而实际产生的按键信号却不止跳动一次,经过取样信号的检查后,将会造成误判断,
本文标题:4X4阵列键盘键信号检测电路设计
链接地址:https://www.777doc.com/doc-3332281 .html