第四章 单元电路设计 4.1 分频模块电路设计
晶体振荡器是构成数字式时钟的核心,振荡器的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟的走时准确及稳定。
石英晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且,振荡信号的频率与振荡电路中的R、C组件的数值无关。因此这种振荡电路输出的是准确度极高的信号。然后再利用分频电路,将其输出信号转变为秒信号,其组成框图如图4.1。
石英晶体 振荡电路 分频电路 秒信号 图4.1 秒信号产生电路框图
本系统使用的晶体振荡器电路给数字钟提供了一个频率稳定准确的20MHZ的方波信号,其输出至分频电路。分频电路的逻辑框图如图4.2所示。
diviclkoclk1soclk2msinst8 图4.2 分频电路模块
经分频后输出1HZ的标准秒信号oclk1s、500HZ的按键消去抖信号。该模块的时序仿真图如图4.3所示,满足设计要求。
16
图4.3 分频模块仿真图
4.2 校时控制模块电路设计
4.2.1 按键消抖
本模块用于当有按键按下时,采用软件的办法去除按键抖动。模块的实现方法是先判断是否有按键按下,如有按键按下则延时一段时间,待抖动过去之后再读行线状态,如果仍有低电平行线,则确定有按键按下,然后产生一个有按键按下的信号。该模块有一个时钟输入端口,输入时钟信号是分频出来的500HZ的时钟;有一个输入端口与行线相连,用于输入行线状态;一个输出端口,用于输出有按键按下的信号。该模块的逻辑框图如图4.4所示。
图4.4 消抖逻辑框图
该模块在这里实现的比较简单,原理是当有按键按下的时候,inkey会变成低电平,如果此时count不为30时,内部计数器计数,从0直到30,当计数到30时,okey输出底电平,同时给计数器赋值为30。由于计数脉冲为500HZ,故从有按键按下到输入信号产生大概需要60ms。而按键产生抖动的时间大约2ms到10ms,所以一旦计数完成,抖动已经过去,不会发生重键现象了,这样就去
17
除了抖动。
该模块的仿真波形如图4.5所示。
图4.5 按键消抖模块波形仿真
4.2.2 按键控制模块
按键控制模块的框图如图4.6所示。
a
b
图4.6 按键控制模块
图4.6中a图是控制分的高位,低位以及小时的高位的模块,b图是控制小时的低位的模块。inkey是由消抖模块输出的有键按下的信号,这个信号引发按键控制模块内部信号的变化。oaddr[3..0]作为输出信号,用于控制时间的调整。b图中的flag是判断小时高位是1还是2的信号,若为1,则flag信号为低电平;若为2,则flag信号为高电平。
1.分低位按键控制核心程序如下: ENTITY addram IS
PORT
(inkey : IN STD_LOGIC;
oaddr : OUT STD_LOGIC_VECTOR(3 downto 0));
END addram;
ARCHITECTURE addram_architecture OF addram IS signal count:std_logic_vector(3 downto 0); BEGIN
18
oaddr<=count; k1:process(inkey) begin
if rising_edge(inkey) then
count<=count+1; if count=9 then
count<=\
end if;
end if; end process k1;
END addram_architecture; 说明:
每按键一次,即每当inkey的上升沿到来时,count加一,当count等于9的时候,作为分的低位,将0赋值于count,在此过程中,随时将十进制数的count的值的8421码作为oaddr的信号。
对于分的高位,仅将程序中的count=9改成count=5即可; 对于小时的高位,仅将程序中的count=9改成count=2即可。 该模块的仿真波形如图4.7所示。
图4.7分低位按键控制模块波形仿真
2.小时低位按键控制核心程序如下: ENTITY addram3 IS
PORT
(inkey : IN STD_LOGIC; flag : IN STD_LOGIC;
19
相关推荐: