数字钟的设计Word格式.docx
《数字钟的设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字钟的设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
![数字钟的设计Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/24/bcea36ba-a9f8-4e39-8ea8-cf532040e63b/bcea36ba-a9f8-4e39-8ea8-cf532040e63b1.gif)
①:
当rst信号为高电平时,秒计数器被清零;
②:
当秒计数到59时,产生一个进位,即carry=‘1’,之后重新开始计数。
3.1.2时钟分计数子模块
正常计数时,当分计数器计数到59时,再来一个时钟脉冲,则分计数器清零,而进位则作为时计数器的计数脉冲,使时计数器加一。
现在把秒计数器的进位脉冲和一个频率为4Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;
当按键开关按下去时(即为1),则数据选择器将另外一个4Hz的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确的时间,按动按键开关,从而达到校分的目的。
2选1数据选择器
其封装图如下所示:
具体程序如下所示:
当s=‘1’时,y输出为b,即给分计数器的脉冲频率为4Hz,此时可对分进行校时功能;
当s=‘0’时,y输出为a,即给分计数器的脉冲为秒计数器的进位脉冲,此时实现的功能是让数字钟正常工作。
分计数器
其封装图如下图所示:
仿真图如下所示:
当rst信号为高电平时,分计数器被清零;
当分计数器计数到59时,产生一个进位,即carry=‘1’,之后重新开始计数。
3.1.3时钟时计数子模块
时计数子模块是由一个24进制计数器组成,正常计数时,当时计数器计数到23时,再来一个脉冲,则时计数器清零,重新开始新一轮的计数。
现在把分计数器的进位脉冲和一个频率为4Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关为低电平时,则数据选择器将分计数器的进位脉冲送到时计数器,此时,数字钟正常工作;
当按键开关为高电平时,则数据选择器将另外一个4Hz的信号作为时计数器的计数脉冲,使其计数频率加快,当达到正确的时间,按动按键开关,从而达到校时的目的。
时计数器的封装图如下图所示:
仿真图如下所示:
当rst信号为高电平时,时计数器被清零,回到初始状态12;
当时计数器计数到23时,时清零,重新开始新一轮的计数。
3.2定时及整点报时模块
功能描述
该模块分为两个功能,即定时和整点报时
定时:
代码中设计06:
30:
00时,发光二极管会亮起,同时蜂鸣器也会发出声音,提醒所定的时间到了,即音乐模块里设计的“梁祝”,维持时间一分钟
整点报时:
代码中设计每到一个整点的时候,发光二极管会亮起,且蜂鸣器会发出声音,提醒整点到了
实验代码
封装图
仿真波形
波形分析:
如上图所示
1)定时:
当时间从06:
00变到06:
59,在这一分钟的时间内,发光二极管一直在处于高电平状态(lamp=“1111”),即灯亮起,且随着音乐的节拍有规律有节奏的闪烁;
而此时的蜂鸣器会发出设计好的“梁祝”(speak1=“1111”),维持一分钟的时间,到06:
31:
00时,发光二极管处于低电平状态(lamp=“0000”),即灯不亮
2)整点报时:
当时间处于整点时,例上图处于07:
00时刻,此时,发光二极管会亮起(lamp=“1111”),且此时的蜂鸣器会发出声音(speak2=“1111”)
3.3分频器模块
把10MHz分为1Hz,4Hz,1MHz三个频率,1Hz的作为秒计数的时钟信号频率4Hz的作为音乐模块中的138计数器的时钟信号频率,1MHz作为音乐模块中的数控分频器的SPK。
(1)10MHz分为1Hz时,即10,000,000分频
(2)10MHz分为4Hz时,即2,500,000分频
将上述代码中的counter_len设置为整数型,并赋值为2499999。
其余与上述代码相同,即可实现4Hz。
(3)10MHz分为1MHz时,即10分频
将上述代码中的counter_len设置为整数型,并赋值为9。
其余与上述代码相同,即可实现1MHz。
分为1Hz分为4Hz分为1MHz
在此只列出将10MHz分为1MHz的仿真波形,余下两个类似,不再赘余
当第一个clk信号到第五个clk信号期间,qout一直输出低电平,当第六个clk信号来到时,qout开始输出高电平,明显可以看出这是一个10分频。
则可以类推,10MHz分为1Hz为10,000,000分频,10MHz分为4Hz为2,500,000分频
3.5音乐模块MISIC
3.5.1音乐模块原理:
硬件乐曲演奏电路顶层模块图如图3.5.1所示,电路由5个子模块构成。
本模块为“梁祝”乐曲演奏电路的实现。
组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素。
图3.5.1乐曲演奏电路顶层设计
3.5.2SPK模块
SPK模块原理:
音符的频率可以由图3.5.2中的SPK获得。
这是一个数控分频器。
由其CLK端输入一具有较高频率(1MHz)的时钟,通过SPK分频后,由boom口输出。
由于直接从分频器中出来的输出信号是脉宽极窄的信号,为了有利于驱动扬声器,需另加一个D触发器分频以均衡其占空比,但这时的频率将是原来的1/2。
SPK对CLK输入信号的分频比由输入的11位预置数TN[10..0]决定。
SPK的输出频率将决定每一音符的音调;
这样,分频计数器的预置值TN[10..0]与输出频率就有了对应关系,而输出的频率又与音乐音符的发声有对应关系,例如在TT模块中若取TN[10..0]=11'
H40C,将由boom发出音符为“3”音的信号频率。
详细的对应关系可以参考图3.5.3的电子琴音阶基频对照图。
图3.5.2TT模块图
图3.5.3电子琴音阶基频对照图(单位Hz)
VHDL代码
3.TT模块
TT模块原理:
音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,图3.3中模块TT的功能首先是为模块SPK(11位分频器)提供决定所发音符的分频预置数,而此数在SPK输入口停留的时间即为此音符的节拍周期。
模块TT是乐曲简谱码对应的分频预置数查表电路,程序数据是根据图3.2得到的,程序中设置了“梁祝”乐曲全部音符所对应的分频预置数,共14个,每一音符的停留时间则由音乐节拍和音调发生查表模块ROM中简谱码和工作时钟clock的频率决定,在此为4Hz。
这4Hz频率来自分频模块fenpin4hz.而模块TT的14个值的输出由对应于rom模块输出的q[3..0]及4位输入值index[3..0]确定,而index[3..0]最多有16种可选值。
输向模块TT中index[3..0]的值在SPK中对应的输出频率值与持续的时间由模块rom决定。
模块图如图3.5.4所示:
图3.5.4TT模块图
4.CNT138模块
CNT138模块原理:
模块CNT138是一个8位二进制计数器,内部设置计数最大值为139,作为音符数据ROM的地址发生器。
这个计数器的计数频率即为4Hz。
即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
例如,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为11'
H40C,在SPK的输入端停留了1秒。
随着计数器CNT138按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据ROM模块中的音符数据将从ROM中通过q[3..0]端口输向TT模块,“梁祝”乐曲就开始连续自然地演奏起来了。
CNT138的节拍是139,正好等于ROM中的简谱码数,所以可以确保循环演奏。
对于其他乐曲,此计数最大值要根据情况更改。
模块图如图3.5.5所示:
图3.5.5CNT138模块图
5.音符ROM模块
此模块是用来存放梁祝的音符数据,数据如下所示,模块图见图3.5.6。
图3.5.6音符ROM图
音符数据:
WIDTH=4;
//“梁祝”乐曲演奏数据
DEPTH=256;
//实际深度139
ADDRESS_RADIX=DEC;
//地址数据类是十进制
DATA_RADIX=DEC;
//输出数据的类型也是十进制
CONTENTBEGIN//注意实用文件中要展开以下数据,每一组占一行
3;
01:
02:
03:
3;
04:
5;
05:
06:
07:
6;
08:
8;
09:
10:
8;
11:
9;
12:
6;
13:
14:
15:
16:
12;
17:
12;
18:
19:
15;
20:
13;
21:
12;
22:
10;
23:
24:
9;
25:
26:
27:
28:
29:
31:
0;
32:
33:
34:
35:
10;
36:
7;
37:
38:
39:
40:
5;
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
0;
137:
138:
END;
四、硬件实现
本次实验电路选择模式7,电路图如下所示:
4.1引脚锁定
将设计编程下载进选定的目标器件中,作进一步的硬件测试,操作如下:
①实验系统对应信号与芯片引脚对照表
端口信号名
结构图上信号名
实验箱显示
clk2
CLOCK2
4Hz
clk3
CLOCK0
256Hz
clk
CLOCK9
10MHz
rst
PIO3
键4
jian5
PIO4
键5
jian8
PIO7
键8
q1
PIO19-PIO16
译码器1
q2
PIO23-PIO20
译码器2
q3
PIO27-PIO24
译码器4
q4
PIO31-PIO28
译码器5
q5
PIO35-PIO32
译码器7
q6
PIO39-PIO36
译码器8
speak
SPEAKER
扬声器
led1
PIO43-PIO40
D4、D3、D2、D1
led2
PIO47和PIO44
D8和D5
引脚锁定图如下所示
4.2硬件测试
硬件实现图片
情况
结果分析
初始状态:
设为12:
00
无论是按系统复位键还是按键4键,都可以将数字钟回归初始状态,即为12:
00:
00,同时蜂鸣一下,表示整点报时
校分
若想改变分的显示,按动键5,使分以4Hz为计数脉冲,使其计数频率加快,当达到正确时间时,松动按键开关
校时
若想改变时的显示,按动键8,使时以4Hz为计数脉冲,使其计数频率加快,当达到正确时间时,松动按键开关
秒进位
秒进位前:
此时时间为05:
04:
59,当下一个时钟脉冲来的时候会产生一个进位信号给分
秒进位后:
当分获得进位信号后,分在原有的基础上加1,而此时,秒会清零,此时时间显示为05:
05:
分进位
分进位前:
59,又一个时钟上升沿过来时,秒会产生一个进位信号给分,分会产生一个进位信号给时
分进位后:
时在原有的基础上加1,分位和秒位清零,则此时时间显示为06:
闹铃定时:
设置为06:
代码中设定闹铃时间为06:
00,当时间为06:
00时,上面的前四个发光二极管会一直亮起,后面四个会随着我们闹钟的梁祝音乐有序的闪烁,响铃持续时间为1分钟
五、项目总结
,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。
本次数字钟的设计,我们小组花了很多的精力,经过对源程序的编辑、编译、仿真、编程下载,在EDA实验开发系统进行验证时达到了我们预期的效果。
但这过程并不是一帆风顺,中间遇到了很多的困难。
一开始我们是分模块进行设计,每个人负责几个模块。
比如在负责音乐模块中,我们小组一开始想利用锁相环获得1MHz和4Hz,却发现编译通不过,我们很是困惑,不知哪里出现问题。
最后通过查找资料发现4Hz已不再cyclone芯片的分频范围内,找到原因后,我们小组转换思路,利用以前做的分频模块解决了问题。
做完各个模块后,顶层电路图的绘制也出现了很多的问题,令我们小组最头痛的是怎样将音乐模块与计数显示电路连接起来,我们小组想了很长时间,最后利用二选一模块很巧妙地解决了这个问题。
因我们的顶层电路复杂,进行连线的不可避免有漏接的现象,我们不得不一个一个模块检查,经过我们的努力,终于实现了所有的要求。
在实验中,我们小组一起交流解决了问题,使我们明白了和他人共同合作的重要性。
我们想成功就是在不断摸索着前进中实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步