。
KEYR3..0 KEYC2..0 经上拉电阻后接VCC 4 7 0 5 8 * 6 8 # 键盘扫描与其对应的键值的关系(如下表1-1)
KEYR3..0 0111 KEYR2..0 011 101 110 1011 011 101 110 1101 011 101 110 1110
011 101 对应的按键 1 2 3 4 5 6 7 8 9 0 *
110
# 2.2.2 时序产生电路
在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。
系统所需要的时钟由计数器来提供,计数器是用来对输入脉冲的数目进行计数的时序逻辑部件。本次设计就是采用自由计数器来提供所须的频率。
计数器的分类
按计数脉冲的输入方式分:同步计数和异步计数。异步计数器,计数脉冲仅输入到最低位触发器的时钟输入端,同步计数器则同时输入到所有触发器的时钟输入端。后者计数速度高,因而得到广泛应用。 计数器的基本特征——模
计数器电路的主要部分由一组触发器构成。一组n个触发器共有2t1个状态。实际64计数器可能只需要K个状态,则K<211。随着输入脉冲数目的变化,计数器经历预先设定的K个不同的状态So,Sl,?,SK—l序列。在Sx—l状态下,再输入一个计数脉冲,计数器就返回到马状态,形成一个工作周期。
在计数器的整个工作周期内,从初始状态开始并返回到初始状态以前的全部状态数,称为计数器的模。例如,若计数器的全部状态数为K,就称为模K计数器。 模K加法计数器的状态转换可用下式描述: Si41一Si十1 (d K)
其中mod为modulo(模)的缩写。计数器的模是计数器的重要特征。实际上,各种不同进位制的计数器可用其模来命名,例如4位二进制计数器可作为十六进制计数器使用,于是可称为模16计数器。通过设计电路改变模的值,可以得到十六以内的任意进制计数器,如后述。可编程计数器的使用方法实际上是通过软件程序改变计数器的模
2.2.4 键盘消抖电路
按键消抖动电路(又叫弹跳消除电路) 即顶层V佃L文本的debounuin:block模块。因为按键大多是机械式开关结构,在开关切换的瞬间会在接触点弹性簧片
间出现若干个随机的来回弹跳的抖动现象,抖动信号的周期大致在20—40M,对于激活关闭一般电器(如电灯)并不会有何影响,但对于灵敏度较高的数字逻辑电路系统,却有可能产生误动作而出错。为此需要设置与某一时钟同步的按键消抖动电路,且必须合理地选择同步时钟的工作频率,达到既要照顾响应按键动作的精度(及时快速响应),又要可靠地消抖动(单次输出,而不是两次或多次输出,那样依然有抖动),但是,这两个要求是互相矛盾的,要在调试中兼顾。
若同步时钟的工作频率不合适,弹跳现象就不能很好消除,。及时快速响应的指标可能很高,但消抖动效果却不理想。在开关切换的瞬间会在接解点出现来回弹跳的现象,其现象可用图2—3表示:由图可见,虽然只是按了一次键,实际产生的按键信号却不只跳动一次,经过取样信号的检查后,将会造成误码判,认为是按了两次键。如果调整取样频率,可以发现抖现象得到了改善。
按键信号
取样信号
取样结果
图2—4
调整取样频率后的结果为:
按键信号
取样信号
取样结果
图2—5
因此必须加上弹跳消除电路,且仔细选择同步时钟的工作频率,以避免误
操作信号的发生。注意,弹跳消除电路所使用脉冲信号的频率必须比其他电路使用的脉冲信号的频率更高;通常将扫描电路或LED显示电路的工作频率定在24Ik左右,两者的工作频率是通常的4倍或高。
2.2.5 键盘译码电路
即顶层VHDL文本的 KEYBOARD_DEC1模块。键盘中的按键分为数字键和功能键,键盘参数如表2—3所示。数字键主要用来输入数字,但从表中发现,键盘所产生的输出的四个状态 0111、1011、1101、1110 无法拿来直接使用;另外不同的数字按键也担负不同的功能,因此必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。针对有表可以对照的电路设计,只要使用CASE—WHEN或WHEN_ELSE语句,便可轻松完成设计,详见顶层VHDL文本的key decoder:block模块的描述。
从前面所述的键盘扫描电路的输出可以看出,扫描得到的信号规律性不强,例如数字键主要用来输入数字,但键盘扫描输出无法拿来直接使用,必须对其进行译码才能使用。
如表所示,只要使用case?when 或when ? else 语句,便可完成设计。
表2—3
KEYR3..0 0111 KEYR2..0 011 101 110 1011 011 101 110 1101 011 101 110
1 2 3 4 5 6 7 8 9 对应按键 译码输出 0001 0010 0011 0100 0101 0110 0111 1000 1001 功能 数码输入 数码输入 数码输入 数码输入 数码输入 数码输入 数码输入 数码输入 数码输入
1110 011 101 110 0 * # 0100 0000 0001 数码输入 数码输入
2.2.6按键存储电路
因为每次按键都会产生新的数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将键盘扫描译码后的结果记录下来。这一功能可以用移位寄存器来实现。
寄存器是一种常用的时序逻辑电路。有趣的是,这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。 1、移位寄存器分类
移位寄存器按输入输出方式分类:常见的移位寄存器的下列四种: 串行输入/串行输出(SISO) 串行输入/并行输出(SIPO) 并行输入/串行输出(PISO) 并行输入/并行输出(PIPO)
2 、单向串行移位寄存器(用D触发器组成的移位寄存器)的内部结构如下:
C
DiQDQ1RSQDQ2RSQDQ3RSQDQ4RS串行 输CP入
图2—6
3、移位寄存器的工作原理