单片机的音乐盒设计C程序推荐_第1页
单片机的音乐盒设计C程序推荐_第2页
单片机的音乐盒设计C程序推荐_第3页
单片机的音乐盒设计C程序推荐_第4页
单片机的音乐盒设计C程序推荐_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机音乐盒1 概述本设计是以 AT89C51 芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬 件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。用户可以按照自己 的喜好选择音乐并将其转化成机器码存入单片机的存储器中。对于不同型号的单片机只需要相应的 改变一下地址即可。该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和 音乐爱好者提供了很好的借鉴。1.1 课题意义音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。当时为使教会的钟塔报时,而将大小的钟 表装上机械装置,被称为“可发出声音的组钟” 。音乐盒有着 300 多年的发展历史,是人类文明发

2、展 的历史见证。传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音 单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒 放音时为了让音色稳定 ,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小 巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生 产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌

3、,使用方便。 根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,使音乐盒的功能 更加丰富。1.2 设计方案设计一个基于 AT89C51 系列单片机的音乐盒,利用按键切换演奏出不同的乐曲。蜂鸣器发出某 个音调,与之相对应的 LED 亮起。使用两个按键,一个用来切换歌曲,另一个切换八路 LED 的变 化花样。1.3 研究内容1)电路有两种工作模式:演奏音乐模式和花样灯模式。演奏音乐模式:演奏完整的一首的歌曲,八路LED随着音乐变化。花样灯模式:八路 LED 变化出各种花样,蜂鸣器随着发出“嘀嘀”声2)按下按键 1 进入演奏音乐模式,再按切换歌曲,共两首歌曲。3)按下按键 2

4、进入花样灯模式,再按切换 LED 花样,共三种花样。此电路的程序只占用了 1K 左右,可编制更多的音乐和 LED 花样,使系统的功能更加强大。1 / 212 系统总体方案介绍2.1 系统组成框图音乐盒的系统结构以 AT89C51 单片机位控制核心, 加上 2 个按键、 时钟复位电路、 蜂鸣器、LED 模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及 蜂鸣器发音。系统组成框图如图 2.1 所示。图 2.1 系统组成框图2.2 音乐盒的功能结构图音乐盒的功能结构如图 2.2 所示。 Key1 负责切换播放歌曲,播放歌曲共 2 首,分别是挥着翅膀 的女孩和寂寞沙

5、洲冷。 Key2 负责切换 LED 显示花样,显示花样共 3 种,第一种顺序显示,第二种 由两边向中间移动然后向两边移动,第三种循环显示。图 2.2 音乐盒功能结构图2 / 213 硬件设计3.1 总体设计框图图 3.1 总体设计框图3.2 各部分硬件设计及其原理3.3 硬件电路图及功能 总体硬件电路实现功能如下,如图 3.4 所示1) 电路中用 P3.2、P3.3 控制按键。2) P1.0P1.7 控制 LED。3) P2.3 控制蜂鸣器。4) 电路为 12MHZ 晶振频率工作,起振电路中 C1、C2 均为 30PF。3 / 21图 3.4 硬件电路图4 / 214 软件设计在本程序中设置了

6、两个标志 count1 和 count2 ,分别初始化为 1 和 0。按键 1 使得 count1 在 1 和 2 之间切换,按键 2 使得 count2 在 14 之间切换。程序检测 count1 的值, count1 等于 1 时播放第 一首歌曲,等于 2 时播放第二首。另一方面根据 count2 的值来切换 LED 的花样。 count1 和 count2 的值是互斥的,设置 count1 等于 1、 2 时, count2 同时设置为 0;设置 count2 等于 14 时, count1 也同时设置为 0。4.1 音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,

7、它不包含相应幅度的谐波频率,也就是说不能 像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调” 和节拍表示一个音符唱多长的时间。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,相当于汉字“多 来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即 Tone。把 C、D、E、 F、G、A 、B 这一组音的距离分成 12 个等份,每一个等份叫一个 “半音”。两个音之间的距离有两个 “半音”

