- 系统顶层模块设计
图1 系统顶层设计电路
图2 数字钟功能设计电路
图3 秒表功能设计电路
图4 闹钟功能设计电路
1.1系统功能
该系统分为数字钟、秒表、闹钟三个功能模块,通过开关控制模块key_53,可以用两个开关控制秒表和闹钟的使用及设置界面(初始化为数字钟使用及设置界面)。数字钟的功能包括秒、分钟、小时的计时、奇数秒整点报时、以及星期显示,并将计数结果清晰稳定地显示到8位数码管上,格式为“xx(时)-xx(分)-xx(秒)”,其中,数字6和9为补段后的显示效果,并可以通过开关控制数字钟的暂停、清零以及调频功能,通过按键进行数字钟小时、分钟的校时,在计时为“xx:59:51-xx:59:59”时在奇数秒报时,前4次以500Hz报时,最后一次为1khz,同时,通过7个LED灯显示星期数。秒表的功能包括开始、暂停、清零,通过按键控制。闹钟的功能包括闹钟小时、分钟设置,以及闹钟铃声的停止。
基本功能:秒、分钟、小时的计数及进位。
拓展功能:数字钟调频、暂停、清零、奇数秒不同频率整点报时、校时、星期显示、八位数码管显示、69补段;秒表开始、暂停、清零;闹钟设置、停止。
1.2设计思路
分别设计好数字钟、秒表、闹钟三个模块的功能,然后将其封装,再设计一个开关模块,控制LPM_MUX三选一数据选择器选择三个模块的输出作为总输出,使其清晰稳定地显示到8位数码管上。下面分别概述数字钟、秒表、闹钟的设计思路。
数字钟:数字钟的时、分、秒计时功能可以用74390芯片设计模60、模24计数器并封装,实现计时和进位功能;调频、暂停功能可用74151芯片进行1Hz、500Hz、1000Hz的选择,暂停则不选择输入信号;清零功能通过开关经过消抖装置连入秒、分、时的清零端,实现清零;利用参数译码器(LPM_DECODE)组成整点报时模块,与蜂鸣器相连即可实现整点前奇数秒报时的功能;将key2,key3经过消抖装置分别与分、秒进位信号相或以后输入时、分的信号端,实现手动校时的功能。
秒表:用74390芯片设计模10、模60和模100计数器,用模60实现秒、分钟的计数;输入1kHz信号,经过模10计数器之后进位信号连接模100的信号输入模块temp_53,temp_53模块用74151设计,按键输入连接消抖模块后作为temp_53模块的输入,实现秒表的开始和暂停功能;清零功能通过开关经过消抖装置连接模60、模100的清零端,实现秒表清零。
闹钟:闹钟模块包括设置闹钟时间的set_Naozhong模块和比较闹钟设置时间与数字钟时间是否相同的compare_53模块。设置闹钟时间模块包含模60和模24计数器,按键输入连接消抖模块后作为模60和模24的信号输入,从而达到设置小时、分钟的功能;compare_53模块用7485数值比较器比较闹钟设置时间与数字钟时间是否相同,输出作为闹铃信号,从而达到闹钟功能。
- 分频模块电路设计及仿真
- 模块功能
对50mHz的时钟信号分频,输出1Hz的秒时钟、500Hz和1kHz的扫描时钟。
- 设计思路
利用74390芯片实现模2、5、10、100的计数功能,将50mHz的信号经过两次m100的分频后得到5kHz的时钟信号,接入74390的1CLKB端,该计数器以5421BCD码进行模十计数,通过1QA输出得到500Hz信号,1QD输出得到1kHz信号,将1QA接入2CLKB端,通过模5计数器进行5分频后再通过一个m100分频,即可得到1Hz信号。
- 设计结果(电路)
图5 分频功能电路
- 测试结果
图6 m100波型仿真
- 计时模块设计及仿真
- 分、秒计时模块
- 模块功能
实现模60计数的功能,1QD-1QA为个位上二进制数的输出,2QD-2QA为十位上二进制数的输出,当计数满60时清零,输出进位信号;同时设置clr信号和报时信号(报时模块介绍),当clr信号为1时清零。
- 设计思路
利用74390芯片实现模100计数器,时钟信号接入1CLKA端,1QA连接1CLKB,1QD连接2CLKA,2QA连接2CLKB,1QD-1QA为个位上二进制数的输出,2QD-2QA为十位上二进制数的输出,当个位为0000十位为0110时清零,实现模60计数的功能;74390芯片清零端高电平有效,故将十位的2QB和2QC相与后接一个输出端作为进位信号输出,再将清零信号与清零按钮输入端相或后接入1CLR和2CLR,实现当两者其中一个为1时立即清零的功能。最后将1QD-1QA和2QD-2QA分别对应接输出端ge_53[3..0]和shi_53[3..0],同时从输出端用与操作输出报时信号。
- 设计结果
图7 模60设计电路
- 仿真测试
图8 模60波形仿真
-
- 小时计时模块
- 模块功能
实现模24计数的功能,1QD-1QA为个位上二进制数的输出,2QD-2QA为十位上二进制数的输出,当计数满24时清零,输出进位信号(用于显示星期);同时输出clr信号,当clr信号为1时清零。
- 设计思路
利用74390芯片实现模24计数器,时钟信号接入1CLKA端,1QA连接1CLKB,1QD连接2CLKA,2QA连接2CLKB,1QD-1QA为个位上二进制数的输出,2QD-2QA为十位上二进制数的输出,当个位为0100十位为0010时清零,实现模24计数的功能;74390芯片清零端高电平有效,故将十位的2QB和个位的1QC相与后接一个输出端作为进位信号输出,再将清零信号与清零按钮输入端相或后接入1CLR和2CLR,实现当两者其中一个为1时立即清零的功能。最后将1QD-1QA和2QD-2QA分别对应接输出端ge_53[3..0]和shi_53[3..0]。
- 设计结果
图9 模24设计电路
- 仿真测试
图10 模24波形仿真
- 数码管动态显示模块
- 动态显示模块的设计
图11 动态显示模块功能框图
-
- 扫描模块cnt8
- 模块功能
产生dig_select和code_select模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。(为满足后续八位数码管显示功能,这里将cnt6模块改为cnt8模块)
- 设计思路
使用74390芯片,将1QD连入1CLR端,实现模8的功能。
- 设计结果(电路)
图12 扫描模块cnt8设计电路
- 仿真测试
图13 扫描模块cnt8波形仿真
-
- 位选模块dig_select
- 模块功能
在地址端的控制下,产生位选信号。
- 设计思路
选用74138三线-八线译码器,输入信号为vcc的高电平,当位选的信号输入时,输出对应的位选变为高电平,使该输出位对应的一位数码管工作。在输入信号时要保证位选信号实现000-111循环,从而让对应的8位数码管依次循环进入工作状态,利用视觉暂留达到八位数码管显示的结果。
- 设计结果
图14 dig_select设计电路
- 仿真测试
图15 dig_select波形仿真
-
- 数据选择模块code_select
- 模块功能
输入 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从 6 组数据当中选择 1 组输出。
- 设计思路
利用74151数据选择器从八组数据中的第0、1、2、3位中选择一个作为该位的输出。
- 设计结果
图16 code_select设计电路
- 仿真测试
图17 code_select波形仿真
-
- 译码模块decoder
- 模块功能
将输入的4位8421BCD码译为七段码,使数码管以十进制数子的形式显示数字,同时利用基本逻辑门进行69补段功能的实现。
- 设计思路
因7448对“6”,“9”输出不符合日常认知,故将其输出补全,补全后功能被如下。
D | C | B | A | Qa | Qb | Qc | Qd | Qe | Qf | Qg | 字形 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 2 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 3 |
0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 4 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 5 |
0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 6 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 7 |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 8 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 9 |
表1 补全“6”,“9”后7448功能表
- 设计结果
图18 decoder设计电路
- 仿真测试
图19 decoder波形仿真
-
- 动态显示模块电路图
图20 动态显示模块dispay设计电路
输入1Hz信号,经过模8计数器,输出四位二进制码信号,利用视觉暂留效果,通过dig_select模块产生位选输出,code_select在输入时、分、秒的个、十位信号后,输出段选的二进制码,最后通过decoder模块产生段选输出。
通过实验观察,结果符合预期,因此方案设计正确。
- 其他扩展功能
- 调频功能
- 模块功能
通过拨动sw3sw2sw1来控制计时速度。当sw3sw2sw1=000时,输入1Hz信号;当sw3sw2sw1=001时,输入500Hz信号;当sw3sw2sw1=010时,输入1kHz信号。
- 设计思路
选用74151芯片,三个开关经过消抖后连接输入段,1Hz、500Hz、1kHz连接D0、D1、D2,从而通过开关实现选频。
- 设计结果
图21 调频功能设计电路
- 仿真测试
图22 m100波形仿真
-
- 暂停
- 模块功能
通过开关sw3,控制闹钟的暂停和开始。
(2) 设计思路
选用74151芯片,开关经过消抖后连接输入段,1Hz连接D0,开关sw3连接高位C,这样,拨码开关上拨则选择输出D4,即无脉冲输出,从而达到暂停效果。由于暂停和调频设计思路大致相同,这里将调频和暂停一起封装为一个模块,方便调用。
- 设计结果
图23 暂停模块设计电路
- 仿真测试
由于总输入频率50mHz过大,这里进行m100仿真。
图24 m100模块波形仿真
-
- 清零
(1) 模块功能
通过开关sw0实现清零,当sw为逻辑1时,数字钟清零,为逻辑0时,数字钟恢复计时功能。
- 设计思路
对各个计数模块添加一个外界输入信号,当信号为1时实现清零计数功能,该信号与原计数模块进位信号相或接入清零端,从而实现手动清零功能。
(3) 设计结果
图25 小时清零模块设计电路
图26 分钟清零模块设计电路
图27 清零模块设计电路
(4) 仿真测试
图28 小时清零模块波形仿真
图29 分钟清零模块波形仿真
-
- 校时功能
- 模块功能
按键k1、k2从而实现分钟、小时数+1。
- 设计思路
Key2和分钟的进位信号相或后连接至时钟的进位模块,Key1和秒钟的进位进行相或后连接至分钟的进位模块。
- 设计结果
图30 校时功能设计电路
-
- 整点报时
(1) 模块功能
在计时为“xx:59:51-xx:59:59”时,奇数秒报时,前4次以500Hz报时,最后一次为1kHz。
设计思路
(2) 设计思路
利用参数译码器(LPM_DECODE)组成整点报时模块,控制秒、分计时的模块对报时模块进行秒、分钟的个位和十位的参数输入,满足分钟为59,秒为51-59计数时输出信号,前四次输出为500hz闹铃信号,最后一次为1kHz信号。
(3) 设计结果
图31 整点报时设计电路
- 仿真测试
图32 整点报时波形仿真
-
- 69补段
69补段在decoder模块的介绍中已进行设计功能、思路分析和波形仿真,这里不在赘叙。
-
- 八位显示分隔符-
- 模块功能
在八位数码管上的时、分、秒之间加上一个横杠。
- 设计思路
要加上两个-,故设计cnt8扫描8个数码管,使其能按要求同时显示不同的数值。我们可以观察到当DCBA为1111时,decoder译码器的输出刚好为0000000,所以让数据选择模块中每片74151的D2D5都接1,再对decoder改动一下可以使得当DCBA为1111时输出为0000001,,即可以实现加两条横杠的功能。
- 设计结果
前述cnt8、decoder、dig_select、code_select模块已展示过设计电路图,这里不再赘述。
- 仿真测试
前述cnt8、decoder、dig_select、code_select模块已展示过波形仿真图,这里不再赘述。
-
- 星期显示
- 模块功能
用led灯记录星期,小时计时满24进位,星期一则led0亮,星期二则led1亮,依此类推。
- 设计思路
要满足星期显示,这里我们选用74390芯片设计模7计数器,其中小时计满24小时后向模7计数器进位,进行7进制计数,并输出此时对应的计数结果。
- 设计结果:
图33 星期显示设计电路
图34 模7设计电路
图35 led模块设计电路
- 仿真测试
图36 模7波形仿真
图37 led模块波形仿真
-
- 秒表功能
(1) 模块功能
通过按键k3实现秒表的计时开始、暂停,按键k4实现秒表的清零
(2) 设计思路
根据前述数字钟设计的启发,考虑到秒表计时的小数位,这里我们输入1kHz信号将其先接入一个模10分频为100Hz信号(0.01s),再接入一个模100和两个模60计数,由数字电路与逻辑设计理论课的启发,开始暂停选用JK触发器接高电平vcc实现。
(3) 设计结果
图38 秒表总模块设计电路
图39 秒表计时模块设计电路
图40 秒表开关模块设计电路
(4) 仿真测试
考虑到输入信号50mHz、1kHz等数值过大,这里进行模100模块的波形仿真。
图41 模100波形仿真
-
- 闹钟功能
(1) 模块功能
通过按键k5、k6设置闹钟时间,当数字钟到大与闹钟相同时间后响铃,通过k7通知闹钟响铃声音的关闭。
(2) 设计思路
由设计数字钟时的灵感,参考数字钟校时电路,将开关分别与分钟的进位信号相或后连接至时钟的进位模块、与秒钟的进位进行相或后连接至分钟的进位模块,从而达到设置时间的功能,然后通过compare模块比较数字钟时间与闹钟时间是否相同。compare模块选用7485数值比较器,分别比较时、分的个、十位二进制代码,从而达到比较闹钟设置时间与数字钟时间是否相同的功能,若相同则输出逻辑1,实现响铃,持续一分钟,否则输出逻辑0。
(3) 设计结果
图42 闹钟总模块电路
图43 闹钟时间设置模块电路
图44 闹钟总比较模块compare设计电路
图45 闹钟时、分每一位二进制码比较模块small_compare设计电路
- 系统总体测试
系统总体测试结果如“附件一 评分细则及测试原始数据记录”。
- 系统设计实现过程中遇到的主要问题、解决思路和解决方案
7.1闹钟设置时间与数字钟时间比较模块compare_53的设计
- 主要问题
在进行这一模块设计时,刚开始对两个时间的比较没有头绪,无从下手。
- 解决思路
用百度查阅相关资料了解数值比较器7485后我便打开了思路,用数据比较设置时间与数字钟时间的小时和分钟是否相同,若相同,则输出闹钟信号,实现闹钟响铃。
- 解决方案
用7485芯片设计一个四位数值比较器并封装,然后将小时、分钟各自的个、十位二进制码分别进行比较,全部相同则输出逻辑1。
7.2数码管显示
- 主要问题
当进行秒表、闹钟功能的使用时,disply模块只能输出一组dig和seg信号。
- 解决思路
采用LPM_MUX进行数字钟、秒表、闹钟的deg、seg信号选择输出。
- 解决方案
将数字钟、秒表、闹钟分别封装,然后设计一个开关控制模块key_53连接LPM_MUX,对其各自的deg、seg信号进行选择输出(具体设计见顶层电路图)。
- 心得体会
本实验仅供参考,请勿抄袭。
图46 数电实验回忆