第一篇:多功能数字钟设计
课程设计任务书
课程设计名称学生姓名专业班级设计题目多功能数字钟设计
一、课程设计目的1、综合运用EDA技术,独立完成一个课题的设计,考察运用所学知识,解决实际问题的能力;
2、结合理论知识,考察阅读参考资料、文献、手册的能力;
3、进一步熟悉EDA技术的开发流程,掌握文件编辑、编译、仿真、下载验证等环节的实现方法和
应用技巧;
4、锻炼撰写研究报告、研究论文的能力;
5、通过本实践环节,培养科学和严谨的工作作风。
二、设计内容、技术条件和要求
l、能进行正常的时、分、秒计时功能,分别由6个数码显示24小时、60分钟的计数器显示。
2、能利用实验系统上的按钮实现“校时”、“校分”功能;
(1)按下“SA”键时,计时器迅速递增,并按24小时循环;
(2)按下“SB”键时,计时器迅速递增,并按59分钟循环,并向“时”进位;
(3)按下“SC”键时,秒清零;抖动的,必须对其消抖处理。
3、能利用扬声器做整点报时:
(1)当计时到达59’50”时开始报时,频率可为500Hz;
计满23小时后回零;计满59分钟后回零。
(2)到达59’59”时为最后一声整点报时,整点报时的频率可定为lKHz。
4定时闹钟功能
5、用层次化设计方法设计该电路,用硬件描述语言编写各个功能模块。
6、报时功能。报时功能用功能仿真的仿真验证,可通过观察有关波形确认电路设计是否正确。
三、时间进度安排
1周:(1)完成设计准备,确定实施方案;(2)完成电路文件的输入和编译;(4)完成功能仿真。
2周:(1)完成文件至器件的下载,并进行硬件验证;(2)撰写设计说明书。
四、主要参考文献
(1)谭会生、瞿遂春,《EDA技术综合应用实例与分析》,西安电子科技大学出版社,2004
(2)曹昕燕、周凤臣等,《EDA技术实验与课程设计》,清华大学出版社,2006
指导教师签字:2012年9月1日
第二篇:多功能数字钟
课程设计任务书
学生姓名:专业班级:指导教师:工作单位:题目:多功能数字钟的设计与实现初始条件:
本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等,也可以使用单片机系统构建多功能数字钟。用数码管显示时间计数值。
要求完成的主要任务:(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:1周。
2、技术要求:
1)设计一个数字钟。要求用六位数码管显示时间,格式为00:00:00。
2)具有60进制和24进制(或12进制)计数功能,秒、分为60进制计数,时为24进制(或12进制)计数。
3)有译码、七段数码显示功能,能显示时、分、秒计时的结果。
4)设计提供连续触发脉冲的脉冲信号发生器,5)具有校时单元、闹钟单元和整点报时单元。
6)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。
3、查阅至少5篇参考文献。按《******大学课程设计工作规范》要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。
时间安排:
1、年月
2、年月日,方案选择和电路设计。
3、年月日,电路调试和设计说明书撰写。
4、年月
指导教师签名:年月日 系主任(或责任教师)签名:年月日
第三篇:多功能数字钟课程设计
多功能数字钟
朱安烟
(安阳师范学院 物电学院, 河南 安阳 455002)
摘要:时钟相比具有更高的准确性和直观性
因此得到了更加广泛的使用。数字钟从原理上讲是一种典型的数字电路,其中
本设计采用六位LED
24小时计时方式根据数码管动态显示原理来进行显示。用晶振产生振荡脉加以分频得到所需的钟表秒脉冲,利用纯数字电路,实现数字电子时钟功能,时间重置功能。此次数字钟的理图设计,PCB图的制作主要是基于altium designer软件,利用proteus7.7软件进行仿真,最终本设计实现24小时的时钟计时、时间重置功能。
关键词:LED数码管
时序电路
逻辑电路
时钟
校时引言
仅向。方案论证:
2.1方案一
由于是数字钟的设计,可以用单片机AT89C51来实现计数功能,相对于纯数字电路来讲它具有功耗低、体积小、使用方便等优点。但在大二下半学期初期,对单片机方面的内容知识还不够完善,加上用单片机为核心来做数字钟还需做编程,对自身来说又是一难点。不过此法可以待以后,学习知识完善后再考虑。
2.2 方案二
继而考虑到用原先学过的纯数字电路来做,以74Ls160来做为计数的芯片,用六片分别实现 数字钟的小时、分、秒、的计数,并用晶振加以分频产生数字钟所需的秒脉冲。
从以上两种方案,很容易看出,采用方案二,用此法做即可以复习回顾早期学习的数电模电知识,又避免了单片机知识不足的问题,故用此法。结果与讨论
3.1.1数字钟主要计数芯片为74ls160其引脚图如下:
这种同步可预置十进计数器是由四个D型触发器和若干个门电路构成,内部有超前进位,具有计数、置数、禁止、直接(异步)清零等功能。对所有触发器同时加上时钟,使得当计数使能输入和内部门发出指令时输出变化彼此协调一致而实现同步工作。这种工作方式消除了非同步(脉冲时钟)计数器中常有的输出计数尖峰。缓冲时钟输入将在时钟输入上升沿触发四个触发器。这种计数器是可全编程的,即输出可预置到任何电平。当预置是同步时,在置数输入上将建立一低电平,禁止计数,并在下一个时钟之后不管使能输入是何电平,输出都与建立数据一致。清除是异步的(直接清零),不管时钟输入、置数输入、使能输入为何电平,清除输入端的低电平把所有四个触发器的输出直接置为低电平。超前进位电路无须另加门,即可级联出n位同步应用的计数器。它是借助于两个计数使能输入和一个动态进位输出来实现的。两个计数使能输入(ENP和ENT)计数时必须是高电平,且输入ENT必须正反馈,以便使能动态进位输出。因而被使能的动态进位输出将产生一个高电平输出脉冲,其宽度近似等于QA输出高电平。此高电平溢出进位脉冲可用来使能其后的各个串联级。使能ENP和ENT输入的跳变不受时钟输入的影响。电路有全独立的时钟电路。改变工作模式的控制输入(使能ENP、ENT或清零)纵使发生变化,直到时钟发生为止,都没有什么影响。计数器的功能(不管使能、不使能、置数或计数)完全由稳态建立时间和保持时间所要求的条件来决定。
管脚说明: CLR:清零复位端
当输入为低电平时有效
CLK:时钟信号接收端
A~D:读入
QA~QD:输出
ENT、ENP置一时芯片正常工作
LOAD:置数端
RCO:信号输出端
GND:接地
Vcc:接高
工作方式:
3.1.2 7段LED数码管
3.1.3 32.768KHZ晶振
32.768KHZ是一个标准的频率,晶振频率的应用主要有以下几个方面的参数:尺寸、负载电容、频率偏差、应用范围。按尺寸外形来分主要分为插件和贴片的;插件的主要有2*
6、3*
8、49s 等,贴片的就有很多种了,跟据各公司的设计可的型号有很多,例如:日本KDS晶振就有49SMD、DST310S、SM—14J、DST520、DST410S等。
3.1.4 CD4060分频器
CD4060由一振荡器和14级二进制串行计数器位组成,振荡器的结构可以是RC或晶振电路,CR为高电平时,计数器清零且振荡器使用无效。所有的计数器位均为主从触发器。在CP1(和CP0)的下降沿计数器以二进制进行计数。在时钟脉冲线上使用斯密特触发器对时钟上升和下降时间无限制 引脚功能:
/CP1:时钟输入端
/CP0:时钟输出端
/CP0:反相时钟输出端
Q4~Q10,Q12~Q14:计数器输出端
/Q14:第14级计数器反相输出端
VDD:电源正
VSS:电源负
CR:清零端 3.1.5 74ls48
功能介绍:
74LS48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya~Yg)端外,7448还引入了灯测试输入端(LT)和动态灭零输入端(RBI),以及既有输入功能又有输出功能的消隐输入/动态灭零输出(BI/RBO)端。
由7448真值表可获知7448所具有的逻辑功能:
(1)7段译码功能(LT=1,RBI=1)
在灯测试输入端(LT)和动态灭零输入端(RBI)都接无效电平时,输入DCBA经7448译码,输出高电平有效的7段字符显示器的驱动信号,显示相应字符。除DCBA = 0000外,RBI也可以接低电平,见表1中1~16行。
(2)消隐功能(BI=0)
此时BI/RBO端作为输入端,该端输入低电平信号时,表1倒数第3行,无论LT 和RBI输入什么电平信号,不管输入DCBA为什么状态,输出全为“0”,7段显示器熄灭。该功能主要用于多显示器的动态显示。
(3)灯测试功能(LT = 0)
此时BI/RBO端作为输出端,端输入低电平信号时,表1最后一行,与 及DCBA输入无关,输出全为“1”,显示器7个字段都点亮。该功能用于7段显示器测试,判别是否有损坏的字段。
(4)动态灭零功能(LT=1,RBI=1)
此时BI/RBO端也作为输出端,LT 端输入高电平信号,RBI 端输入低电平信号,若此时DCBA = 0000,表1倒数第2行,输出全为“0”,显示器熄灭,不显示这个零。DCBA≠0,则对显示无影响。该功能主要用于多个7段显示器同时显示时熄灭高位的零。
3.2 原理设计
整体电路设计方案:
3.2.1 振荡电路设计
振荡电路由振荡器产生的脉冲,振荡器是数字钟的核心。振荡器的稳定度及频率的精度决定了数字钟的精确程度,次处有555定时器和晶振两种产生秒脉冲的方法:555振荡器做振荡源一般用于精确度要求不高的场合,由门电路组成的多谐振荡器的振荡周期不仅与时间常数RC有关,而且还取决于门电路的阈值电压VTH,由于VTH容易受到温度、电源电压及干扰的影响,因此频率稳定性较差,只能用于对频率稳定性要求不高的场合。考虑到振荡频率的精确度与稳定性固采用晶振做为振荡源来实现振荡电路,得时钟脉冲更稳定,时间走的更准37.268KHz晶振 通过cd4060分频器进行十四分频得到0.5s的脉冲信号,再进行一个SN74LS74进行二分频得到所需的秒脉冲信号:
3.2.2 校时电路设计
根据电路设计所知需要在分处和小时处需要校时,分别在分和时个位向十位进位处各加一开关,另一端接地并且在与地之间接100pf电容为防止按键抖动。
电路设计如下:
当开关处于自然位置时分十位clk端所接为高电平,当开关按下时则引入一低电平实其clk端有一个下降沿脉冲接入,使其产生了校时功能。
3.2.3显示电路设计
显示电路是用74ls48驱动七段共阴数码管来作为时钟显示器。
电路设计如下:
3.2.4 计时电路设计
数字钟的秒和分位都是从0到60循环计数的,所以可以用用异步清零法设计60进制计数器作为秒和分的计数器。用异步置数法设计小时所用的24进制计数器。秒、分位设计电路如下:
3.3 程序调试过程
在板子焊接好以后通上5V电源发现六Led灯只有三个能完整亮出来,其余的都不亮或是亮的不全,而且秒位不走,校时按键不管用。问题很多。
开始调试:
1、首先调试的是秒位为何不走,先测晶振石否起振,测量后发现晶振正常起振,然后从74ls160的clk端用示波器测试一下没有脉冲信号输入,则找74ls74的输出口也无脉冲,以次往前推,最后测量出从74ls74输入端有正确的脉冲输入,输出端却无脉冲输出。观察后没有连接错误,故用万用表测vcc.end端都有正确的电平接入,再测量两点间是否有漏焊现象,最后测出一处漏焊点使D端与Q端没有接通。重新焊接后秒位正常计时。
2、秒位正常计时,但向秒的十位进位时总是显示从8到19,查阅资料可知,在第一个160芯片到第二个160芯片中缺一个非门,充当延时作用,使个位计数到9再来一个脉冲下计数时再向前进位。加上非门进位正常了。
3、秒位向分位进位正常,但校时按键不能用,且分位向十分位不能进位,通过观察焊接对比原理图与pcb图后发现,开关接地的一端弄反了,应是开关与接电容端相侧对着的端接地。这个错误导致开关不能用,亦使分的十位端的74ls160芯片clk段一直接了地,故不能使其正常进位。修改过后则可以正常进位,且两开关都能用了。
4、显示小时位的第一个数码管一直不亮,通过测量发现led数码管没有烧坏,能正常工作,通过对比PCB图观察没有焊接错误,用万用表测量则发现驱动次led的74ls48管没有正常接地,连接跳线处有一虚焊,重新焊接后恢复正常。
5、但分向小时不能进位,由示波器观察发现74ls160芯片clk端无脉冲输入,但十分位有脉冲输出,且导线也导通了,就观察原理图发现原理图一处错误,分向时进位时是分满60向前进一个脉冲,故分的TC端不用再接到时的CLK端了。找到错误后用镊子将板上的铜线划段,则正常进位了。
6、小时进位正常但显示的不是24进制,显示的是44进制,则推测可能是跳线连接错误,将显示小时的十位 74ls160芯片接B端连接成接C端了,故使其显示44进制,通过观察、对比pcb图,最后发现果然如此。修改过后小时为正常24进制了。
7、最后一个数码管有三段老是不亮,观察连接没有错误,测量焊接也正常,最后用万用表测量发现芯片没有问题,那三段不亮的数码管烧了。
8、调试好后在后来的观察中发现从秒向分进位时有时一下进两位,自己找不出来原因。问过老师后,老师说是由于防抖电容所致。尝试着将电容先划断试了一下就没有那种情况了。但此时校时开关由于抖动缘故,按一下有时跳3、4个位,校时不稳定了。结论
此数字钟相对于机械钟来说有低功耗,高精度,数字化显示和不易损坏等特点。符合人们日常家居及办公对钟表的要求,可以作为家居、办公等用表。
参考文献
[1] 佘新平数学电子技术基础 华中科技大学出版社 2009年
[2] 许树玲 丁电宽 王晋 电子技术及实验 内蒙古大学出版社2005年
[3] 佘新平数字电路设计·仿真·测试 华中大学出版社 2010年
附图: 电路原理图:
第四篇:多功能数字钟的设计080707
课程设计任务书
学生姓名:专业班级:电子科学与技术0601班 指导教师:吴友宇工作单位:信息工程学院题目:多功能数字钟的设计初始条件:
本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等。本设计也可以使用单片机系统构建多功能数字钟。用数码管显示时间计数值。
要求完成的主要任务:(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:1周。
2、技术要求:
① 设计一个数字钟。要求用六位数码管显示时间,格式为00:00:00。
②具有60进制和24进制(或12进制)计数功能,秒、分为60进制计数,时为24进制(或12进制)计数。
③有译码、七段数码显示功能,能显示时、分、秒计时的结果。
④设计提供连续触发脉冲的脉冲信号发生器,⑤具有校时单元、闹钟单元和整点报时单元。
⑥确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。
3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。
时间安排:
1、月
2、月
2、月至月
2、月至月日,电路调试和设计说明书撰写。
3、月
课设答疑地点:鉴主14楼电子科学与技术实验室。
指导教师签名:年月日
系主任(或责任教师)签名:年月日
第五篇:基于VHDL的多功能数字钟设计报告
基于VHDL的多功能数字钟
设计报告
021215班 卫时章 02121451
一、设计要求
1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。
2、设计精度要求为1秒。
二、设计环境:Quartus II
三、系统功能描述
1、系统输入:时钟信号clk采用50MHz;系统状态及较时、定时转换的控制信号为k、set,校时复位信号为reset,均由按键信号产生。
2、系统输出:LED显示输出;蜂鸣器声音信号输出。
3、多功能数字电子钟系统功能的具体描述如下:
(一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
(二)校时:在计时显示状态下,按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按下“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按下“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按下“k”键恢复到正常计时显示状态。若校时过程中按下“reset”键,则系统恢复到正常计数状态。(1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。(2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。(3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。
(4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。
(四)显示:采用扫描显示方式驱动4个LED数码管显示小时、分,秒由两组led灯以4位BCD 码显示。
(五)闹钟:闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。
四、各个模块分析说明
1、分频器模块(freq.vhd)(1)模块说明:输入一个频率为50MHz的CLK,利用计数器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity freq is
port
(CLK: in std_logic;
--输入时钟信号
q1KHz: buffer std_logic;
q500Hz: buffer std_logic;
q2Hz: buffer std_logic;
q1Hz: out std_logic);end freq;
architecture bhv of freq is begin P1KHZ:process(CLK)variable cout:integer:=0;begin
if CLK'event and CLK='1' then
cout:=cout+1;
--每来个时钟上升沿时cout开始计数 if cout<=25000 then q1KHz<='0';
--当cout<=25000时,q1KHz输出“0”
elsif cout<50000 then q1KHz<='1';--当25000 else cout:=0; --输出“1”,完成1KHz频率输出 end if; end if;end process; P500HZ:process(q1KHz) --q1KHz作为输入信号,分出q500Hz variable cout:integer:=0;begin if q1KHz'event and q1KHz='1' then cout:=cout+1;if cout=1 then q500Hz<='0'; --二分频 elsif cout=2 then cout:=0;q500Hz<='1';end if; end if;end process; P2HZ:process(q500Hz)variable cout:integer:=0;begin if q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0'; elsif cout<250 then q2Hz<='1'; else cout:=0;end if; end if;end process; P1HZ:process(q2Hz)variable cout:integer:=0;begin if q2Hz'event and q2Hz='1' then cout:=cout+1;if cout=1 then q1Hz<='0'; elsif cout=2 then cout:=0;q1Hz<='1';end if; end if;end process;end bhv;(3)模块图: 2、控制器模块(contral.vhd)(1)模块说明:输入端口k,set键来控制6个状态,这六个状态分别是: 显示计时时间状态,调计时的时、分、秒的3个状态,调闹铃的时、分的3个状态,reset键是复位键,用来回到显示计时时间的状态。(2)波形仿真图: (3)模块图: 3、二选一模块(mux21a.vhd)(1)源程序: library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity mux21a is port(a,b,s:in bit; y:out bit);end entity mux21a; architecture one of mux21a is begin process(a,b,s)begin if s='0' then y<=a; --若s=0,y输出a,反之输出b。else y<=b;end if;end process;end architecture one;(2)仿真波形图: (3)模块图: 4、计时模块 a.秒计时(second.vhd)(1)仿真波形图: (2)模块图: b.分计时(minute.vhd)(1)仿真波形图: (2)模块图: c.小时计时(hour.vhd)(1)仿真波形图: (2)模块图: d.闹钟分计时(cntm60b.vhd)(1)仿真波形图: (2)模块图: e.闹钟小时计时(cnth24b.vhd)(1)仿真波形图: (2)模块图: 5、闹钟比较模块(compare.vhd)(1)模块说明:比较正常计数时间与闹钟定时时间是否相等,若相等,compout输出“1”,反之输出“0”。(2)仿真波形图: (3)模块图: 6、报时模块(bell.vhd)(1)模块说明:该模块既实现了整点报时的功能,又实现了闹铃的功能,蜂鸣器通过所选频率的不同,而发出不同的声音。(2)仿真波形图: (3)模块图: 7、控制显示模块(show_con.vhd)(1)模块说明:该模块实现了数码管既可以显示正常时间,又可以显示闹钟时间的功能;调时过程的定时闪烁功能也在此模块中真正实现。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con is port(th1,tm1,ts1:in std_logic_vector(7 downto 4); th0,tm0,ts0:in std_logic_vector(3 downto 0); bh1,bm1:in std_logic_vector(7 downto 4); bh0,bm0:in std_logic_vector(3 downto 0); sec1,min1,h1: out std_logic_vector(7 downto 4); sec0,min0,h0: out std_logic_vector(3 downto 0); q2Hz,flashs,flashh,flashm,sel_show:in std_logic);end show_con; architecture rtl of show_con is begin process(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flashs,flashh,flashm,sel_show) begin if sel_show='0'then if(flashh='1'and q2Hz='1')then h1<=“1111”;h0<=“1111”;--显示小时数码管以2Hz闪烁 min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; elsif(flashm='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=“1111”;min0<=“1111”; sec1<=ts1;sec0<=ts0; elsif(flashs='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=“1111”;sec0<=“1111”; else h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; end if; elsif sel_show='1'then--若sel_show为“1”,数码管显示闹钟时间 if(flashh='1' and q2Hz='1')then h1<=“1111”;h0<=“1111”; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; elsif(flashm='1' and q2Hz='1')then h1<=bh1;h0<=bh0; min1<=“1111”;min0<=“1111”; sec1<=“0000”;sec0<=“0000”; else h1<=bh1;h0<=bh0; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; end if; end if; end process;end rtl;(3)模块图: 8、动态扫描显示模块(scan_led.vhd)(1)模块说明:由4组输入信号和输出信号进而实现了时钟时、分的动态显示。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity scan_led is port(clk1:in std_logic; h0:in std_logic_vector(3 downto 0); h1:in std_logic_vector(7 downto 4); min0:in std_logic_vector(3 downto 0); min1:in std_logic_vector(7 downto 4); ML:out std_logic_vector(7 downto 0); MH:out std_logic_vector(7 downto 0); HL:out std_logic_vector(7 downto 0); HH:out std_logic_vector(7 downto 0));end scan_led; architecture one of scan_led is signal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0);begin p1:process(clk1)begin if clk1'event and clk1 ='1' then cnt4<=cnt4+1; if cnt4=3 then cnt4<=“00”;end if;end if;end process p1; p2:process(cnt4,h1,h0,min1,min0)begin case cnt4 is --控制数码管位选 when “00”=>case min0 is when “0000”=>ML<=“11000000”; when “0001”=>ML<=“11111001”; when “0010”=>ML<=“10100100”; when “0011”=>ML<=“10110000”; when “0100”=>ML<=“10011001”; when “0101”=>ML<=“10010010”; when “0110”=>ML<=“10000010”; when “0111”=>ML<=“11111000”; when “1000”=>ML<=“10000000”; when “1001”=>ML<=“10010000”; when others=>NULL; end case;when “01”=>case min1 is when “0000”=>MH<=“11000000”; when “0001”=>MH<=“11111001”; when “0010”=>MH<=“10100100”; when “0011”=>MH<=“10110000”; when “0100”=>MH<=“10011001”; when “0101”=>MH<=“10010010”; when “0110”=>MH<=“10000010”; when “0111”=>MH<=“11111000”; when “1000”=>MH<=“10000000”; when “1001”=>MH<=“10010000”; when others=>NULL; end case;when “10”=>case h0 is when “0000”=>HL<=“11000000”; when “0001”=>HL<=“11111001”; when “0010”=>HL<=“10100100”; when “0011”=>HL<=“10110000”; when “0100”=>HL<=“10011001”; when “0101”=>HL<=“10010010”; when “0110”=>HL<=“10000010”; when “0111”=>HL<=“11111000”; when “1000”=>HL<=“10000000”; when “1001”=>HL<=“10010000”; when others=>NULL; end case;when “11”=>case h1 is when “0000”=>HH<=“11000000”; when “0001”=>HH<=“11111001”; when “0010”=>HH<=“10100100”; when “0011”=>HH<=“10110000”; when “0100”=>HH<=“10011001”; when “0101”=>HH<=“10010010”; when “0110”=>HH<=“10000010”; when “0111”=>HH<=“11111000”; when “1000”=>HH<=“10000000”; when “1001”=>HH<=“10010000”; when others=>NULL; end case;when others =>null;end case;end process p2;end one;(3)模块图: 五、端口设定 k:button2,set:button1,reset:button0 ; Bell:SW1 用于开关蜂鸣器; 六、顶层电路图 七、心得体会 此次的数字钟设计重在于按键的控制和各个模块代码的编写,虽然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有一定的缺陷和不足,比如对按键消抖等细节处并未作出优化。 经过此次数字钟的设计,我确实从中学到很多的东西。首先,通过VHDL硬件语言的学习,我充分认识到了功能模块如何用语言实现,让我初步了解到了一个数字电路用硬件语言设计的方式和设计思想。其次,也让我深深地体会到实践的重要性,起初我学VHDL语言的时候,只是学得书本上的知识,经过这次课程设计,通过对模块的语言实现,对于VHDL语言我有了更深的认识。而且在程序错误的发现和改正的过程中,我得到了更多的收获,也确实让我进步了不少。再次,当我遇到一些问题的时候,请教老师,和同学们一起讨论,令我受益颇多!最后,这个多功能数字电子钟是自我创造与吸取借鉴共同作用的产物,是自我努力的结果。这让我对数字电路的设计充满了信心。虽然课程设计已经结束,但这并不代表着我已经真正掌握了VHDL语言,仍需继续学习!