8、, 就叫“全音” 。在钢琴等键盘乐器上, CD、DE、FG、GA、AB 两音之间隔着一个黑键, 他们之间的距离就是全音; EF、 B C 两音之间没有黑键相隔,它们之间的距离就是半音。通常 唱成 1、2、 3、4、5、6、7 的音叫自然音,那些在它们的左上角加上号或者b 号的叫变化音。叫升记号,表示把音在原来的基础上升高半音, b 叫降记音,表示在原来的基础上降低半音。例如 高音 DO 的频率( 1046Hz)刚好是中音 DO 的频率( 523Hz )的一倍,中音 DO 的频率( 523Hz )刚 好是低音 DO 频率(266 Hz )的一倍;同样的,高音 RE 的频率(1175Hz)刚好是中

9、音 RE 的频率(587Hz) 的一倍,中音 RE 的频率( 587Hz)刚好是低音 RE 频率( 294 Hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以 2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的 I/O 反相,然后重复计时此 半周期时间再对 I/O 反相,就可在 I/O 脚上得到此频率的脉冲。2)利用 AT89C51 的内部定时器使其工作在计数器模式MODE1 下,改变计数值 TH0 及 TL0 以产生不同频率的方法。此外结束符和休止符可以分别用代码 00H 和 FFH 来表示,若查表结果为 00H ,则表示曲子终

10、了; 若查表结果为 FFH,则产生相应的停顿效果。3)例如频率为 523Hz,其周期 T=1/523=1912us ,因此只要令计数器计时 956us/1us=956,在每 次技术 956 次时将 I/O 反相,就可得到中音 DO (523Hz )。计数脉冲值与频率的关系公式如下:N=Fi 2 FrN:计算值;Fi :内部计时一次为 1us,故其频率为 1MHz ;4)其计数值的求法如下:T=65536-N=65536-Fi 2 Fr例如:设 K=65536 , F=1000000=Fi=1MHz ,球低音 DO ( 261Hz )。中音 DO ( 523Hz )。高音的 DO( 1046Hz

11、)的计算值T=65536-N=65536-Fi 2 Fr=65536-1000000 2 Fr=65536-500000/Fr低音 DO 的 T=65536-500000/262=63627低音 DO 的 T=65536-500000/523=64580低音 DO 的 T=65536-500000/1047=650595)C 调各音符频率与计数值 T 的对照表如表 4.1 所示。5 / 21表 4.1 C 调各音符频率与计数值 T 的对照表低音频率T参数中音频率T参数高音频率T参数Do2621908229Do523956115Do10465757Do2771805217Do554903108D

12、o11095454Re2941701204Re587852102Re11755151Re3111608193Re62280497Re12454848Mi3301515182Mi65975991Mi13184545Fa3491433172Fa69871686Fa13974343Fa3701351162Fa74067681Fa14804141So3921276153So78463877So15683838So4151205145So83160272So16613636La4401136136La88056868La17603434La4641078129La93253664La18653232Si

13、4941012121Si98850661Si197630304.1.2 节拍的确定若要构成音乐,光有 音调 是不够的,还需要 节拍 ,让音乐具有旋律(固定的律动) ,而且可以调 节各个音的快慢度。 “节拍” ,即 Beat ,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺 脚。若 1 拍实 0.5s ,则 1/4 拍为 0.125s 。至于 1 拍多少 s ,并没有严格规定,就像人的心跳一样, 大部分人的心跳是每分钟 72 下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示 。 休止符表示暂停发音 。一首音乐是由许多不同的音符组成的,而每个音符对应着

14、不同频率,这样就可以利用不同的频 率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率 的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定 时/ 计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机 定时计数的关系。表 4.2 节拍与节拍码对照节拍码节拍数节拍码节拍数11/4 拍11/8 拍22/4 拍21/4 拍33/4 拍33/8 拍41拍42/1 拍51又 1/4 拍55/8 拍61又 1/2 拍63/4 拍82拍81拍A2又 1/2 拍A1又 1/4 拍C3拍C1又 1/2 拍F3又

