资源描述:
《硬件课程设计报告--基于51单片机音乐播放器设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、硬件课程设计报告姓名:曹阳班级:信科10-2班学号:08103493时间:2012.12.20基于51单片机音乐播放器设计1.概述基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,我设计了一款特殊的"音乐播放器",本播放器可实现播放、切换、复位等功能。由于时间及条件限制,本设计实现了一种简单的
2、音乐播放器,其核心器件采用STC89C52单片机,本播放器具有电路简单,易于拓展等特点。在此基础上,可以添加按键,LED显示屏等模块,实现切换歌曲,歌名显示等功能。2.硬件电路设计2.1设计目的设计一个音乐播放器,有五个按键及控制按钮:播放、切换、复位,通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。演奏结束时,LED灯亮。2.2电路设计原理LED显示电路电源STC89C52发声电路按键控制电路复位电路12M晶振电路图1电路设计原理图3.1主程序流程图开始查询按键按下?初始化NO播放歌曲音乐播放完毕LED显示Y3.2节拍
3、的产生音乐中的节拍用延时时间产生。例如:1拍=0.4s,1/2=0.2s,以此类推。只要求出1/2拍的延时时间,其余节拍是他的倍数就行了。得到音符并加上起对应的节拍就可得到音调。以此将音调连起来就可获得曲子。3.3程序设计播放器程序#include#defineucharunsignedcharbitflag;//标志音乐输出脚电平的高低sbitbeep=P1^4;ucharptr=0x00;//取音符ucharhigh;//计数器高位ucharlow;//计数器低位//本曲谱为"新年好",前两个十六进制表示发声频率,后一个表
4、示发声时间,0xFF,0xFF表示休止符//0x00表示结束//1_1_1.5ucharcodemusic[]={0xFC,0x44,0x7F,0xFC,0x44,0x7F,0xFC,0x44,0xFF,0xFA,0x68,0xFF,//3_3_310xFD,0x23,0x7F,0xFD,0x23,0x7F,0xFD,0x23,0xFF,0xFC,0x44,0xFF,//1_3_550xFC,0x44,0x7F,0xFD,0x23,0x7F,0xFD,0x82,0xFF,0xFD,0x82,0xFF,//4_3_2-0xFD,0x23,0x7F
5、,0xFD,0x23,0x7F,0xFC,0xAC,0xFF,0xFF,0xFF,0xFF,//2_3_440xFC,0xAC,0x7F,0xFD,0x23,0x7F,0xFD,0x34,0xFF,0xFD,0x34,0xFF,//3_2_310xFD,0x23,0x7F,0xFC,0xAC,0x7F,0xFD,0x23,0xFF,0xFC,0x44,0xFF,//1_3_2.50xFC,0x44,0x7F,0xFD,0x23,0x7F,0xFC,0xAC,0xFF,0xFA,0x68,0xFF,//.7_2_1-0xFC,0x0C,0x7F,
6、0xFC,0xAC,0x7F,0xFC,0x44,0xFF,0xFF,0xFF,0xFF,0x00//结束};voidInit(void);//初始化函数voidDelayMs(unsignedinttime);//毫秒级延时函数voidmain(){uchartime;Init();TH0=high;TL0=low;while(1){if(music[ptr]!=0xFF&&music[ptr]!=0x00)//判断是否是正常音符{TR0=0;beep=1;DelayMs(10);//间歇TR0=1;high=music[ptr];//取设置
7、频率数值的高8位low=music[ptr+1];//取设置频率数值的低8位time=music[ptr+2];//取发声时间DelayMs(time);ptr+=3;}elseif(music[ptr]==0xFF)//判断是否是休止符{time=music[ptr+2];DelayMs(time);ptr+=3;}else//结束符,停止2秒后继续{TR0=0;beep=1;DelayMs(2000);ptr=0;}}}voidCount1(void)interrupt1//定时器0中断{TH0=high;TL0=low;if(flag==
8、0)//改变P1^4引脚电平{beep=0;flag=1;}else{beep=1;flag=0;}}voidInit()//中断初始化{TMOD=0