(1)对时间进行定时,当定时时间到后,通过喇叭能连续播放一段音乐。要求播放出的音乐的音阶准确,不能有太大偏差,否则会造成音乐声音刺耳难听;音乐播放必须连贯,即音乐必须有节奏感;喇叭放出的音乐声音响亮,不能太小,否则不能达到乐曲的提示作用。
(2)在四位共阴LED数码管上显示出时间(24小时制),包括小时、分钟,当定时1秒后,秒数加1;当定时满60秒后,秒数归零,分钟数加1;当定时满60分钟后,分钟数归零,小时数加1;当定时满24小时后,小时数归零。
软件设计(本文转载自
www.yzbxz.com 一枝笔写作网)
本设计的软件部分包含了两个重要组成部分:音乐编程和时间程序(注:也可以用下框图来反映----具体自己画和填写!!!---便全面反映2.1和2.2等要写的东西)
2.1音乐编程原理及其流程图
2.1.1声音的产生
声音是音频振动的结果,振动的频率高则为高音,频率低则为低音。音频范围为20HZ-200KHZ之间,而人类耳朵比较容易辨识的声音大概是200HZ-20KHZ。一般音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐的;在数字电路里,则是以脉冲信号驱动喇叭以产生声音。同样的频率,脉冲信号或正弦信号产生的音效,对于人类的耳朵来说很难有所区别。
若用单片机产生声音,可利用程序产生频率,送到输入/输出端口,例如P1.0,再从该点连接到喇叭的驱动电路,即可驱动喇叭。
2.1.2音频转换原理
若要产生音频脉冲,只要算出某一音频的周期,再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。
利用单片机的内部定时器使其工作计数器模式(MODEL1)下,改变其计数值TH0及TL0以产生不同频率的方法产生不同音阶。例如,频率为523HZ,其周期T=1/523=1912us,因此只要令计时器计时956us/1us=956,每计数956次时将I/O反相,就可得到中音DO(523HZ)。计数脉冲值与频率的关系式是:
N=F1/2/F2(式3-2
-1)
式3-2-1中,N是计数值;F1是机器频率(晶体振荡器为12MHZ时,其频率为1MHZ);F2为想要产生的声音频率。
其计数初值T的求法如下:
T=65536–N=65536-F1/2/F2(式3-2-2)
本次设计采用16位定时方式,晶体振荡器频率为6MHZ,根据式3-2-1和式3-2-2可以计算出各音乐频率的计数器初值,再将十进制的计数器初值转换为四位16进制,将其制表写入程序中,通过查表装入要求的初值即可。音阶与频率的对应关系如表3-1所示。
表2-1
音符DOREMEFASOLASI
低音简谱码1234567
频率/Hz523587659698784880987
高音简谱码1234567
频率/Hz1046117413181396156717601975
2.1.3节拍的产生
音阶的频率是固定的,而节拍有快有慢,拍子越短节奏越快,拍子越长节奏越慢。控制发音的时间有两种方法:调用延时子程序或采用定时器中断。本次设计采用的是定时器终端方式。
首先在整首乐曲中找出最短的拍子,一般为1/4拍,拍子的时间约为0.125s。然后以1/4拍为基准,然后设定每0.125s产生一次中断,其定时器值为125000,定时常数为08F3H。若采用模式2,定时器值太小,不是很好用。所以采用模式1,将定时器值设为62500,即0CDCH,则只需要执行2次定时器中断就可以产生1/4拍的时间长度。同样,若要产生其它的拍子(如1/2拍,3/4拍……),只需要定时器中断N次,产生N*0.125s定时,使其满足各个节拍的时间长度即可。
设计的程序按如下方法编写:
(1)将音符代码装入8位字节高4位,节拍代码装入低4位,组成一个字节,以此类推。将整段乐曲转换成一定长度的编码表。具体编程方法如下:
1.首先,定义toneh[]和tonel[]两个数组,将各个音乐频率的定时器初值的16进制数的高8位装入toneh[],低8位装入tonel[]。
2.利用单片机的定时器中断,将toneh[]和tonel[]的数据分别装入TH0和TL0,并且,收到信号P1.0就反相。
voidtimer0(void)interrupt1using1
{
P1_0=!P1_0;
TH0=toneh[rti];
TL0=tonel[rti];
}
3.利用定时器1控制音乐节拍的时间长度,将上文所述的定时器初值装入定时器1。
voidtimer1(void)interrupt3using2
{
TH1=0x0c;
TL1=0xdc;
m++;
}
(2)在程序执行时顺序查此表,取出音符代码,查频率表,置入T/C口,取出节拍代码,供定时器使用,启动后即可发出声音。
2.1.4音频转换流程图
设计的软件流程如图2-2所示。程序开始运行时先对单片机进行初始化,其中包括定时器及其工作方式的选择、外部中断设定、定时器初值的设定。利用单片机,通过软件的方式产生所需要的音乐频率,并将收到的信号与音频编码表进行对比。若信号在编码表中,则将该频率的定时器初值写入定时器中,并读取频率的音阶,再从单片机的P1.0口输出,经过音频放大器驱动喇叭发出声音,利用驱动喇叭演示程序即可控制音乐的节拍。若信号不在编码表中,则返到初始化。
2.2时间显示程序设计
2.2.1设计思路
对于时间程序的设计,主要依靠单片机内部定时器的计数功能实现。时钟由秒针、分针和时针组成,在程序中分别由sdata,mdata,hdata表示各单位的数据。首先对sdata,mdata,hdata分别设定一个初值,其中sdata设为0,表示秒针初始为0。然后利用定时器对秒针计数,当计数值达到1秒的时间后产生定时器中断,sdata的数据就加1。由于本次设计采用的晶振频率为6MHz,所以定时器取值为2500。将hdata的数据装入第一和第二个数码管,将mdata的数据装入第三和第四个数码管。当sdata的数据为59时,若此时再来一个定时器中断,则秒针重新归零,而分针就加1。同样,分针和时针的进位也是同一道理。
当设定的闹钟时间一到,程序即转入音频程序,驱动喇叭放出音乐。
2.2.2时钟程序流程图
时钟程序流程图如图2-3所示。(应有简单的文字叙述或解释)
3硬件电路的设计
3.1硬件流程模块
设计的硬件流程模块如图3-1所示。首先,PC机通过串口及MAX232芯片将程序下载到单片机中,其中包括把一个个的单音写入单片机的ROM存储器中,程序运行时再将音乐数据按顺序读出,利用单片机的定时器中断控制音乐节拍的长度,这样就能形成一段乐曲。在单片机P1.0口接入音频放大电路,将单片机输出的信号放大,再通过喇叭播放音乐。单片机P2口接4位共阴LED数码管,并外接1K欧的排阻,利用单片机内部的定时器中断控制时间程序,然后在数码管上显示出时间。(责任编辑:一枝笔写作事务所)