当前位置:文档之家› 基于89C51的数字音乐盒设计方案

基于89C51的数字音乐盒设计方案

基于89C51的数字音乐盒设计方案1 概述本音乐盒的设计是以AT89C52芯片的电路为基础,外部以蜂鸣器作为发音器件,共同组成了音乐演奏控制器的硬件电路,通过软件程序来控制单片机部的定时器使单片机I/O口发出相应频率的脉冲来驱动蜂鸣器发出某个音调,与之相对应的LED亮起,从而演奏出优美动听的音乐。

利用按键切换演奏出不同的乐曲,并可以在LCD上显示当前曲目序号和时间。

用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。

对于不同型号的单片机只需要相应的改变一下地址和I/O管脚即可。

该软、硬件系统具有很好的通用性,很高的实际使用价值,为单片机DIY制作者和音乐爱好者具有一定的借鉴作用。

2 系统总体方案设计2.1硬件组成按照数字是音乐盒对控制系统的技术要求,控制系统的硬件应包括以下几部分:(1)控制器。

作为控制系统的核心,可以采用主流的51单片机,MSP430,或处理性能更为优越的ARM来合理控制各个器件有条不紊的运行。

(2)乐曲选择器。

可以采用按键或者触摸屏来切换相应的曲目。

(3)音频输出器件。

做为音乐盒的发声设备,可以用蜂鸣器通过它可以将音乐代码转变为音频信号发出来。

(4)人机交互界面。

可以运用LED或LCD在歌曲播放过程中用来对歌曲信息进行监控显示,反馈给使用者相应的信息。

硬件方框图图2-1-12.2.方案论证。

本次设计以低成本,灵活方便为原则,所以控制器选用主流的51系列单片机,考虑到51部储存空间的限制,故选用容量为51两倍的AT89C52单片机作为总控制器,共有以下两套方案可供选择:方案一:以AT89C52单片机作为总控制器,以机械键盘作为乐曲选择器,以蜂鸣器作为音频输出设备,以LCD1602液晶作为人机交互界面。

方案二:以AT89C52单片机作为总控制器,以机械键盘作为乐曲选择器,以蜂鸣器作为音频输出设备,以LED数码管作为人机交互界面。

由于数码管显示容的单一,操作较为繁琐且难以满足大众对主流时尚的需要,所以选用较为流行的显示效果良好的1620液晶作为人机交互界面,最终确定方案一作为制作方案。

总体方案图:图2-2-12.3音乐盒的功能图用框图表示音乐盒的功能结构如图2.2所示。

Start_pause键负责开始播放和暂停歌曲,播放歌曲共3首,分别是和两只老虎和铃儿响叮当。

Up键负责切换上一首曲目,down键用来切换下一首曲目。

图2-3-13硬件电路设计3.1单片机电路微控制器采用AT89C52。

AT89C52是美国ATMEL 公司生产的与MCS-51系列单片机完全兼容的高性能CMOS 8位单片机,MCS-51系列单片机以其推出时间早、配套资源丰富、开发手段完善、性价比高等特点而得到了广泛的应用,是单片机的主流品种。

AT89C52的部资源主要包括:·与MCS--51 系列完全兼容的高性能8位CPU ; ·8K 字节可重复编程的Flash 存储器; ·256字节的SRAM ;·4个8位的并行口,共32条I/O 口线; ·3个16位的定时器/计数器;·6个中断源,2个中断优先级的中断系统; ·一个全双工的串行口; ·部振荡器。

3.2 晶振电路单片机的正常工作是在时钟的作用下完成的,晶振选用11.0592M 的。

C 311.0592M 12图3-2-13.3复位电路复位电路是为了在某些情况下需要单片机恢复到初始运行条件下而设计的,只要给RESET端大约10US的高电平,单片机就可以有效复位。

图3-3-13.4键盘该键盘电路是为了能够更好地对音乐盒进行控制,选择和切换曲目,开始和终止曲目,10K的上拉电阻保证键在没按下时,I/O口输出为高电平,键按下时防止按键杯烧坏。

图3-4-13.5蜂鸣器电路蜂鸣器作为音乐盒的发声设备,当I/O 口数出一个低电平时,蜂鸣器能够发声,PNP 三极管用来放大输出电流,从而来驱动蜂鸣器。

R图3-5-13.6 LCD液晶电路LCD液晶显示电路用来进行人机交互,对1602的操作通过P0口发送数据来实现。

图3-6-13.7电源电路通过变压器将220V交流变为6V,再通过整流,滤波,稳压电路实现单片机可以使用的电源,其中LM7805使稳压电源。

图3-7-14 软件设计4.1 音调、节拍、及编码的设置4.1.1音调音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”。

每个音调都有它固有的频率。

如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。

1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

2)利用AT89C52的部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:N=Fi÷2÷FrN:计算值;Fi:部计时一次为1us,故其频率为1MHz;其计数值的求法如下:T=65536-N=65536-Fi÷2÷Fr例如:设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)。

中音DO(523Hz)。

高音的DO(1046Hz)的计算值T=65536-N=65536-Fi÷2÷Fr=65÷2÷Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1047=650594)C调各音符频率与计数值T的对照表如表4.1所示。

表4.1 C调各音符频率与计数值T的对照表低音频率T 参数中音频率T 参数高音频率T 参数Do 262 1908 229 Do 523 956 115 Do 1046 57 57 Do﹟277 1805 217 Do﹟554 903 108 Do﹟1109 54 54 Re 294 1701 204 Re 587 852 102 Re 1175 51 51 Re﹟311 1608 193 Re﹟622 804 97 Re﹟1245 48 48 Mi 330 1515 182 Mi 659 759 91 Mi 1318 45 45Fa 349 1433 172 Fa 698 716 86 Fa 1397 43 43 Fa﹟370 1351 162 Fa﹟740 676 81 Fa﹟1480 41 41 So 392 1276 153 So 784 638 77 So 1568 38 38 So﹟415 1205 145 So﹟831 602 72 So﹟1661 36 36 La 440 1136 136 La 880 568 68 La 1760 34 34 La﹟464 1078 129 La﹟932 536 64 La﹟1865 32 32 Si 494 1012 121 Si 988 506 61 Si 1976 30 304.1.2节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快慢度。

音持续时间的长短即时值,一般用拍数表示。

休止符表示暂停发音,一排的时间并不确定,一般是400—500MS,本次设计选择一拍的时间是500MS。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。

对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。

因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

表4.2节拍与节拍码对照节拍码节拍数节拍码节拍数1 1/4拍 1 1/8拍2 2/4拍 2 1/4拍3 3/4拍 3 3/8拍4 1拍 4 2/1拍5 1又1/4拍 5 5/8拍6 1又1/2拍 6 3/4拍8 2拍8 1拍A 2又1/2拍 A 1又1/4拍C 3拍 C 1又1/2拍F 3又3/4拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图4.2为节拍码的对照。

如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。

表4.3 1/4和1/8节拍的时间设定曲调值DELAY 曲调值DELAY调4/4 125毫秒调4/4 62毫秒调3/4 187毫秒调3/4 94毫秒调2/4 250毫秒调2/4 125毫秒编码do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。

播放长度以十六分音符为单位(在本程序中为125ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。

音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。

以0xff作为曲谱的结束标志。

举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。

先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。

程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。

相关主题