简易数字钟设计 数电实验考试
实验七数字钟的设计(考试)
时间:17周周三下午1点开始~!
一、要求:设计一个有60进制、24进制(或12进制)计数功能并通过译码器及七段数码
管显示的电路。
二、功能要求:在连续脉冲的触发下,秒、分为60进制,时为24进制(或12进制)计数,
并且要求有译码显示。三、步骤:
1、设计出有6位计数、译码、显示的电路图。2、阐述设计电路的工作原理。
3、按设计电路的在实验箱上构成实物。
4、进行功能测试,验证其正确性,做结论、总结。四、设备及器件
数字电路实验箱、2-5-10进制计数器、译码器、七段数码管等。
74LS90引脚图及引脚功能
74LS90计数器是一种中规模二一五进制计数器,管脚引线如图3.6-1,功能表如表3.6-1所示。
表3.6-17490功能表
复位输入R1R2S1S2HHL×HH×L××HHXL×LL×L×L××L×LL×QDQCQBQALLLLLLLLHLLH计数计数计数计数输出A.将输出QA与输入B相接,构成8421BCD码计数器;B.将输出QD与输入A相接,构成5421BCD码计数器;C.表中H为高电平、L为低电平、×为不定状态。
74LS90逻辑电路图如图3.6-1所示,它由四个主从JK触发器和一些附加门电路组成,整个电路可分两部分,其中FA触发器构成一位二进制计数器;FD、FC、FB构成异步五进制计数器,在74LS90计数器电路中,设有专用置“0”端R1、R2和置位(置“9”)端S1、S2。
74LS90具有如下的五种基本工作方式:
(1)五分频:即由FD、FC、和FB组成的异步五进制计数器工作方式。(2)十分频(8421码):将QA与CK2联接,可构成8421码十分频电路。
(3)六分频:在十分频(8421码)的基础上,将QB端接R1,QC端接R2。其计数顺序为000~101,当第六个脉冲作用后,出现状态QCQBQA=110,利用QBQC=11反馈到R1和R2的方式使电路置“0”。
(4)九分频:QA→R1、QD→R2,构成原理同六分频。
(5)十分频(5421码):将五进制计数器的输出端QD接二进制计数器的脉冲输入端CK1,即可构成5421码十分频工作方式。
此外,据功能表可知,构成上述五种工作方式时,S1、S2端最少应有一端接地;构成五分频和十分频时,R1、R2端亦必须有一端接地。
实验电路图:
扩展阅读:数电实验 数字钟
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
数字钟
简介:
这是一个以EPM7128SLC84-15为软件载体,数码管作显示器件,蜂鸣器作提示器件,拥有4个按键的电子钟。它能够正常计时,支持12小时和24小时两种计时方式,同时允许用户手动调时和设置整点报时。
在正常计时状态下,用户可以选择12或24小时的计时方式,也可以设置或取消整点报时的功能(蜂鸣器作整点报时的提示设备)。同时,数码管会有相应的显示来指示当前电子钟的设置。
当用户通过按键进入校时状态时,闪烁的一位数便是当前调节的数;用户可以通过按键选择要调的位,并对选择位的数字进行修改。(具体按键的功能说明请查阅软件编写部分三、2)
该电子钟的软件部分用VHDL编写,编译环境采用的是MAX+plusII.主要分为分频、按键防抖动、模式控制、计时校时、显示输出五个模块。(具体设计见软件编写部分四)
由于时间有限、作者才疏,纰漏在所难免,敬请老师指正。
关键字:
显示模块的刷新率:=显示模块的输入时钟频率/数码管的个数;防抖动模块的基准频率:
按键操作会产生上升沿,只有当两个上升沿发生在不同的基准周期时才被看作是两次按键;正常计时的基准频率:1Hz
时钟状态:即mode,分为正常计时(mode=0)和校时(mode=1)两个状态;12/24hour:即tm,tm=1为12小时制;tm=0为24小时制;选择位:在校时操作时,用户操作的当前位,可以是时分秒的低位或高位,从硬件显示上看,就是在校时状态下,闪烁的那一位。
硬件支持部分
硬件EPM7128SLC84-15面包板数码管蜂鸣器按键电阻数量118144
软件设计部分
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
一、设计要求
设计并制作一台能显示时、分、秒的数字钟。1、可手动校时,能分别进行时、分的校正;2、12小时(含上下午显示)、24小时计时制可手动选择;3、选做:整点报时。
4、选做:闹铃功能,当计时计到预定时间时,蜂鸣器发出闹铃信号,闹铃时间为1秒,可提前终止闹铃。
5、选做:自拟其它功能。二、程序编写方案比较与选择
方案一:
将所有功能设计好,程序结构制定完备后,将代码写入一个或几个文件里。
出发点:数字钟不是非常大的程序,该方案增大了软件的集成度与专用性,减少了处理过程中的中转信号或变量所占用的空间;方案二:
将程序模块化,各模块提供相应的接口,一个模块一个文件。
出发点:1)考虑到EPM7128SLC84-15的空间问题,有些功能可能会因其容量的限制而被撤销,如果将代码一次性写在一个文件里,在删除某些功能时,必将会牵扯到一些共用信号或变量的赋值问题。
2)模块化的程序便于调试
比较:方案一适合于程序设计完成后,(使用专用芯片)投入批量生产前的集成阶段;方案二更适合于开发、编写阶段;故选择方案二。三、总体设计
1.总体思路
1)软件功能设计
1)实现基本功能正常计时,手动校时(能分别进行时、分的校正)2)实现基本附加功能12/24小时制的手动选择,采用12小时制时有上下
午标记;
3)根据资源占用状况选择实现选择功能整点报时,闹铃等2)对外设的说明:
1)8个数码管
左一指示整点报时是否设置,若已设置则中间的一横会亮,否则不亮;左二指示12小时制下的上下午,以字母A、P表示剩下的六个从左向右依次为时分秒的高低位2)4个按键
Key1:模式选择按键,使时钟状态在正常计时和校时状态之间变换;Key2:功能1:校时状态下,选择用户想要操作的位;功能2:正常计时状态下,设置或取消整点报时共能;Key3:校时状态下,按一次给当前选择位的数字加一;Key4:在正常计时状态下,选择12/24小时制;3)一个蜂鸣器
在整点报时功能设置的状态下,在整点时刻鸣叫一秒。
3)程序结构设计
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
Clk分频模块Clk1Clk2Clk0按键输入防抖动模块脉冲时间处理模块显示待显示内容模块显示输出
2.细化模块
1)总输入输出:
Input:keyx(x=1~4)功能在上一小节中已说明
output:时分复用的选择信号SEL[7..0]:选择对哪个数码管进行控制
段选择信号F[7..0]控制某数码管的那些段显亮。
2)分频模块细化:三个模块(fenpinx)分别产生ck0,ck1,ck2,用途如上;3)防抖动模块细化:在每个按键后加一个防抖动模块(fangdoudong)(一共4个);4)时间处理模块细化:模式控制(modectrl)和计时校时(clock_mode0);5)显示模块:提供相应借口,输出块选择、段选择信号。
四、
具体模块设计
1.分频模块:(EPM7128SLC84-15的时钟频率为1Mhz)
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
FENPIN0:将clk(1MHz)分频得到ck0(1kHz),用作显示模块的刷新率;FENPIN1:将ck0(1kHz)分频得到ck1(20Hz),用作防抖动模块的基准频率;FENPIN2:将ck1(20Hz)分频得到ck2(1Hz),用作正常计时的基准频率;Input:待分频信号output:分频后的信号(fi>fo)
基本原理:通过对输入信号上升沿个数的计数,周期性地翻转输出信号,从而实现对输入信号的分频。程序代码如下:
FENPIN0libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--必要的库文件
entityfenpin0is
port(clk:instd_logic;--输入cpo:outstd_logic);--输出端口end;
architectureaoffenpin0is
signalcp:std_logic;--针对输出的信号begin
process(clk)
variablei1:integerrange0to50;
variablei2:integerrange0to10;--i1max*i2max来计算多少个原周期就是半个新周期begin
if(clk"eventandclk="1")theni1:=i1+1;if(i1=50)theni1:=0;i2:=i2+1;if(i2=10)theni2:=0;cp数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
port(clk:instd_logic;--待分频的输入cpo:outstd_logic);--输出端口end;
architectureaoffenpin1is
signalcp:std_logic;--针对输出的信号begin
process(clk)
variablei:integerrange0to24;begin
if(clk"eventandclk="1")thenif(i=24)theni:=0;
cp数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
endif;
endprocess;cpo数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
Input:kx:按键x产生的脉冲;
Output:mode-输出对时钟状态(计时or校时)的选择信号0为计时,1为校时tm-输出选择12/24制式的信号;0为24hour;1为12hourock-输出选择整点报时的选择信号;0-无整点报时;1-有整点报时程序代码如下:libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;--必要的库文件
entitymodectrlis
port(k1:instd_logic;--按键1产生的脉冲输入k4:instd_logic;--按键4产生的脉冲输入k2:instd_logic;--按键2产生的脉冲输入k1out,k4out:outintegerrange0to1;
--k1out控制计时校时的模式选择;k4out控制12/24hour制式选择ock:outstd_logic--正点报时选择);
endmodectrl;
architectureaofmodectrlis
signalk1o,k4o:integerrange0to1;--针对k1out,k4out的信号signalko:std_logic:="0";--针对ock的信号begin
p1:--k1按一次k1out在0,1之间变一次process(k1)begin
if(k1"eventandk1="1")thenk1o数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
process(k4)begin
if(k4"eventandk4="1")thencasek4oiswhen0=>k4ok4o数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
所以在校时状态下,将p1的时钟频率改为1kHz,这个频率远远高于手动按键的极限频率,所以可以及时将改动的时间信号传递给显示模块,使得显示的数字连续变动。并且1kHz是显示模块的刷新率控制信号,直接拿来使用避免了在此分频,减少了模块的资源占用量。2)对12/24小时制的说明
12小时制:AM00:00:00---AM11:59:59;PM12:00:00---PM11:59:5924小时制:00:00:00---23:59:59注:12小时制的一个细节:晚上的12点称0点,且为am;中午的12点是12点pm。
程序代码如下:libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--调用需要的库文件
entityclock_mode0is--计时与校时模块port(ck,ck1k:instd_logic;
--ck:f=1Hz用于正常计时ck1k:f=1kHz高于手动按键的极限频率,使得时间在进行校准时--变化连续
k2,k3:instd_logic;
--k2:校时选位按键,可依次选择秒、分、时的高低位,k3:在校时进程中对当前选择位加1mode:inintegerrange0to1;--时钟处于什么状态0:计时;1:校时
tm:inintegerrange0to1;--计时采取的是哪种方式1:12hour;0:24hourock:instd_logic;--整点报时是否设置1-设置状态0-取消状态
hourh:outintegerrange0to2;--小时高位hourl:outintegerrange0to9;--小时低位minh:outintegerrange0to5;--分钟高位minl:outintegerrange0to9;--分钟低位sech:outintegerrange0to5;--秒高位secl:outintegerrange0to9;--秒低位
bee:outstd_logic;--蜂鸣器输出:1-鸣叫;0-不鸣叫
ampm:outstd_logic;--上下午指示输出:1-下午;0-上午--下面的输出在本模块中为校时设计shan:outstd_logic;
--(通知显示模块)选择位是否闪烁:不闪烁状态-赋值为"1";闪烁状态-赋值为ck;position:outintegerrange0to5--(通知显示模块)现在对哪一位进行校准);
--shan使得时钟处于校时状态时选择位闪烁end;
architectureaofclock_mode0issignalhh1,hh2:integerrange0to2;signalhl1,hl2:integerrange0to9;
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
signalmh1,mh2:integerrange0to5;signalml1,ml2:integerrange0to9;signalsh1,sh2:integerrange0to5;signalsl1,sl2:integerrange0to9;--对上面12个信号的说明
--hh:时高位hl:时低位mh:分高位ml:分低位sh:秒高位sl:秒低位--后缀:1-该信号为计时进程设计2-该信号为校时进程设计signalclk:std_logic;--计时进程的时钟signalap:std_logic;--上下午指示信号
signalpos:integerrange0to5;--选择位指示信号
begin
--对以下5个进程的说明:--p0o:对p1的时钟clk赋值
--p0:判断当前时钟状态并对闪烁指示输出shan赋值
--p1:整个模块(clock_mode0)的核心;既是正常计时进程,又负责模块输出(正确的信号to--输出端口)
--p2:在校时状态下,判断选位信号k2是否有上升沿以对选位输出position作修改--p3:校时进程p0o:processbegin
casemodeis
when0=>clkclk数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
when1=>
hh1数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
when3=>hourh数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
minl数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
if(ml2=9)thenml2数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
elsehh2casehh2iswhen0=>hh2hh2null;endcase;endcase;--结束对时低位的判断endcase;--结束对选择位的判断endif;--endthecontrolof"mode=1"endif;--endthecontrolofk3endprocess;enda;
5.显示模块
Input:ck0:刷新率控制信号(刷新率=fck0/数码管的个数=1000/8=125Hz稳定)num0num5对应秒低位、秒高位、分低位、分高位、时低位、时高位信号;pos[2..0]为校时的选择位输入tm为12(1)/24(0)小时制选择输入;shan为选择位闪烁控制信号;ock为整点报时设置与(1)否(0)输入;ampm:上(0)下(1)午状态输入;output:F为数码管段选择信号;SEL为时分复用的选择信号。程序代码如下:libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;--必要的库文件
entitydisplay1isport(clk:inbit;
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
num5:inintegerrange0to2;--hourhighnum4:inintegerrange0to9;--hourlownum3:inintegerrange0to5;--minutehignnum2:inintegerrange0to9;--minutelownum1:inintegerrange0to5;--secondhighnum0:inintegerrange0to9;--secondlowpos:inintegerrange0to5;--校时状态下的选择位tm:inintegerrange0to1;--12(1)or24(0)制式指示shan:instd_logic;--闪烁指示ock:instd_logic;--正点报时是(1)否(0)设置指示ampm:instd_logic;--上(0)下(1)午指示f:outstd_logic_vector(7downto0);--控制一个数码管哪段亮的段选择输出sel:outstd_logic_vector(7downto0)--时分复用的选择信号);end;
architecturebofdisplay1is
functionnumtodis(num:inintegerrange0to9)returnstd_logic_vectoris--译码函数variablefig:std_logic_vector(7downto0);begin
casenumis
WHEN0=>fig:="01111110";WHEN1=>fig:="00011000";WHEN2=>fig:="01101101";WHEN3=>fig:="00111101";WHEN4=>fig:="00011011";WHEN5=>fig:="00110111";WHEN6=>fig:="01110111";WHEN7=>fig:="00011100";WHEN8=>fig:="01111111";WHEN9=>fig:="00111111";endcase;--完成0-9的译码return(fig);endnumtodis;
signali:integerrange0to7;begin
p1:--以一个变量i来指示现在对那个数码管进行操作process(clk)begin
if(clk"eventandclk="1")theni数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
p2:process
variabledis:std_logic_vector(7downto0);--针对段选择输出的变量variablenum:integerrange0to9;--用来提取时分秒输入的中间变量begin
CASEiIS
WHEN0=>selselselselselselselseldis:=numtodis(1);when2=>dis:=numtodis(2);when3=>dis:=numtodis(3);when4=>dis:=numtodis(4);when5=>dis:=numtodis(5);when6=>dis:=numtodis(6);when7=>dis:=numtodis(7);when8=>dis:=numtodis(8);when9=>dis:=numtodis(9);
数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
endcase;endif;
if(shan="0")thenif(pos=i)thendis:="00000000";endif;endif;
--在校时状态下shan是1Hz的方波
--对于选择位指示的数码管shan为1时亮,shan为0则不亮
if(i=2ori=4)thendis(7):="1";
endif;--只有用来显示分低位和时低位的数码管的小数点要亮,用来区分时分秒
f数字电路与逻辑设计综合实验题目数字钟0213106班代闻19号
感谢老师孜孜不倦的教诲!
友情提示:本文中关于《简易数字钟设计 数电实验考试》给出的范例仅供您参考拓展思维使用,简易数字钟设计 数电实验考试:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。