15、3/4 拍每个音符使用 1个字节,字节的高 4 位代表音符的高低,低 4 位代表音符的节拍, 图 5.2 为节拍码的对照。如果 1 拍为 0.4 秒, 1/4 拍实 0.1 秒,只要设定延迟时间就可求得节拍的时 间。假设 1/4 拍为 1DELAY ,则 1 拍应为 4DELAY ,以此类推。 所以只要求得 1/4 拍的 DELAY 时间, 其余的节拍就是它的倍数,如图 5.3为 1/4和 1/8节拍的时间设定。6 / 21表 4.3 1/4 和 1/8 节拍的时间设定曲调值DELAY曲调值DELAY调 4/4125 毫秒调 4/462 毫秒调 3/4187 毫秒调 3/494 毫秒调 2/4

16、250 毫秒调 2/4125 毫秒4.1.3 编码do re mi fa so la si 分别编码为 17,重音 do 编为 8, 重音 re 编为 9,停顿编为 0。播放长度以十 六分音符为单位 (在本程序中为 165ms),一拍即四分音符等于 4个十六分音符, 编为 4,其它的播放 时间以此类推。音调作为编码的高 4 位,而播放时间作为低 4 位,如此音调和节拍就构成了一个编 码。以 0xff 作为曲谱的结束标志。举例 1:音调 do, 发音长度为两拍,即二分音符,将其编码为0x18 。举例 2:音调 re, 发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进

17、行编码,储存在一个数据类型为 unsigned char 的数组中。 程序从数组中取出一个数,然后分离出高 4 位得到音调,接着找出相应的值赋给定时器 0,使之定 时操作蜂鸣器,得出相应的音调;接着分离出该数的低 4 位,得到延时时间,接着调用软件延时。表 4.4 简谱对应的简谱码、 T 值、节拍数简谱发音简谱码T值节拍码节拍数5低音 SO16426011/4 拍6低音 LA26440022/4 拍7低音 TI36452433/4 拍1中音 DO46458041拍2中音 RE56468451 又 1/4 拍3中音 MI66477761 又 1/2 拍4中音 FA76482082拍5中音 SO8

18、64898A2 又 1/2 拍6中音 LA964968C3拍7中音 TIA65030F3 又 3/4 拍1高音 DOB650582高音 REC651103高音 MID651574高音 FAE651785高音 SOF652177 / 214.2 软件程序设计4.2.1 程序流程图及相应代码块主程序流程图图 4.1 主程序流程图主程序代码 :main() uchar x;count1=0;/ 流水灯无花样count2=1;/ 唱第一首歌P34=0;/选取矩阵键盘的一列EA=1;/ 开总中断EX0=1;/ 开外部中断 0IT0=1;/ 外部中断 0 下降沿触发方式EX1=1;/ 开外部中断 1IT1

19、=1;/ 外部中断 1 下降沿触发方式TMOD=0x01;/ 定时器 0 工作在方式 1 TH0=0;TL0=0;ET0=1;8 / 21while(1)if(count1!=0) /音乐停止,花样灯开始按照花样闪烁 switch(count1)case 1:for(x=0;x14;x+)duan=1;P1=huayang1x; beep(); delay1(300); duan=0;if(count1!=1)break;break;case 2:for(x=0;x14;x+)duan=1;P1=huayang2x; beep(); delay1(300); duan=0;if(count1!

20、=2)break;break;case 3: for(x=0;x0;x-) for(y=19000;y0;y-);void delay1(uint z)/ 延时 1MS uint x,y;for(x=z;x0;x-) for(y=112;y0;y-);4.2.2 程序源代码(见附录 A)12 / 215 调试5.1 检查硬件连接在 PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,复位 电路是否设计正确。5.2 检查软件系统1根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。 2将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过

