电子钟的设计Word格式.docx
《电子钟的设计Word格式.docx》由会员分享,可在线阅读,更多相关《电子钟的设计Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
![电子钟的设计Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/12/1fdcf5e4-d51e-40d4-b7b5-6b8b5b313a50/1fdcf5e4-d51e-40d4-b7b5-6b8b5b313a501.gif)
针对计时器模块与闹钟设定模块的需求,可以知道分频模块需要生成一个1Hz的频率信号,确保计时模块可以正常计数。
2、计时器模块:
计数模块的作用是收到分频模块1Hz频率的信号线,能进行正确计时,并且可以通过按键进行时间的修改,且当整点时,给蜂鸣器产生使能信号,进行整点报时。
3、闹钟设定模块:
可根据按键的设定闹钟的时间,当计时模块的时间与闹钟设定模块的时间相等的时候,给蜂鸣器一个使能信号,蜂鸣器闹铃。
4、蜂鸣器模块:
根据计时模块,闹钟模块给出的使能信号,判定蜂鸣器是整点报时,还是闹钟响铃。
整点报时会播放音乐,闹钟时嘀嘀嘀报警。
5、LED显示模块:
根据实际的需求显示计时模块的时间,还是闹钟设定模块的时间,8个七段码LED数码管,进行扫描方式显示数据。
三、各个功能模块的具体实现及仿真结果
3.1分频模块儿实现
3.1.1分频模块儿设计
本系统程序设计时钟的准确与否主要取决于秒脉冲的精确度。
为了保证计时准确,我们对系统时钟48MHz进行了48000分频生成1kHz信号clk1,在通过1kHz信号,生成1Hz信号clk。
//1ms信号产生部分
always@(posedgeclk)//定义clock上升沿触发
begin
count=count+1'
b1;
if(count==15'
d24000)//0.5mS到了吗?
begin
count=15'
d0;
//计数器清零
clk1=~clk1;
//置位秒标志
end
end
//秒信号产生部分
always@(posedgeclk1)//定义clock上升沿触发
count1=count1+1'
if(count1==9'
d500)//0.5S到了吗?
count1=9'
//计数器清零
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@(negedgesec)//计时处理
hour[3:
0]=hour[3:
0]+1'
//秒加1
if(hour[3:
0]>
=4'
ha)//加到10,复位
begin
hour[3:
0]=4'
h0;
hour[7:
4]=hour[7:
4]+1'
//秒的十位加一
if(hour[7:
4]>
h6)//加到6,复位
begin
hour[7:
4]=4'
hour[11:
8]=hour[11:
8]+1'
//分个位加一
if(hour[11:
8]>
ha)//加到10,复位
begin
hour[11:
8]=4'
hour[15:
12]=hour[15:
12]+1'
//分十位加一
if(hour[15:
12]>
h6)//加到6,复位
begin
hour[15:
12]=4'
hour[19:
16]=hour[19:
16]+1'
//时个位加一
if(hour[19:
16]>
begin
16]=4'
hour[23:
20]=hour[23:
20]+1'
//时十位加一
end
if(hour[23:
=8'
h24)//加到24,复位
hour[23:
16]=8'
end
end
end
end
end
3.2.2计时模块儿仿真
对计时模块进行仿真,记录仿真波形
图3.2计时模块仿真图
由上图可见,当sec信号下降沿跳变时,hour寄出去会加1,也就相当于跳了一秒钟时间。
当hour的时间为235959是,下一个计数器的值为000000,hour寄存器归零,相当于半夜0点的时刻。
仿真的结果达到预期,通过。
3.3按键处理模块儿实现及仿真
框图如下图4.4:
图3.3按键控制功能图
模块讲计时部分和时间调整部分整合到一起,正常态的时候,时间正常运行,当key[5]被按下时,进入时间校准,可以通过key[2:
0]三个键,分别对秒,分,时进行加1操作,从而进行时间校准。
当key[3]被按下时,进入闹钟设定,可以通过key[2:
0]三个键,分别对秒,分,时进行加1操作,从而进行闹钟的设定。
图3.4按键模块仿真图
通过按键key进行仿真控制,可以发现clktime会随着按键的按下,分别有时钟,分钟秒钟加1,仿真结果满足设计要求。
3.4闹钟模块儿实现
3.4.1闹钟模块儿设计
本设计中,判断闹铃时间到,是通过判定时钟系统实时时间的时钟与分钟是否分别等于设定的闹铃时间的时钟、分钟、秒钟。
当时间(hour[23:
0])等于设定的闹钟时间(clktime[23:
0])时,闹钟触发时,播放嘀嘀嘀报警声,闹钟会响10秒的时间(clktime[23:
0]+10>
=hour[23:
0])。
正常情况下,闹铃时间到会进行为时1分钟的蜂鸣报时,可以通过按下闹钟按键key[3]使其停止。
当闹铃设置为整点是,会先进行整点报时,然后进入闹铃。
图3.5闹钟控制键功能图
3.4.2闹钟模块儿仿真
图3.6闹钟模块仿真图
3.5蜂鸣器模块儿实现
3.5.1蜂鸣器模块儿设计
蜂鸣器模块负责整点报时,和闹铃的时候进行出声的作用。
整点报时的时候,播放音乐,10秒音乐播报完后停止整点报时。
闹钟触发时,播放嘀嘀嘀报警声。
当闹钟设定键被按下,响起的蜂鸣声会被屏蔽。
//蜂鸣器的计数定时器
always@(posedgeclk)
beep_count=beep_count+1'
//计数器加1
if((beep_count==beep_count_end)&
&
(!
(beep_count_end==16'
hffff)))
beep_count=16'
//计数器清零
beep_r=~beep_r;
//取反输出信号
always@(posedgeclk)
begin
if(!
beepen)
case(hour[3:
0])//整点报时音乐内容
4'
h0:
beep_count_end=16'
h6a88;
//中音6的分频系数值
h1:
h8637;
//中音4的分频系数值
h2:
h7794;
//中音5的分频系数值
h3:
hb327;
//中音1的分频系数值
h5:
h6:
h7:
h8:
default:
hffff;
//其他情况无声
endcase
elseif(!
clktime_en)
case(count1[8:
5])//