1、 摘摘 要要 本文是应用 STC89C52 单片机原理和控制理论来设计音乐盒的硬件电 路,并利用汇编语言进行程序设计。通过控制单片机内部的定时器来产生 不同频率的方波,驱动喇叭发出不同音调的音乐,再利用延迟来控制发音 时间的长短。该程序通过把乐谱转化成相应的定时常数来驱动发音设备演 奏出悦耳动听的音乐。这种控制电路结构简单,可靠性高,应用性强;软件 程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。对单 片机和音乐爱好者有一定的借鉴价值。 关键词:STC89C52 单片机 音乐盒 汇编语言 II 目 录 1.设计目的及要求 1 1.1 设计目的 1 1.2 设计要求 1 2 .设计方
2、案及原理 .1 2.1 设计原理1 2.2 总设计思想 2 3.硬件设计 3 4.软件设计 3 4.1 音调、节拍以及编码的确定方法 3 4.2 程序流程图 4 4.3 程序(汇编语言) 5 5. 总结8 参考文献.8 1 1.设计设计目的目的及要求及要求 1.1 设计目的 随着电子技术及计算机技术的发展, 单片机在日常生活中的应用越来越广泛, 同时 也显现出了它的重要性,尤其在一些特殊的场合更是不可代替。为熟悉单片机的应用。 要求设计一个基于STC89C52单片机的带彩灯外观的音乐盒。 1.2 设计要求 音乐盒有三个按键 key1,key2,key3,其中 key1 控制彩灯的样式,本设计有
3、六种 彩灯花样,每按一次变换一种样式。Key2 控制音乐播放,本设计有五首音乐,每按一 次变换到下一首,同时八路 LED 灯随音调不同而闪烁。Key3 为总开关用于关闭音乐跟 彩灯。 2.设计方案及原理设计方案及原理 2.1 设计原理 音调之所以不同是因为频率的不同。根据每个音调的频率单片机内部的定时计数器 来产生相应的音乐脉冲。只要算出某一音频的周期(1/频率),然后将此周期除以 2,即为 半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的 I/O 口 反相,然后重复计时此半周期时间再对 I/O 反相,就可在 I/O 脚上得到此频率的脉冲。 利用STC89C52的内部定时
4、计数器工作在方式 1 下,改变初值 TH0 及 TL0 以产生不 同频率。 此外结束符和休止符可以分别用代码 0xff和 0x00 来表示, 若查表结果为 0xff, 则表示曲子终了;若查表结果为 0x00,则产生相应的停顿效果。 例如频率为 523Hz,其周期 T=1/523=1912us,定时时间为 1912/2=956us 因此只要 令计数器计时956us/1us=956次(若晶振频率为6MHZ), 在每次计数956次时将 I/O 反相, 就可得到中音 DO(523Hz)。 根据计数次数就可算出计数初值。 要产生音乐光有音调是不 行的,每个音调还有持续一定的时间。这可以用延时程序 del
5、ay()来实现。因此每个音乐 代码有八位数字组成,高四位控制音调,低四位通过延时程序对该音调进行延时。通过 子函数连续不断的调用音乐代码就产生了动听的音乐。音调的频率与时间都不同,让 DO、RE、MI、FA、SO、LA、SI 分别对应八路 LED 灯中的一个,这样播放音乐的同 时就有 LED 灯对应闪烁。 2 2.2 总体设计思想 图 1 思路图 如图 1 所示按键部分有三个键,分别结于外部中断 P3.2/INT0,P3.3/INT1,及串行 口 P3.1/TXD 上,P3.2 每产生一次中断 count1 加一,根据 count1 的值来决定花样灯的种 类。P3.3 每产生一次中断 coun
6、t2 加一,根据 count2 的数值来决定播放哪一首歌曲。P3.1 接总开关的。 播放音乐, 及花样灯均通过调用子程序来实现。 八路 LED 灯灯接到 P1 口。 扬声器接到 P3.7 上。总体设计电路原理图,如图 2。 图 2 原理图 3 3 硬件设计硬件设计 电路由STC89C52八路 LED 灯,排阻,三个开关,扬声器及晶振组成,搭建如图 3。 图 3 硬件图 4.软件设计软件设计 在本程序中设置了一个标志count1, 分别初始化为 0。 按键 1 使得 count1 在 14 之间切换。程序检测 count1 的值,count1 等于 1 时播放第一首歌曲,等于 2 时播放第二 首。 4.1 音调、节拍以及编码的确定方法 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也 就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念 即可,也就是“音调”和节拍表示一个音符唱多长的时间。 不同音高的乐音是用 C、D、E、F、G、A、B 来表示,这 7 个字母就是音乐的音名, 它们一般依次唱成 DO、RE、M