数字钟数字逻辑

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字钟的设计

一、数字钟的功能描述

(1)、计时和显示功能

采用24小时制,以十进制数字显示时、分、秒(时从00-23,分、秒从00-59)。(2)、校时功能。

当数字钟走时有偏差时,应能手动校时。

二、数字钟的设计思路

根据功能要求,整个数字钟分为计时和校时两个部分。

计时部分秒计时电路接收1Hz时基信号,进行60进制计数,计满后秒值归0,并产生1/60Hz时钟信号,分钟计时电路接收1/60Hz时钟信号,进行60进制计数,计满后秒值归0,并产生1/3600Hz时钟信号,,小时计时电路接收1/3600Hz 时钟信号,进行24小时计数,计满后小时、分、秒均归0,如此循环往复。

校时部分,采用两个瞬态按键配合实现,1号键产生单脉冲,控制数字在计时/校时/校分/校秒两种状态间转换,2号键通过控制计数使能端让时/分/秒计数器发生状态翻转发达到指定的数值。

总体原理电路如下图-1所示:

图-1数字钟的原理电路

三、采用原理图和HDL混合设计方式实现数字钟

(1)小时计时电路

小时计时电路需要24进制计数,其电路下图-2所示:

图-2 小时计时电路

该电路用两片74160(一位十进制加法计数器)采用同步连接构成24进制计数器,通过译码电路识别暂态“24”,输出低电平使计数器清零。整个计数循环为00→01→02→……→23→00→……,共有24个稳定状态。计数值采用BCD码形式,Q7-Q4表示小时的十位,Q3-Q0表示小时的个位。EN输入端当正常计数状态时接收分钟计时电路的进位输出,而在校时状态时接收校时脉冲用于控制小时值的翻转。小时计时模块的输入输出端口如下图-3所示:

图-3 小时计时电路的端口特征

(2)分钟、秒计时电路

分钟、秒计时需要60进制计数,其电路下图-4所示:

图-4 分钟计时电路

该电路用两片74160(一位十进制加法计数器)采用同步连接构成60进制计数器,通过译码电路识别暂态“59”,输出低电平使计数器清零。整个计数循环为00→01→02→……→58→59→00→……,共有60个稳定状态。计数值采用BCD 码形式,Q7-Q4表示分钟或秒的十位,Q3-Q0表示分钟或秒的个位。EN输入端当正常计数状态时接收分钟计时电路的进位输出,而在校时状态时接收校时脉冲用于控制小时值的翻转。计满进位输出端CO用于触发高一级计数器的计数动作(秒计满触发分钟的计数,分钟计满触发小时的计数)。分钟、秒计时模块的输入输出端口如下图-5所示:

图-5 分钟/秒计时电路的端口特征

(1)计时/校时的切换由模块Count_control实现,其端口特征如下图-6所示:

图-6 计时/校时切换(计数控制)端口特征

期中,Func_sel输入端接收功能脉冲输入,维护内部一个模4计数器,以此控制数字钟在计时/校时/校分/校秒四种状态间转换;Setn输入端接收校时脉冲,负脉冲有效,每收到1个校时脉冲,对应的计数单元(时单元或分单元或秒单元)计数加1;Sec_co输出由秒计数单元的进位提供,Min_co输入输出由秒计数单元的进位提供;Sec_sn、Min_en、Hour_en提供三个计数单元所需要的使能信号(由此模块的内部逻辑在前级进位输出和校时脉冲之间作二选一)。计数单元功能选择及相应信号的定义如下表-1 所示:

内部模4计数状

当前功能Sec_en取值Min_co取值Hour_en取值态Q1 Q0

00 计数高电平秒单元进位分单元进位

01 调时低电平低电平校时脉冲

10 调分低电平小时脉冲低电平

11 调秒小时脉冲低电平低电平Count_control模块的AHDL源码如下:

subdesign count_control

(

func_sel:input;

setn:input;

sec_co,min_co:input;

sec_en,min_en,hour_en:output;

)

variable

q[1..0]:dff;

begin

q[].clk=func_sel;

q[]=q[]+1;

if(q[]>3)then q[]=0;

end if;

case q[]is

when 0=>sec_en=vcc;

min_en=sec_co;

hour_en=min_co;

when 1=>sec_en=gnd;

min_en=gnd;

hour_en=!setn;

when 2=>sec_en=gnd;

min_en=!setn;

hour_en=gnd;

when 3=>sec_en=!setn;

min_en=gnd;

hour_en=gnd;

end case;

end;

以上述模块为基础,可以完成下图-1所示的顶层设计。下面采用扫描显示方式实现时分秒的小时,其扫描显示驱动电路如下图-7所示:

图-7 扫描显示驱动电路

期中,Select_disp根据模6计数器Counter6的输出将待显示的6位十进制结果分时送给七段译码器Deled以产生显示字形,Counter6的输出同时可以用来将显示结果在6个数码管上展开,只要时钟Clk_scan的频率合适,就可以看到完整的时分秒显示结果。

模块Counter6的AHDL源码如下(其中使用了状态机描述方法):subdesign counter6

(

clk:input;

q[2..0]:output;

)

variable

ss:machine of bits(q[2..0])

with states

(

s0=0,

s1=1,

s2=2,

s3=3,

s4=4,

s5=5

);

begin

ss.clk=clk;

table

ss=>ss;

s5=>s4;

s4=>s3;

s3=>s2;

相关文档
最新文档