21、对硬件和软件系统的认 真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。5.3 测试结果5.3.1 总体运行图图 5.1 系统总体运行图13 / 215.3.2 花样灯 3 种花样图由于截图只能看到静态图,不能看到整体图样,下面画图说明:图 5.2 花样灯1)第一种花样灯显示方式为:从D1 移向 D2 ,然后 D1 熄灭,再从 D2 移向 D3,然后 D2 熄(2)第二种花样灯显示方式为:从两边向中间移动,首先从D1移向 D8,再从 D8 移向 D2,以此类推,往复循环。具体如图 5.3 。(3)第三种花样灯显示方式为:从 D1 移向 D2 ,然后

22、D1 熄灭,再从 D2 移向 D3,然后 D2 熄 灭,以此往复循环。与第一种方式的不同之处为:当D1 移向 D2 时, D1 不熄灭,再从 D2 移向 D314 / 21附录 A 程序源代码及注释#include #define uchar unsigned char#define uint unsigned intsbit duan=P26;sbit key1=P32;/ 按 key1 可切换花样sbit key2=P33;/ 按 key2 可切换歌曲sbit fm=P37;/ 蜂鸣器连续的 IO 口sbit P34=P34;/ 矩阵键盘的一列uchar code huayang1=0x7

23、f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf;/ 花样 1uchar code huayang2=0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,0xef,0xfb,0xdf,0xfd,0xbf,0xfe;/ 花样 2uchar code huayang3=0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff;char code huayang4= 0x55,0xaa,0x

24、cc,0x33,0x99,0x66,0x0f,0xf0;uchar count1;/ 花样标志uchar count2;/ 歌曲标志uchar timeh,timel,i;/ 简谱 /编程规则 :字节高位是简谱 ,低位是持续时间 ,/代表多少个十六分音符/1-7 代表中央 C 调,8-E 代表高八度 ,0 代表停顿/最后的 0 是结束标志uchar code qnzl=/ 千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08, /前奏0x32,0x31,0x21

25、,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/竹林的灯火 到过的沙漠0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,/七色的国度 不断飘逸风中0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/ 有一种神秘 灰色的旋涡0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,/将我卷入了迷雾中0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,/看不清的双手0x31,0x51,0x63,0x51,0x63,

26、0x51,0x63,0x51,0x62,0x82,0x7C,0x02, /一朵花传来谁经过的温柔0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,/穿越千年的伤痛0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/只为求一个结果0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53, /你留下的轮廓 指引我15 / 210x42,0x63,0x83,0x83,0x91,0x91,/黑夜中不寂寞0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,/穿越千年的哀愁0x61,0

27、x71,0x82,0x71,0x62,0x52,0x31,0x36,/是你在尽头等我0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,/最美丽的感动 会值得0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff/ 结束标志/用一生守候;uchar code jmszl= / 寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,/自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,/白色油桐风中纷飞0x51,0x52,0x31,0x52,0x6

28、2,0x13,0x11,0x13,0x32,0x28,0x08,0x28, /落花似人有情 这个季节0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52, /河畔的风放肆拼命地吹0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,/不断拨弄离人的眼泪0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54, /那样浓烈的爱再也无法给0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26, /伤感一

29、夜一夜0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51, /当记忆的线缠绕过往支离破碎0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,/是慌乱占据了心扉0x31,0x81,0x81,0x81,0x61,0x91,0x82,/有花儿伴着蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53, /孤雁可以双飞0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,/夜深人静独徘徊0x32,0x61,0x51,0x51,0x31,0x31

30、,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52, /当幸福恋人寄来红色分享喜悦0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56, /闭上双眼难过头也不敢回0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34, /仍然捡尽寒枝不肯安歇微带着后悔0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,/寂寞沙洲我该思念谁0xff;16 / 21/ 简谱音调对应的定时器初值 /适合 11.0592M 的晶振 uchar code cuzhi=0xff,0xff,/ 占位 0xFC,0x8E,/中央 C调 1-70xFC,0xED,0xFD,0x43,0xFD,0x6A,0xFD,0xB3,0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论