电子钟的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子钟设计
一、简介或背景
在这个时间就是金钱的年代里,数字电子钟已成为人们生活中的必需品。目前应用的数字钟不仅可以实现对年、月、日、时、分、秒的数字显示,还能实现对电子钟所在地点的温度显示和智能闹钟功能,广泛应用于车站、医院、机场、码头、厕所等公共场所的时间显示。
二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步。
我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使电子时钟除了原有的显示时间基本功能外,还具有闹铃,报警等功能。商家生产的电子时钟更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。
二、系统功能
本设计为一个多功能的数字时钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能。以硬件描述语言Verilog HDL为系统逻辑描述语言设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统由时钟模块、控制模块、计时模块、数据译码模块、显示以及蜂鸣器模块组成。经编译和仿真所设计的程序,本系统能够完成时、分、秒的分别显示,整点报时,闹钟功能。
图2.1整体模块框图
针对框图流程,设定出各个模块的需求:
1、分频电路:
针对计时器模块与闹钟设定模块的需求,可以知道分频模块需要生成一个1Hz的频率信号,确保计时模块可以正常计数。
2、计时器模块:
计数模块的作用是收到分频模块1Hz频率的信号线,能进行正确计时,并且可以通过按键进行时间的修改,且当整点时,给蜂鸣器产生使能信号,进行整点报时。
3、闹钟设定模块:
可根据按键的设定闹钟的时间,当计时模块的时间与闹钟设定模块的时间相等的时候,给蜂鸣器一个使能信号,蜂鸣器闹铃。
4、蜂鸣器模块:
根据计时模块,闹钟模块给出的使能信号,判定蜂鸣器是整点报时,还是闹钟响铃。整点报时会播放音乐,闹钟时嘀嘀嘀报警。
5、LED显示模块:
根据实际的需求显示计时模块的时间,还是闹钟设定模块的时间,8个七段码LED数码管,进行扫描方式显示数据。
三、各个功能模块的具体实现及仿真结果
3.1分频模块儿实现
3.1.1分频模块儿设计
本系统程序设计时钟的准确与否主要取决于秒脉冲的精确度。为了保证计时准确,我们对系统时钟48MHz进行了48000分频生成1kHz信号clk1,在通过1kHz信号,生成1Hz信号clk。
//1ms信号产生部分
always @(posedge clk) // 定义clock 上升沿触发
begin
count = count + 1'b1;
if(count == 15'd24000) //0.5mS到了吗?
begin
count = 15'd0; //计数器清零
clk1 = ~clk1; //置位秒标志
end
end
//秒信号产生部分
always @(posedge clk1) // 定义clock 上升沿触发
begin
count1 = count1 + 1'b1;
if(count1 == 9'd500) //0.5S到了吗?
begin
count1 = 9'd0; //计数器清零
sec = ~sec; //置位秒标志
end
End
3.1.2分频模块儿仿真
通过设置功能仿真,检查代码的正确性
1、仿真结果
图3.1 分频模块波形仿真图
右上图可以知道,计数寄存器count累加到23999时,重新变为0,共计数了24000个值。触发clk1跳变,使得count1加一,count1累加到499的时候,下一个数据为0,共技术500个值。所以,sec信号的频率为1Hz,满足设计要求。
3.2计时模块儿实现
3.2.1计时模块儿设计
计时模块是采用16进制来实现的,将hour[23,0]定义为其时分秒,其中hour[3,0]为其秒钟上的个位数值,hour[4,7]为其秒钟上的十位数值,以此类推分钟、时钟的个位和十位。当clk脉冲过来时,秒个位hour[3,0]便开始加1,当加到9时,秒十位加1,与此同时秒个位清零,继续加1。当秒十位hour[7,4]为5秒个位为9时(即59秒),分个位hour[11,8]加1,与此同时秒个位和秒十位都清零。以此类推,当分十位hour[15,12]为5和分个位为9时(即59分),时个位加1,与此同时分个位hour[19,16]和分十位都清零。当时分十位[23,20]为2和分个位为4,全部清零,开始重新计时。从功能上讲分别为模60计数器,模60计数器和模24计数器。
//时间计算及校准部分
always @(negedge sec)//计时处理
begin
hour[3:0] = hour[3:0] + 1'b1; //秒加1 if(hour[3:0] >= 4'ha) //加到10,复位
begin
hour[3:0] = 4'h0;
hour[7:4] = hour[7:4] + 1'b1; // 秒的十位加一