欢迎来到天天文库
浏览记录
ID:16423852
大小:1.16 MB
页数:41页
时间:2018-08-09
《按键与键盘接口设计ppt培训课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十五讲按键与键盘接口设计闫绍敏2005年5月23日按键与键盘接口设计在电子系统中,按键以及键盘是常见的输入装置。例如,按键产生的单脉冲信号作计数脉冲驱动计数器,用数字键盘置数,或用加、减按键置数。弹跳消除电路键盘接口电路①矩阵键盘的工作原理与应用②扫描信号产生电路③防弹跳及单键按下确认电路④键盘译码电路⑤按键数据存储电路弹跳消除电路设计理想按键按下、放掉按键大多是机械开关结构,在开关切换的瞬间会在接触点上出现来回弹跳的现象对于一般电器如电视等,不会有影响,但是对于灵敏度较高的电路如计数器,这种弹跳会
2、造成误动作影响电路的正确性。设计思想:将弹跳阶段闪过。具体实现(1):一旦检测到按键按下或弹起时,将输入到系统内部的修正后的按键信号置有效(“1”或“0”)并保持一定时间(大于不稳定时间)。keykey1S_clkDQkeykey1S_clk关键是采样时钟信号S_clk的周期的选择。一般地,一次按键时间是100ms,其中不稳定噪声在10ms以下,所以采样时钟周期不能小于10ms,保证在弹跳阶段只采样一次。keykey1S_clk具体实现(2):在一定时间(大于不稳定时间)内,如果连续两次检测到按键按下
3、或弹起时,则将输入到系统内部的修正后的按键信号置有效(“1”或“0”)。keykey1S_clkkeykey1S_clkkeykey1S_clk实现方案(1)实现方案(2)关键点同样是采样时钟信号S_clk的选择。由于不稳定噪声在10ms以下,所以采样时钟周期不能小于(10ms)/2,保证在弹跳阶段最多只采样二次。DQkeykey1S_clkDQSQQRD0D1在按键信号用作计数器的使能信号的应用中,修正后的按键信号key1的脉冲宽度过长,会导致计数错误(计数超过1次以上),所以要加一级微分电路,使k
4、ey1信号经过微分电路后输出脉冲宽度为1个计数脉冲周期的脉冲信号。ENCPQ微分电路key1cp为什么将key1用作使能信号,而不是用作计数脉冲?按键输入或组合电路的输出用作如下用途时要特别注意:触发器的CLEAR端触发器的PRESET端触发器的CLOCK端锁存器的控制端其它ENCPQ微分电路key1cp消抖电路keyDQDQkey1cpDIFD0D1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.S
5、TD_LOGIC_UNSIGNED.ALL;ENTITYDebunceisPORT(CP:INSTD_LOGIC;--CLOCKKey:INSTD_LOGIC;--InputSignalKey1:OUTSTD_LOGIC;--DebounceO/PDIF:OUTSTD_LOGIC--DifferentialO/P);ENDDebunce;按键弹跳消除电路VHDL程序ARCHITECTUREaOFDebunceISSIGNALS_clk,DLY,NDLY,DIFF:STD_LOGIC;--BinaryB
6、EGINFree_Counter:Block--计数器&产生扫描信号SignalQ:STD_LOGIC_VECTOR(14DOWNTO0);SignalD0:STD_LOGIC;BeginPROCESS(CP)--计数器计数BeginIFCP'EventANDCP='1'thenD0<=Q(14);Q<=Q+1;ENDIF;ENDPROCESS;S_clk<=Q(14)ANDNOTD0;--产生125HZ脉冲?--SAMPLE<=Q(1)ANDNOTD0;ENDBlockFree_Counter;De
7、bunce:Block--DebounceSIGNALD0,D1,S,R:STD_LOGIC;BeginProcess(CP)BeginIFCP'EVENTANDCP='1'THENIFS_clk='1'THEND1<=D0;D0<=KEY;--TwoStageDelayS<=D0ANDD1;--GenerateS、RR<=NOTD0ANDNOTD1;ENDIF;ENDIF;EndProcess;DLY<=RNORNDLY;--DebounceO/PNDLY<=SNORDLY;Key1<=DLY;En
8、dBlockDebunce;Differential:Block--DifferentialSignalD1,D0:STD_LOGIC;BEGINProcess(CP)BeginIFCP'EVENTANDCP='1'THEND1<=D0;D0<=DLY;--TwoStateDelayENDIF;EndProcess;DIFF<=D0ANDNOTD1;--DifferentialENDBlockDifferential;DIF<=DIFF;--Differ
此文档下载收益归作者所有