基于51单片机的音乐盒设计
- 格式:doc
- 大小:109.00 KB
- 文档页数:6
一、设计目的利用8052单片机结合内部定时器设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。
二、设计要求其基本功能为:1,使用LED显示器来显示目前演奏的歌曲编号;2,具有8个按键操作来选择演奏哪一首歌曲;3,内建8首歌曲旋律,按下单键可以演奏歌曲。
三、设计器材T89C52单片机、晶振、八个按键、二位一体共阳极数码管、电阻电容若干、导线。
四、设计方案及分析设计思路:(1)选择8052单片机,通过T0定时中断,并配合P2.0引脚输出音频频率。
(2)P2.0引脚输出接蜂鸣器。
(3)通过P0口接LED。
(4)P1口接键盘,输入歌曲号。
音符产生方法:不同的音调有不同的频率。
频率不同,音调也就不同。
利用定时器,使其工作在模式1,定时中断,然后控制P2.0引脚的输出每次取反,就可以在P2.0的引脚输出相应的方波频率。
改变计数初值,就改变了频率。
定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P2.0引脚得到一音频的脉冲。
如:中音1的频率=523HZ,周期T=1/523=1912us;定时器的定时时间为:T/2=1912/2us=956us;计算得TH0,TL0的计数初值THTL=64580下面是个音符计数初值节拍产生方法:音乐中的节拍用延时时间产生。
假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。
为方便记谱,将节拍数也进行编码,如下:建立曲谱编码表:编谱用8位编码,高4位代表音符,低4位代表节拍。
如5 6中音5,中音6,都是1/2拍,则编码为:82H 92H程序清单:#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit SPEAK = P2^0;//接蜂鸣器管脚uchar th0_f;uchar tl0_f;uchar code SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};uchar code jie8[8]={12,14,16,17,19,21,23,24};/**************************中断函数*******************************************/ timer0() interrupt 1{TL0=tl0_f;TH0=th0_f;SPEAK =~SPEAK; //取反音乐输出IO}/********************T0的值,及输出频率对照表***********************************/ uchar code freq[36*2]={0xA9,0xEF,//00220HZ ,1 //00x93,0xF0,//00233HZ ,1#0x73,0xF1,//00247HZ ,20x49,0xF2,//00262HZ ,2#0x07,0xF3,//00277HZ ,30xC8,0xF3,//00294HZ ,40x73,0xF4,//00311HZ ,4#0x1E,0xF5,//00330HZ ,50xB6,0xF5,//00349HZ ,5#0x4C,0xF6,//00370HZ ,60xD7,0xF6,//00392HZ ,6#0x5A,0xF7,//00415HZ ,70xD8,0xF7,//00440HZ 1 //120x4D,0xF8,//00466HZ 1# //130xBD,0xF8,//00494HZ 2 //140x24,0xF9,//00523HZ 2# //150x87,0xF9,//00554HZ 3 //160xE4,0xF9,//00587HZ 4 //170x3D,0xFA,//00622HZ 4# //180x90,0xFA,//00659HZ 5 //190xDE,0xFA,//00698HZ 5# //200x29,0xFB,//00740HZ 6 //210x6F,0xFB,//00784HZ 6# //220xB1,0xFB,//00831HZ 7 //230xEF,0xFB,//00880HZ `10x2A,0xFC,//00932HZ `1#0x62,0xFC,//00988HZ `20x95,0xFC,//01046HZ `2#0xC7,0xFC,//01109HZ `30xF6,0xFC,//01175HZ `40x22,0xFD,//01244HZ `4#0x4B,0xFD,//01318HZ `50x73,0xFD,//01397HZ `5#0x98,0xFD,//01480HZ `60xBB,0xFD,//01568HZ `6#0xDC,0xFD,//01661HZ `7 //35};/***************************音乐符号串解释函数****************************/ //入口:要解释的音乐符号串,输出的音调串,输出的时长串changedata(uchar *song,uchar *diao,uchar *jie){uchar i,i1,j;char gaodi; //高低+/-12音阶uchar banyin;//有没有半个升音阶uchar yinchang;//音长uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C调的7个值*diao=*song;for(i=0,i1=0;;){gaodi=0; //高低=0banyin=0;//半音=0yinchang=4;//音长1拍if((*(song+i)=='|') || (*(song+i)==' ')) i++; //拍子间隔和一个空格过滤switch(*(song+i)){case ',': gaodi=-12;i++;//低音break;case '`': gaodi=12;i++; //高音break;}if(*(song+i)==0) //遇到0结束{*(diao+i1)=0; //加入结束标志0*(jie+i1)=0;return;}j=*(song+i)-0x30; i++; //取出基准音j=jie7[j]+gaodi; //加上高低音yinc: switch(*(song+i)){case '#': //有半音j加一个音阶i++;j++;goto yinc;case '-': //有一个音节加长yinchang+=4;i++;goto yinc;case '_': //有一个音节缩短yinchang/=2;i++;goto yinc;case '.': //有一个加半拍yinchang=yinchang+yinchang/2;i++;goto yinc;}*(diao+i1)=j; //记录音符*(jie+i1)=yinchang; //记录音长i1++;}}/******************************奏乐函数***************************************/ //入口:要演奏的音乐符号串void play(uchar *songdata){uchar i,c,j=0;uint n;uchar diaodata[48]; //音调缓冲uchar jiedata[48]; //音长缓冲changedata(songdata,diaodata,jiedata); //解释音乐符号串TR0=1;while(P1=0xff){for(i=0;diaodata[i]!=0;i++) //逐个符号演奏{tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++) //按照音长延时{for(n=0;n<29500;n++); //29500if(P1!= 0xff)//((!K1)||(!K2)||(!K3)||(!K4))//发现按键,立即退出播放{TR0=0;return;}}TR0=0;for(n=0;n<460;n++); //音符间延时TR0=1;}}TR0=0;}//茉莉花uchar code molihua[]={"33_5_6_`1_`1_6_|55_6_5-|33_5_6_`1_`1_6_|55_6_5-|""5553_5_|665-|32_3_53_2_|11_2_1|"//"3_2_1_3_2.3_|56_`1_5-|23_5_2_3_1_,6_|,5-,61|"//"2.3_1_2-1_,6_|,5--"};//世上只有妈妈好uchar code mamahao[]={"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|""2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"};//小毛驴uchar code xiaomaolv[]={"1_1_1_3_|5_5_5_5_|6_6_6_`1|5-|""4_4_4_6_|3_3_3_3_|2_2_2_2_|5-"};//我是一只菠萝uchar code boluo[]={"1-|2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_`1_7_6_|5_4_2_3_11|""2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_5_2_3_|1---|"};//小星星uchar code xiaoxingxing[]={"1155|665-|4433|221-|""5544|332-|5544|332-|""1155|665-|4433|221-|"};//春天在哪里uchar code chuntian[]={"3_3_3_1_|,5,5_|3_3_3_1_|3-|5_5_3_1_|,5_,5_,5|,6_,7_1_3_|2-|" "3_3_3_1_|,5,5_|3_3_3_1_|3-|5_6_5_6_|5_4_3_1_|,5_3_|2_1_"};//两只老虎uchar code laohu[]={"1231|1231|345-|345-|""5_6_5_4_31|5_6_5_4_31|""151-|151-"};//就是爱你uchar code jiushiaini[]={"3_2_3_4_5,7_1_|1`1_7_7 5_6_|66_5_5_3_2_1_3_|4_,6_,7_1_32|" "3_2_3_4_5,7_1_|1`1_7_7_`3_|3-6_|5_4_.4_5_5-|4_,6_ ,7_1_32._1_|"};//黑白配uchar code heibai[]={"32345-|1,7123-|3,5,611-|"};//找朋友uchar code zhaopeng[]={"5_6_5_6_|5_6_5|5_`1_7_6_|5_6_5"};//数鸭子uchar code shuya[]={"313_3_1|3_3_5_6_5-|6_6_5_5_4_4_4|2_3_2_1_2"};//欢乐颂uchar code huanle[]={"3345|5432|1123|322-|3345|5432|1123|211-|"};//一分钱uchar code yifen[]={"5`1|6_`1_5|3_5_2_3_|5|3_5_6_`1_|5_6_5_3_|5_13_2"};//乐谱方式输入的音乐播放/*******************************主函数****************************************/ void main(void){P1=0xff;P0=SEG[0];TMOD = 0x01; //使用定时器0的16位工作模式TR0 = 0;ET0 = 1;EA = 1;while(1){switch(P1){case 0xfe:while(P1==0xfe){;}P0=SEG[1];play(molihua);SPEAK=0;break;//0 按下相应的键显示相对应的码值case 0xfd:while(P1==0xfd){;}P0=SEG[2];play(yifen);SPEAK=0;break;//1case 0xfb: while(P1==0xfb){;}P0=SEG[3];play(mamahao);SPEAK=0;break;//2case 0xf7: while(P1==0xf7){;}P0=SEG[4];play(xiaomaolv);SPEAK=0;break;//3case 0xef: while(P1==0xfe){;}P0=SEG[5];play(laohu);SPEAK=0;break;//4case 0xdf: while(P1==0xdf){;}P0=SEG[6];play(huanle);SPEAK=0;break;//5case 0xbf: while(P1==0xbf){;}P0=SEG[7];play(chuntian);SPEAK=0;break;//6case 0x7f: while(P1==0x7f){;}P0=SEG[8];play(zhaopeng);SPEAK=0;break;//7default: break;}TR0 = 0;}}五、问题分析与解决方法问题一:仿真问题仿真图画好之后,开始运行,数码管和发光二极管都没有反应。
基于51单片机的音乐盒设计摘要:随着科技越来越发达,单片机技术也越来越纯熟,单片机的应用也越来越广泛,可以说几乎很难找到哪个领域没有单片机的踪迹。
如今,单片机在各个领域都起着至关重要的作用。
以单片机为核心元件的数字音乐盒。
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点。
该数字音乐盒具有体积小,重量轻,能演奏各种各样的音乐,功能多,外观绚丽多彩,使用非常方便等诸多优点。
而且具有一定的开发价值。
基于AT89C51单片机的可控数字音乐盒的程序设计。
通过PROTEUS仿真软件对硬件电路进行仿真制作以及利用KEIL软件对音乐盒源程序进行C 语言编译,而设计制作出的一个多功能数字音乐盒。
音乐盒通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐。
程序通过把乐谱转化成相应的定时常数来驱动发音设备演奏出悦耳动听的音乐。
一共设计了五首歌曲,同时还设计了三种LED彩灯的变化花样。
在演奏歌曲时彩灯随音调闪烁。
在停止演奏歌曲时三种彩灯花样开始闪烁。
歌曲和花样均可随意切换。
与此同时,数码管也不断变化数字,以此显示歌曲和彩灯花样的序号。
关键词: AT89C51;KEIL;PROTEUS;数字音乐盒;数码管1 设计任务要求设计一个基于51单片机的可控数字音乐盒,分析电路工作原理,设计电路图,编译有关音乐的程序,实现通过开关按钮控制播放五首不同的音乐的目的。
2电路设计2.1单片机和音乐盒硬件的功能随着当代单片机技术的突飞猛进,单片机的功能也越来越强大,主要包括有:(1)单片机可靠性高,处理功能强,速度快;(2)系统结构简单,使用方便,实现模块化;(3)单片机集成度高;(4)控制功能强大;(5)低电压,低功耗,便于生产便携式产品。
2.2 AT89C51芯片的功能AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
俗称单片机。
引脚功能:P0.0-P0.7:为一个8位漏级开路双向I/O口;P1.0-P1.7:是一个内部提供上拉电阻的8位双向I/O口;P2.0-P2.7:为一个内部上拉电阻的8位双向I/O口;P3.0-P3.7:管脚是8个带内部上拉电阻的双向I/O口;P3.0:RXD(串行输入口);P3.1:TXD(串行输出口);P3.2:INT0(外部中断0);P3.3:INT1(外部中断1);P3.4:T0(记时器0外部输入);P3.6:WR(外部数据存储器写选通);P3.7:RD(外部数据存储器读选通);EA:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
摘要本作品利用单片机的IO口对蜂鸣器输送不同频率的信号,让单片机发出不同音调的声音。
以“新年好”曲调为基础以C51为语法编出51音乐盒的程序。
根据电路图焊接了蜂鸣器模块与TX-1C51开发板用杜邦线进行连接。
除了蜂鸣器外接模块外还使用了1602液晶显示模块作为外设连接。
本人对单片机演奏音乐比较有兴趣。
在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较有兴趣而又不知其解的朋友能有所启迪。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
关键词: 51单片机音乐盒液晶屏幕显示模块蜂鸣器模块 C51目录1 设计任务目的与要求 (1)1.1任务设计目的 (1)1.2任务要求 (1)2 模块及其原理介绍 (2)2.1蜂鸣器模块 (2)2.21602液晶显示模块 (2)3 设计方案 (3)3.1软件设计 (3)3.2硬件设计 (3)4 实验结果与数据分析 (4)4.1测试步骤 (4)4.2实验现象 (4)5 结论与问题讨论 (4)5.1完成设计的要求程度 (4)5.2遇到的问题以及解决办法 (4)5.3存在的不足及改进思路 (4)参考文献 (5)附录 (5)附录一:C51程序 (5)1 设计任务目的与要求1.1任务设计目的本人对单片机演奏音乐比较有兴趣,所以选择51音乐盒的题目。
本设计通过两个模块的制作并与开发板一并使用。
通过本次设计不止熟悉焊接和熟悉各个电子元器件,而且还提高了对外设模块使用单片机编程的技能。
实验名称:基于51单片机的音乐盒和电子琴的设计实验目的:通过设计一个以51单片机为核心的音乐盒和电子琴实现对前面几次实验的综合,并且可以更加深入的掌握单总线器件和I2C总线器件的应用,掌握ZLG7290器件中LED和键控的原理,掌握蜂鸣器的使用,掌握16X16 LED点阵的使用,熟悉串行总线的操作技巧。
实验原理:1、I2C总线的原理I2C典型的传输格式:根据上图我们可以看到:每一次传输由START开始,数据位是从高位(MSB)传起,每个Byte接收方有ACK (在第9个Clock拉低SDA),结束传输有STOP标记。
将开始信号与结束信号放大展开:START:SCL维持高,SDA从高到低STOP:SCL维持高,SDA从低到高24WC02的写操作单字节:页操作:24WC02的读操作指定地址读时序:首先要对所选从器件地址和字节地址进行伪写操作(从器件地址R/-W=0);然后,重新发START和从器件地址;得到ACK后,可以读取数据。
连续读时序:可由指定地址读和立即读方式启动连续读模式;在从器件发送完一个8 位字节数据后,主器件产生一个ACK来告知从器件提供更多的数据。
对应每个主器件的ACK,从器件将发送一个8位数据字节;当主器件不发送应答信号而发送停止位时结束此操作。
2、ZLG7290LED显示和键盘的检测ZLG7290是一种I2C接口键盘及LED驱动管理器件,提供数据译码和循环、移位、段寻址等控制。
它可采样64个键盘或传感器,单片即可完成LED显示、键盘接口的全部功能。
ZLG7290的从地址为70H,器件内部通过I2C总线访问的寄存器地址范围为00H~17H,任一寄存器都可按字节直接读写,并支持自动增址功能和地址翻转功能。
LED显示部分:在每个显示刷新周期,ZLG7290按照扫描位数寄存器制定的显示数N,把显示缓存DpRam0~DpramN的内容按先后循环送入LED驱动器实现动态显示,减少N值可提高每位显示扫描时间的占空比,提高LED亮度,显示缓存中的内容不收影响。
课程名称:微机原理课程设计题目:基于51单片机的音乐盒设计随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本设计是一个基于STC89C52RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。
使用两个按键控制音乐盒,一个按键用来控制歌曲的播放、暂停以及换曲,另一个用来控制数码管上歌曲次序的变化,本音乐盒共有三首歌曲。
播放歌曲时,相应歌曲对应相应数码管上歌曲次序的显示。
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。
随后依照仿真布局在Altium Designer软件中绘制PCB单面板,检查无误后制成实物单面覆铜板。
关键字:STC89C52RC KEIL PROTEUS PCB一、设计任务与要求 .............................................................................................. - 4 -1.1 设计任务....................................................................................................................... - 4 -1.2 设计要求....................................................................................................................... - 4 -1.3 发挥部分....................................................................................................................... - 4 -二、方案总体设计 .................................................................................................. - 5 -2.1 方案列举....................................................................................................................... - 5 -2.2 方案论证....................................................................................................................... - 5 -2.3 总体设计原理............................................................................................................... - 5 -三、硬件设计 .......................................................................................................... - 6 -3.1 STC89C52RC芯片 ....................................................................................................... - 6 -3.2 晶振电路....................................................................................................................... - 7 -3.3 开关按键电路............................................................................................................... - 8 -3.4 P0口上拉电阻 .............................................................................................................. - 8 -3.5 复位电路....................................................................................................................... - 9 -3.6 蜂鸣器电路................................................................................................................. - 10 -3.7 电源电路..................................................................................................................... - 11 -3.8 一位共阴数码管......................................................................................................... - 12 -四、软件设计 ........................................................................................................ - 14 -4.1 软件设计程序流程图................................................................................................. - 14 -4.2 软件头文件定义以及字符类型定义......................................................................... - 15 -4.3 音频、音调程序设计................................................................................................. - 15 -4.4 按键与蜂鸣器接口端程序设计................................................................................. - 16 -4.5 外部中断程序设计..................................................................................................... - 16 -4.6 定时程序设计............................................................................................................. - 17 -4.7 延时程序编写............................................................................................................. - 18 -4.8 主程序的编写............................................................................................................. - 18 -五、系统仿真与调试 ............................................................................................ - 20 -5.1 仿真平台..................................................................................................................... - 20 -5.2 仿真调试..................................................................................................................... - 20 -5.3 测试总结..................................................................................................................... - 21 -六、PCB单面板制作 ........................................................................................... - 22 -6.1 绘制平台..................................................................................................................... - 22 -6.2 原理图的绘制............................................................................................................. - 22 -6.3 PCB单面板的绘制 ..................................................................................................... - 22 -七、设计总结与心得体会 .................................................................................... - 24 -7.1 设计总结..................................................................................................................... - 24 -7.2 心得体会..................................................................................................................... - 24 -八、参考文献 ........................................................................................................ - 25 -附录一:源程序 .................................................................................................... - 26 -一、设计任务与要求1.1 设计任务制作一个简易音乐盒,要求利用若干开关按键控制音乐播放并利用一位数码管显示相关消息。
基于c51单片机音乐盒设计.音乐盒是一种通过内置于其中的机械结构或者电流来制造音乐的一种装置,它是一种完全可以自己动手制作的小型装置。
音乐盒可以引起大家的兴趣,并且对于音乐爱好者而言,它更是不可或缺的工具。
而在本文中,我们将介绍一种基于c51单片机的音乐盒设计方案。
首先,我们需要了解c51单片机的一些基本特性和特点,这样才能更好地去理解音乐盒的设计方案。
c51单片机是一种非常常见的单片机,它具有操作简单,可扩展性强,代价低廉等特点,在市场中被广泛的应用在各种电子产品中。
基于c51单片机的音乐盒设计方案主要包括硬件部分和软件部分,接下来我们将详细介绍这两部分的内容。
硬件设计:1、音源部分音乐盒的核心部分是音源,所以我们需要采用一种高质量、高保真度的音源。
音源可以采用蜂鸣器、扬声器等。
2、时钟部分c51单片机的时钟部分是控制器的基础。
我们采取计数器,通过方波的输出频率来控制计数器进行计数,并通过定时器来实现时钟的计数。
时钟部分包括一定的高级电路,这些电路包括晶振、电容、电阻等等。
3、输入输出端口为了方便对音乐盒进行控制,我们需要在音乐盒中设置一些输入输出端口,这些端口可以通过外部设备来实现,可以通过按键来控制音乐盒的运作。
1、程序框架首先,我们需要确定程序的框架。
程序框架分为以下几个部分,包括时钟设置、中断处理、函数处理、主函数等。
时钟设置部分主要包括两个功能:时钟的计时和频率控制。
这些设置应该与硬件的时钟部分配合符合音乐节拍和时间的要求,通过设计、调整达到准确、稳定的效果。
3、中断处理音乐盒的中断处理部分是整个程序的核心,它包括多种中断请求,包括时钟中断、按键事件中断等。
这些中断请求可以被设置成高优先级或低优先级,以实现更好的控制效果。
4、功能处理对于在音乐盒运行中,需要频繁进行操作的函数,我们应该单独设置一个处理函数,并将其函数调用编入到主函数中。
5、主函数最后,我们需要编写主函数,以实现音乐盒在不同的运行模式中切换,及处理各种异常情况。
基于51单⽚机的⾳乐盒的设计与实现沈阳航空航天⼤学课程设计报告课程设计名称:单⽚机系统综合课程设计课程设计题⽬:基于51单⽚机的⾳乐盒的设计与实现沈阳航空航天⼤学课程设计报告⽬录第1章总体设计⽅案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3实验环境 (2)第2章详细设计⽅案 (3)2.1硬件电路设计 (3)2.2主程序设计 (6)2.3功能模块的设计与实现 (7)第3章结果测试及分析 (10)3.1结果测试 (10)3.2结果分析 (10)参考⽂献 (11)附录1:元件清单 (12)附录2:总电路图 (13)附录3:程序代码 (14)第1章总体设计⽅案1.1设计原理电⼦⾳乐已⼴泛地应⽤于社会⽣活的各个领域。
其类型从⾳乐卡⽚到CD、MP3 等多种多样,制作原理也各不相同。
声⾳是通过振动产⽣的。
单⽚机对某⼀I/O引脚以⼀定的频率循环置1和清0,这⼀引脚便产⽣⼀定频率的⽅波,该⽅波通过放⼤后作⽤于扬声器便产⽣⼀定频率的声⾳。
若改变输出⽅波的频率,产⽣的声⾳也就改变了。
通过控制输出⽅波的时间长短,声⾳的长短也就得到控制。
因此,根据乐谱,单⽚机就可产⽣电⼦⾳乐。
⾳乐中最关键的两个要素是⾳符和节拍。
单⽚机控制的⾳乐发⽣器系统由硬件电路和软件两部分构成。
利⽤单⽚机控制的电⼦⾳乐发⽣器软硬件上具有独特的优点,系统的开发周期短,成本低,电路制作容易。
更换歌曲时,硬件电路⽆需作任何修改,只需修改软件即可实现。
软件编程时,可⽤51系列单⽚机的汇编语⾔。
同时还可根据个⼈的习好通过软件改变节拍的延时时间,增加电⼦⾳乐的趣味性。
1.2 设计思路采⽤汇编语⾔程序设计的⽅法结合硬件电路设计⽅法,利⽤Lab6000实验箱上已有芯⽚来实现⾳乐盒的各项功能。
1)提出⽅案利⽤定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O⼝反相就可在I/O 脚上得到此频率的脉冲。
当键盘有键按下时,判断键值,启动计数器T0,产⽣⼀定频率的脉冲,驱动蜂鸣器,放出乐曲。
单片机课程设计题目基于C51单片机的电子音乐盒学院机电与信息工程学院专业电子信息工程年级 XXXX级学号XXXXXXXXXXXXXXXXXXXXXXXXXXX姓名 XXXXXXXXXXXXXXX指导教师 XXXXX成绩目录摘要 (1)Abstract (1)第一章绪论 (2)1.1背景 (2)1.2单片机概述 (2)1.3目的与意义 (2)第二章总体设计 (3)2.1总体设计 (3)2.2总体方案论证与设计 (3)2.2.1单片机选择 (3)第三章硬件设施 (4)3.1单片机简介 (4)3.2最小系统 (4)3.3按键电路 (4)3.4 LCD1602液晶显示电路 (5)3.5 PCB图 (8)3.6发声模块(功率放大) (8)第四章软件设计 (9)4.1软件模块及发声原理 (10)4.1.1音调的产生 (10)4.1.2节拍的确定 (12)4.2 软件设计流程 (14)4.3 发声程序 (15)4.4 按键电路设计 (16)4.5 LCD1602液晶显示电路设计 (17)4.5.1 LCD显示模块 (17)4.5.2 LCD延时模块 (19)第五章调试 (19)5.1硬件调试 (19)5.2软件调试 (21)5.3联合调试 (22)第六章总结 (22)附录1 总原理图 (23)附录2 程序 (23)1.主函数模块 (23)2.LCD模块 (30)3. LCD参数设定头文件 (31)4.LCD延时函数 (32)摘要本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路、喇叭以及LCD1602液晶显示系统组成。
本音乐盒共有四首歌曲,用3个按键控制上一曲下一曲以及暂停和恢复。
播放歌曲时,喇叭发出某个音调。
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。
摘要:随着人类社会的不断繁荣与发展,人们对自身生活品质的要求也变得越来越高,在听觉方面传统的音乐盒能带给人们的更多的只是美好的回忆,而由于单片机具有的体积小、成本低、运算快和功耗小等特点得到了人们越来越广泛的运用。
本设计是一个基于STC89C52系列单片机的音乐盒,依据单片机技术及原理,通过硬件电路的制作以及软件编译,设计制作出一个插卡式音乐盒。
该音乐盒主要是由按键电路、继电器电路、LCD显示电路以及扬声器组成。
使用五个按键控制音乐盒,分别用来控制音乐盒的播放/暂停,复位,切换上一曲/下一曲,本音乐盒利用优盘共存有五首歌曲。
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,之后下载进51单片机中使用。
关键词:单片机音乐盒 LCDAbstractWith the continuous development of human society, people's quality of life demands are increasingly high, the traditional music box in the auditory aspectto bring people more good memories, but due to the microcomputer has the advantages of small volume, low cost, low power consumption and fast operation has been more and more extensive use. The design is based on the music box STC89C52 Series MCU, based on single chip microcomputer principle, the hardware circuit and software compilation, designed to produce aplug-in music box. The music box is composed of a key circuit, a relay circuit,LCD display circuit and a loudspeaker. The use of four buttons control themusic boxes, music boxes were used to control the play / pause, switch on a /the next song, the music box using the USB coexist with five songs. The design of programming on the music box and debug source code using KEIL programming software, then download into 51 single chip processor.Keywords: SCM Music Box LCD目次目次 (3)1 引言 (4)1.1 音乐盒的意义 (4)1.2 研究内容 (5)2.1系统总体框架图 (6)2.2音乐盒的设计原理 (6)2.3 单片机芯片概述 (6)3 硬件电路设计 (8)3.1 单片机最小系统原理图 (8)3.1.1 复位电路 (8)3.1.2 晶振电路 (9)3.1.3时钟电路 (9)3.2 LCD显示模块 (9)3.3 继电器模块 (11)3.3.1电磁继电器的工作原理和特性 (11)3.3.2 固态继电器的工作原理和特性 (12)3.3.3 继电器主要产品技术参数 (12)3.4 按键模块 (12)3.5 其它 (13)4 软件设计 (14)4.1 软件总体流程图 (14)4.2播放/暂停子程序 (15)4.3 LCD显示模块软件设计 (17)4.3.1 LCD的初始化函数 (17)4.3.2 LCD与继电器的函数 (17)5 系统实现 (19)5.1 硬件调试 (20)5.1.1 按键控制的实现 (20)5.1.2 LCD显示 (20)5.1.3 其他 (21)总结 (22)致谢................................................ 错误!未定义书签。
基于51单片机的音乐盒设计
题目要求:
1. 查阅资料,了解单片机控制单音喇叭发声原理;
2. 设计基于单片机的电子音乐盒;
3.通过按钮可选择不同的音乐,切换3首音乐;
运行仿真图:
程序完整代码:
#include<reg51.h>
sbit fx_buzzer=P3^7; //蜂鸣器音乐输出,可根据需要自行修改
sbit music_1 = P2^0; //第一首音乐
sbit music_2 = P2^1; //第二首音乐
sbit music_3 = P2^2; //第二首音乐
unsigned int tone; //简谱音调计数
unsigned char fx_timeh,fx_timel,music,speed; //fx_timeh:TH0初值,fx_timel:TL0初值; music =1播放,=0停止
unsigned char code fx_tone0[]={ //音调对应定时器初值
0xFC,0x8E, 0xFC,0xED, 0xFD,0x43, //中音
0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D,
0xFE,0x47, 0xFE,0x76, 0xFE,0xA1, //高音
0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16
};
unsigned char code songbie[]={//送别
0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x2c,0x04, 0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
0xff};
unsigned char code qnzl[]={ //千年之恋
0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,
0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,0x32,0x31,
0x21,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,
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,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,
0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,
0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,
0x73,0x62,0x53,0x42,0x82,0x88,0x02,0x74,0x93,0x89,
0xff};
unsigned char code laohu[]={ //两只老虎
0x14,0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,
0x34,0x44,0x58,0x34,0x44,0x58,
0x53,0x61,0x53,0x41,0x34,0x14,
0x53,0x61,0x53,0x41,0x34,0x14,
0x14,0x54,0x18,
0x14,0x54,0x18,
0xFF};
unsigned char keyValue; //存储按下的键值
void init() //初始化函数
{
EA=1;//开总中断
TMOD=0x10;//定时器0工作在方式1
TH1=0;
TL1=0;
ET1=1;
music=1; //默认播放
tone=0;
speed=20; //播放速度
}
void fx_delay(unsigned char i) //音长延时函数
{
unsigned int j,k;
for(i;i>0;i--)
for(k=speed;k>0;k--)
for(j=625;j>0;j--);
}
void play(unsigned char *temp) //音阶播放函数
{
if(speed<1) speed=1; //速度范围设定
if(speed>60) speed=60;
while(1)
{
if(!music) break;
if(music==2) {tone=0;music=1;break;} //配合按钮换歌
if(temp[tone]==0xff){tone=0;break;};
if(temp[tone]/16!=0) //取高4位的音阶判断
{
fx_timeh=fx_tone0[temp[tone]/16*2-2];
fx_timel=fx_tone0[temp[tone]/16*2-1];
TR1=1;
}
fx_delay(temp[tone]%16); //取数的低4位
TR1=0;
tone++;
}
TR1=0;
}
void fx_tone() interrupt 3 //用于产生各种音调
{
TH1=fx_timeh;
TL1=fx_timel;
fx_buzzer=~fx_buzzer;
}
void Delay10ms(unsigned int n) //延时函数,延时10ms {
unsigned char a, b;
for (; n>0; n--)
{
for (b=38; b>0; b--)
{
for (a=130; a>0; a--);
}
}
}
void EX0_INT(void) interrupt 0 //外部INT0
{
if(tone !=0 ) music = 2;
if(music_1 == 0)
{
Delay10ms(1);
if(music_1 == 0)
{
while(music_1 == 0); //等待松开按钮
keyValue = 1; //播放第一首音乐-送别
}
}
if(music_2 == 0)
{
Delay10ms(1);
if(music_2 == 0)
{
while(music_2 == 0); //等待松开按钮
keyValue = 2; //播放第二首音乐
}
}
if(music_3 == 0)
{
Delay10ms(1);
if(music_3 == 0)
{
while(music_3 == 0); //等待松开按钮
keyValue = 3; //播放第三首音乐
}
}
}
//主函数
void main()
{
init(); //初始化函数
//play(song1); //音阶播放函数
IT0=1; //外部中断INT0位下降沿触发
EX0=1; //开INT0中断允许
EA=1;
while(1)
{
if(keyValue == 1)
{
play(songbie); //播放第一首音乐-送别
}else if(keyValue == 2){
play(qnzl); //播放第二首音乐
}else if(keyValue == 3){
play(laohu); //播放第三首音乐
}
}
}
Proteus仿真图:。