51单片机音乐播放器程序
基于51单片机的音乐播放器的软硬件方案设计书大学本科方案设计书
本科生毕业设计(论文)学院:电子与电气工程学院专业:自动化学生:郝帅臣指导教师:刘忠超完成日期 2013 年 5 月南阳理工学院本科生毕业设计(论文)基于51单片机的音乐播放器的软件设计Software Design of Music Player Based on 51 MCU总计: 33 页表格: 3 个插图: 15 幅南阳理工学院本科毕业设计(论文)基于51单片机的音乐播放器的软件设计Software Design of Music Player Based on 51 MCU学院:电子与电气工程学院专业:自动化学生姓名:郝帅臣学号: 1109624064指导教师(职称):刘忠超(讲师)评阅教师:完成日期:南阳理工学院Nanyang Institute of Technology基于51单片机的音乐播放器的软件设计自动化专业郝帅臣[摘要]本课题完成了基于51单片机的音乐播放器的软件设计。
论文主要介绍了对U盘所存储的MP3、WMA或MIDI格式的文件识别、提取以及音频解码程序实现的方法,通过与硬件调试表明所设计的音乐播放器可以通过按键选择歌曲以及控制音量,同时还可以通过显示屏来显示所播放的歌曲名。
声音的播放可以通过扬声器或耳机进行,基本实现了音乐播放器的功能。
[关键词]单片机;音乐播放器;U盘文件读取;音频解码Software Design of Music Player Based on 51 MCUAutomation Specialty Hao Shuai-chenAbstract:This topic finishes the software design of the music player based on the 51 microcontroller. The paper mainly introduces the method of identification, extraction and audio decoding program to the storing the U disk MP3, WMA or MIDI format file. At the same time the hardware debugging shows that the music player can select the songs and control the volume through the keyboard, at the same time through the screen display the song name. The sound can play through the speakers or headphones. The design basically realizes the function of music player.Key words:Single chip microcomputer; music player; u disk file reading; audio decoding目录1 引言 (1)1.1 设计背景 (1)1.2 设计意义 (1)1.3 理论分析与方案论证 (1)1.3.1 理论分析 (1)1.3.2 设计方案论证 (2)2 系统硬件原理及概述 (3)2.1 STC12C5A60S2处理器介绍 (3)2.2 系统硬件电路综述 (3)2.2.1 硬件系统总体设计方案 (3)2.2.2 USB总线的通用接口芯片CH375电路 (4)2.2.3 LCD12864显示电路 (5)2.2.4 按键控制电路 (5)2.2.5 音频解码芯片VS1003电路 (5)3 系统软件设计 (6)3.1 软件开发平台 (6)3.2 系统的软件设计 (7)3.2.1 软件总体分析 (7)3.2.2 CH375软件系统设计 (10)3.2.3 CH375模块的U盘数据读取程序设计 (11)3.2.4 VS1003模块的MP3文件播放程序设计 (13)3.3 系统流程图 (15)4 系统调试结果及分析 (16)结束语 (18)参考文献 (19)附录 (21)致谢 (36)1 引言1.1 设计背景随着电子技术的发展,MP3播放器向大容量、高音质、小巧便携不断发展。
基于51单片机的音乐播放器设计
目录摘要 (1)Abstract (1)引言 (1)1系统主要功能 (2)2设计原理 (2)2.1STC89C51单片机的介绍 (2)2.2音乐发生器设计流程及思路 (2)2.3音频脉冲和音乐节拍的实现 (3)2.4音频功放 (5)3系统设计 (5)3.1硬件电路设计 (5)3.2软件设计 (6)3.3系统仿真 (7)结论 (8)参考文献 (8)基于51单片机的音乐播放器设计学生姓名:张家义学号:20095044005学院:物理电子工程学院专业:电子科学与技术指导教师:仓玉萍职称:讲师摘要:本音乐播放器是利用STC89C51单片机结合内部定时系统及数码管显示,设计一个简易的微电脑音乐盒。
本文分析了基于51单片机的音乐播放器的硬件电路和软件的设计的具体过程,包括数据处理子程序的设计、显示子程序的设计,最后针对仿真过程遇到的现象进行了具体的分析与说明。
关键词:STC89C51;音乐播放;中断51 Microcontroller-based Music Player DesignAbstract: The music player is the use of STC89C51 with combination of single-chip timing system and the digital display, design a simple microcomputer music box. This article analyses the music player based on 51 single chip computer hardware circuit and software specific to the design process, including the design of data processing programs and display , And at last, explaining the simulation process for analysis and description of the specific phenomenon encountered.Key words: STC89C51 ; music player; interrupt引言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
(精品)51单片机音乐播放器程序【整理】
(精品)51单片机音乐播放器程序【整理】/*-----------------------------------------------名称:音乐播放日期:2009.5修改:无内容:------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit speaker=P1^2; //定义音乐输出端口,需要连接到对应的喇叭,请参考电路图unsigned char timer0h,timer0l,time;//世上只有妈妈好数据表code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};// 音阶频率表高八位code unsigned char FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;// 音阶频率表低八位code unsigned char FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};/******************************************************************/ /* 延时函数 *//******************************************************************/ void delay(unsigned char t){unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++){for(t2=0;t2<8000;t2++){;}}TR0=0;}/******************************************************************/ /* 定时器中断函数 *//******************************************************************/ void t0int() interrupt 1{TR0=0;speaker=!speaker;TH0=timer0h;TL0=timer0l;TR0=1;}/******************************************************************/ /* 音乐处理函数 *//******************************************************************/ void song(){TH0=timer0h;TL0=timer0l;TR0=1;delay(time);}/******************************************************************/ /* 主函/******************************************************************/ void main(void){unsigned char k,i;TMOD=1; //置CT0定时工作方式1EA=1;ET0=1;//IE=0x82 //CPU开中断,CT0开中断while(1){i=0;while(i<100){ //音乐数组长度,唱完从头再来k=sszymmh[i]+7*sszymmh[i+1]-1;timer0h=FREQH[k];timer0l=FREQL[k];time=sszymmh[i+2];i=i+3;song();}}}。
基于51单片机的音乐播放器[1]
目录一、概述:_____________________________________________________________ 1二、实验目的:_________________________________________________________ 1三、实验设计:_________________________________________________________ 1四、调试与仿真:_______________________________________________________ 5五、板子外观:________________________________________________________ 15六、设计及调试中的体会:______________________________________________ 16一、概述:现当今,单片机的应用无处不在。
利用单片机控制的万年历也多不胜举。
时钟芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛。
它有功能多﹑价格优﹑外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青昧。
本实验,用80C51单电机及少数外围实现音乐播放器功能,并伴有彩灯闪烁。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
因此,使用C语言进行程序设计已成为软件开发的一个主流。
C 语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可靠性,便于改进和扩展,从而研制出规模更大、性能更完备的系统。
因此,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
设计时采用Keil C软件编程,用protues软件仿真,核心器件采用灵活性高且价格低廉的A T89C51芯片。
设计完成后系统可播放自编歌曲,同时发光二极管随着歌曲的不同而闪烁。
用51单片机实现的音乐程序
uint code notefreq[]={ 523, 587, 659, 698, 784, 880, 988,
+ _9 ~! I$ V8 V% L
: h+ H. t6 Z* Q% I! q& D/ `1 W{! c# l7 x0 c5 W' h1 C3 x, G2 W9 M
TH0=FreqSandH;
6 C/ U' p, \. } TL0=FreqSandL;
3 q) ?9 o) N( c! Q& { BEEP_PWR=!BEEP_PWR;2 Z8 V7 g8 G3 V
|! @1 S+ B' M' |) t
uchar i=0,ch,halfflg=0;: y e2 s$ _% N7 b3 C* L& j! h$ i
uchar lasttime;
7 q+ H' Q( F t2 w- f) _ uint freq;
; S5 g: L' f4 {& L% k if((ch==' ')||(ch=='|')||(ch=='\r')||(ch=='\n')) {i++; 7 l0 K9 b+ i3 l1 {6 R
continue;}# W6 W9 Y5 N3 Q
if(!ch) {SoundOff(); return;} //乐曲结束则播放完! a* ]8 R* p! T; x! {! A
#include <reg52.h>
基于51单片机的音乐播放器制作讲解
II
目录Βιβλιοθήκη 目录第 1 章 引言................................................................................................................. 1 1.1 选题背景 ................................................................................................................... 1 1.2 设计原理 ................................................................................................................... 1 1.3 单片机简介 ............................................................................................................... 2 1.4 单片机的发展历史 ................................................................................................... 2 1.5 单片机的应用领域及发展趋势 ............................................................................... 2 第 2 章 方案论证......................................................................................................... 5 2.1 设计要求 ................................................................................................................... 5 2.2 系统描述 ................................................................................................................... 5 2.3 设计方案 ................................................................................................................... 6 2.3.1 集成电路 ................................................................................................................ 6 2.3.2 单片机最小系统 .................................................................................................. 10 2.3.3 结论 ...................................................................................................................... 12 第 3 章 硬件设计....................................................................................................... 13 3.1 硬件结构 ................................................................................................................. 13 3.2 中心控制模块 ......................................................................................................... 13 3.3 电源模块 ................................................................................................................. 16 3.4 控制电路 ................................................................................................................. 17 3.5 复位电路 ................................................................................................................. 17 3.6 电路设计所需要的器件 ......................................................................................... 19 第 4 章 软件设计....................................................................................................... 20 4.1 音乐发声设计原理 ................................................................................................. 20 4.1.1 发声原理 .............................................................................................................. 20 4.1.2 单片机产生不同频率脉冲信号的原理 .............................................................. 20 4.1.3 键控子程序 .......................................................................................................... 23 4.1.4 播放/暂停子程序 ................................................................................................. 24 4.1.5 曲目选择子程序 .................................................................................................. 24 4.2 音乐播放程序设计 ................................................................................................. 25
如何编写51单片机音乐程序
如何编写51单片机音乐程序正好做了一个音乐程序,贡献出来给你吧,希望你能满意。
电路连接很简单,在P3.0端口接个蜂鸣器,不过效果一般。
如果想效果好点,就加个放大电路,接个小功率喇叭就行。
因为这里发电路不方便,所以如果需要放大电路,可加我QQ:7468485。
音乐程序的设计原理和程序如下:设计原理⑴总体原理:乐曲中不同的音符,实质就是不同频率的声音。
通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。
⑵单片机产生不同频率脉冲信号的原理:1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。
2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。
计数脉冲值与频率的关系公式如下:N=Fi/2/Fr(N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率)⑶其计数值的求法如下: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=65536-1000000/2/Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1047=65059⑷ C调个音符频率与计数值T的对照表如下表所示:表9.1 C调各音符频率与计数值T的对照表音符频率(Hz)简谱码T值音符频率(Hz)简谱码T值低1DO 262 63628 #4FA# 740 64860#1DO# 277 63731 中5SO 784 64898低2RE 294 63835 #5SO# 831 64923#2RE# 311 63928 中6LA 880 64968低3M 330 64103 #6 932 64994低4FA 349 64103 中7SI 988 65030#4FA# 370 64260 高1DO 1046 65058低5SO 392 64260 #1DO# 1109 65085#5SO# 415 64331 高2RE 1175 65110低6LA 440 64400 #2RE# 1245 65124#6 466 64463 高3M 1318 65157低7SI 494 64524 高4FA 1397 65178中1DO 523 64580 #4FA# 1480 65198⑸每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。
工业大学单片机课程设计-基于51单片机的音乐播放器
湖南工业大学课程设计任务书2014 —2015学年第一学期电气与信息工程学院(系、部)专业班级课程名称:单片机应用系统设计题目:基于51单片机的音乐播放器完成期限:自2014 年12 月15 日至2014 年12 月26 日共 2 周指导教师(签字):年月日系(教研室)主任(签字):年月日1(单片机应用系统)设计说明书(题目)基于51单片机的音乐播放器起止日期:2014 年12 月15 日至2014 年12 月26 日学生姓名班级学号成绩指导教师(签字)电气与信息工程学院(部)2014年12 月26日1湖南工业大学本科课程设计开题报告2014年12月17日2345说明:开题报告作为课程设计答辩委员会对学生答辩资格审查的依据材料之一,此报告应在导师指导下,由学生填写,将作为课程设计成绩考查的重要依据,经导师审查后签署意见生效。
6单片机课程设计报告电气与信息工程学院7一、设计任务:1.本课题以单片机为核心设计一个音乐播放器,完成多曲选择播放控制、停止控制、上一曲、下一曲控制等功能。
音乐播放器利用单片机的定时器产生乐谱的各种频率方波,信号经过放大后由蜂鸣器发出声音,选取某段音乐使单片机连续播放。
设计4个按键:启动、播放/停止、下一曲、上一曲;1位LED 显示器,用来显示所选曲目,在开发板上进行调试。
2.此次设计的音乐播放器具有如下要求:(1)按下P3.2启动键,音乐播放器按照从头到尾的顺序自动播放预先设定的1~3共三首乐曲,全部播放完毕则从头开始。
(2)播放歌曲时,数码管显示正在播放的乐曲序号,相应的歌曲序号彩灯亮起,P2为第一首歌曲指示灯,P2.6、P2.5分别为第二首、第三首歌曲播放指示灯。
(3)P3.4为曲目加一按键,按下之后,播放下一首歌曲。
数码管显示下一曲序号,相应指示灯亮起。
(4)P3.5为上一曲按键,按下之后,播放上一首歌曲。
数码管显示上一曲一曲序号,相应指示灯亮起。
(5)当用户按下暂停键P3.3时,音乐播放器打断正在播放的某一乐曲,用户再次按下暂停键,该乐曲继续播放。
用51单片机播放音乐(附C程序)
用51单片机IO口播放几首音乐(附C程序)以下为51单片机播放音乐简谱的函数库:/*说明************************************************************************曲谱存贮格式 unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important)音高由三位数字组成:●个位是表示 1~7 这七个音符;●十位是表示音符所在的音区:1-低音,2-中音,3-高音;●百位表示这个音符是否要升半音: 0-不升,1-升半音。
音长最多由三位数字组成:●个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n ;●十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音;●百位是符点位: 0-无符点,1-有符点。
调用演奏子程序的格式:Play(乐曲名,调号,升降八度,演奏速度);|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束;|调号(0-11) : 是指乐曲升多少个半音演奏;|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;|演奏速度(1-12000): 值越大速度越快;***************************************************************************/#ifndef __SOUNDPLAY_H_REVISION_FIRST__#define __SOUNDPLAY_H_REVISION_FIRST__#include//**************************************************************************#define SYSTEM_OSC 11059200//12000000 //定义晶振频率12000000HZ#define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔sbit BeepIO = P2^6; //定义输出管脚unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在频率表中的位置unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存//**************************************************************************void InitialSound(void){BeepIO = 1;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; // 计算TL1应装入的初值 (10ms 的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;}void BeepTimer0(void) interrupt 1 //音符发生中断{BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;}//************************************************************************** void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed){unsigned int NewFreTab[12]; //新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表{j = i + Signature;if(j > 11){j = j-12;NewFreTab[i] = FreTab[j]*2;}elseNewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;}SoundLength = 0;while(Sound[SoundLength] != 0x00) //计算歌曲长度{SoundLength+=2;}Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point < SoundLength){SL=Tone%10; //计算出音符SM=Tone/10%10; //计算出高低音SH=Tone/100; //计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率if(SL!=0){if (SM==1) CurrentFre >>= 2; //低音if (SM==3) CurrentFre <<= 2; //高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值 Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿}SLen=LengthTab[Length%10]; //算出是几分音符XG=Length/10%10; //算出音符类型(0普通1连音2顿音)FD=Length/100;LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms)if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) //算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;elseLDiv1=LDiv*SOUND_SPACE;elseLDiv1=LDiv/2; //算出顿音的演奏长度elseLDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; //算出不发音的长度if (SL!=0){TR0=1;for(i=LDiv1;i>0;i--) //发规定长度的音{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;}}if(LDiv2!=0){TR0=0; BeepIO=1;for(i=LDiv2;i>0;i--) //音符间的间隔{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;}}Point+=2;Tone=Sound[Point];Length=Sound[Point+1];}BeepIO = 1;}//**************************************************************************#endif附录:以下为曲谱编码文件,自己可以根据规则,对照简谱编写曲谱编码表。
基于51单片机音乐播放器
三、总体设计………………………………………………5
1.设计整体框图………………………………………5
2.程序流程图…………………………………………6
3.SD模块………………………………………………7
4.功率放大部分………………………………………10
四、电路调试与完成情况……………………………11
[4].于振南.单片机高级外设.视频资料
Summaries:
This design uses STC12C5A60S2 as the master chip, read MP3 song files from the SD card, transplantspetit FAT Files miniaturized lightweight file system, using VS1003 decoder chip,to complyMP3 music player functions. Using oled screen as an interface display, infrared remote control, to achieve the song’s switch, volume change, the menu switch playback modes (including: sequential, random, three loop playback mode) switch. using TDA2822 two-channel audio amplifierasoutput power amplifier.
TDA2822是意法半导体(ST)开发的双通道单片功率放大集成电路,通常在袖珍式盒式放音机(WALKMAN)、收录机和多媒体有源音箱中作音频放大器。具有电路简单、音质好、电压范围宽等特点。
基于51单片机实现的音乐盒播放器
摘要随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。
音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。
目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。
本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。
其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显示器上显示相应播放歌曲的曲名和滚动歌词。
再加上一个开关键来控制歌曲的播放停止。
本设计的目的是培养理论联系实际的学习方法以及独立解决工程实际问题的能力。
能够熟识单片机C51语言的编程特性,及其应用。
能够用C51语言进行编程,能成功的编出较为简单的程序。
关键词:单片机,音乐,蜂鸣器,同步显示AbstractWith the development of electronic technology and computer more and more common use, the single chip microcomputer as two of the organic combination of technology and a wide range of applications and, in some areas has the role that cannot be replaced. Music play function everywhere can use, such as, in the development of children's intelligence toys, and so on. At present, based on the single chip microcomputer music playback, its small size, low price, programming characteristics such as flexible in this field dominate. This course design main content is through the single-chip microcomputer C51 language programming, to produce music notes and beat, the score translated into computer language (note conversion ChengCheng corresponding square wave frequency that is loaded initial value, timer beat converted into a corresponding extended time), and the storage to the single chip microcomputer in advance, and then based on the button again call by MCU is information processing, after amplification, released by the speaker strains, realizing the function of the music played. The main performance can play in ten songs, can use ten numeric keys control play songs, and in LCD screen monitors displayed the corresponding play songs music name and rolling lyrics. Plus a open key to control the songs played to stop. The purpose of this design is to cultivate the theory with the practice as well as independent learning methods solving engineering problem ability. Familiar with single-chip microcomputer C51 language to programming characteristics, and its application. To be able to use language C51 programming, to the success of the make up of the simpler program.Keywords:Microcontroller, music, buzzer, simultaneous display目录课程设计(论文)任务书 ..................................... 错误!未定义书签。
基于51单片机音乐播放器课程设计报告
基于51单片机音乐播放器课程设计报告课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118 指导教师:课程设计时间: 2012-9-20~2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。
并且实时监测红外接收管是否触发中断,来判断是否遥控器按下了播放/暂停键、上一首、下一首,进而实时处理。
并把信息显示在1602液晶上。
音高与频率的对应关系下表:二设计原理图单片机与1602液晶、红外接收管SM0038接线图单片机驱动蜂鸣器电路及红外遥控器键码本次实验所用按键及对应编码:(1)上一首 07 (2) 下一首 15 (3)播放/暂停 09三程序设计框图Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;装入的初值 (10ms的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;PT0 = 0;TR0 = 0;TR1 = 0;EA = 1;void write_cmd(uchar cmd)//1602写命令lcd_rs=0;lcd_w=0;P0=cmd;delay(7);lcd_en=1;delay(6);lcd_en=0;void write_date(uchar date)//1602写数据lcd_rs=1;lcd_w=0;P0=date;delay(7);lcd_en=1;delay(6);lcd_en=0;void init_1602()//初始化1602lcd_en=0;write_cmd(1);write_cmd(0x84);write_cmd(0x38);write_cmd(0x0f);write_cmd(0x06);void inte1_init()//红外中断 // 计算TL1应// 计算TH1应IT1 = 1;//外部中断,下降沿中断EX1 = 1;//开外部中断PX1 = 1;//EA = 1;//开总中断IRIN=1; //读引脚前,先置高void jiema() //红外解码uchar i,j;for(j=0;j<4;j++)irma[j]=0;//清除上次的码for(i=0;i<8;i++)irma[j]=irma[j]>>1;//右移1位while(!IRIN);//等待0.56ms低电平结束time2_init();//启动定时,0.8mswhile(!TF2);//等到0.8ms时间到TR2=0;//关定时器TF2=0;//清标志位if(IRIN)//发送是1,其高电平时间长,大于0.565msirma[j]|=0x80;//把最高位置1while(IRIN);//等待高电平结束,以便于进入下一位的解码 } void Lcd_displays(uchar add,char *s)//1602显示字符串uchar i;write_cmd(add);for(i=0;i<strlen(s);i++)write_date(s[i]);void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)//播放歌曲函数unsigned int NewFreTab[12]; //新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表j = i + Signature;if(j > 11)j = j-12;NewFreTab[i] = FreTab[j]*2;NewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;SoundLength = 0;while(Sound[SoundLength] != 0x00) //计算歌曲长度SoundLength+=2;Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准 TR0 = 0;TR1 = 1;while(Point < SoundLength)SL=Tone%10; //计算出音符SM=Tone/10%10; //计算出高低音 SH=Tone/100; //计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率if(SL!=0)if (SM==1) CurrentFre >>= 2; //低音if (SM==3) CurrentFre <<= 2; //高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿 }SLen=LengthTab[Length%10]; //算出是几分音符XG=Length/10%10; //算出音符类型(0普通1连音2顿音) FD=Length/100;LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms) if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) //算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;LDiv1=LDiv*SOUND_SPACE;LDiv1=LDiv/2; //算出顿音的演奏长度LDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; //算出不发音的长度if (SL!=0)TR0=1;for(i=LDiv1;i>0;i--) //发规定长度的音while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;if(LDiv2!=0)void BeepTimer0(void) interrupt 1 //音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;void inte1inte() interrupt 2 //红外中断,外部中断1 uchar k=10;EX1 = 0;//关外部中断while(k--)//循环十次,一次0.8ms,十次8ms,time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(IRIN)//中间如果出现高电平,就说明不是9MS的引导电平 {EX1 = 1;//则开外部中断,退出中断return;while(!IRIN);//运行到此,说明是引导电平,等待9MS引导结束 k=3;//循环3次,每次0.8ms,总共2.4ms,while(k--)time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(!IRIN)//2.4ms结束如果变低电平,说明是重码,EX1 = 1;return;//开中断,退出中断while(IRIN);//等待4.5ms高电平结束,到此说明是正常红外信号 jiema();//解码程序,包括用户码,和按键码// irfenli();if(irma[2]==0x09||irma[2]==0x15||irma[2]==0x07){//判断按下是哪一个键if(irma[2]==0x09)if(com==0)com=1;com=0;if(com)Lcd_displays(0x80,"START");Lcd_displays(0x80,"PAUSE");else if(irma[2]==0x15)newmusic++;if(newmusic==4)newmusic=1;Lcd_displays(0x80,"NEST ");newmusic--;if(newmusic==0)newmusic=3;Lcd_displays(0x80,"LAST ");switch(newmusic){//更新1602显示case 1:Lcd_displays(0x88,"MUSIC1");break; case 2:Lcd_displays(0x88,"MUSIC2");break; case 3:Lcd_displays(0x88,"MUSIC3");break; }// Lcd_display();EX1 = 1;return;三首歌曲的代码:位于music.h文件内//挥着翅膀的女孩unsigned char code Music_Girl[]={0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03, 0x1B,0x03, 0x1F,0x03,0x1F,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66,0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03, 0x1B,0x03,0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x04,0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03,0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00,0x18,0x02, 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66,0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00}; //同一首歌unsigned char code Music_Same[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01,0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00,0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D,0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01,0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00,0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 };//两只蝴蝶unsigned char code Music_Two[] ={0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04,0x0F,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03,0x10,0x03, 0x10,0x0D, 0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03,0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03,0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02,0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03,0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03,0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03,0x16,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03,0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118 指导教师:课程设计时间: 2012-9-20~2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。
51单片机音乐播放器程序
51单片机音乐播放器程序#include //包含51单片机寄存器定义的头文件sbit sound=P3^6; //将sound位定义为P3.6unsigned int C; //储存定时器的定时常数//以下是C调低音的音频宏定义#define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz #define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz#define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz#define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz#define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz#define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz#define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz//以下是C调中音的音频宏定义#define dao 523 //将"dao"宏定义为中音"1"的频率523Hz#define re 587 //将"re"宏定义为中音"2"的频率587Hz#define mi 659 //将"mi"宏定义为中音"3"的频率659Hz#define fa 698 //将"fa"宏定义为中音"4"的频率698Hz#define sao 784 //将"sao"宏定义为中音"5"的频率784Hz#define la 880 //将"la"宏定义为中音"6"的频率880Hz#define xi 987 //将"xi"宏定义为中音"7"的频率523H//以下是C调高音的音频宏定义#define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz #define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz#define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz #define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz #define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz #define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz#define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz /*******************************************函数功能:1个延时单位,延时300ms******************************************/void delay(){unsigned char i,j;for(i=0;i<300;i++)for(j=0;j<300;j++);}/*******************************************函数功能:主函数******************************************/void main(void){unsigned char i,j;//以下是《知足》的一段简谱unsignedint code f[]={ dao,l_xi,dao ,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,la,mi,la,xi,h_dao,sao,mi,mi,fa,mi,l_la,re,dao,dao,l_xi,dao,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,h_dao,sao,la,xi,h_dao,sao,mi,mi,fa,mi,l_sao,re, dao,l_sao,h_dao,xi, la,fa,re, re,l_sao,xi,la,sao,re,dao,dao,re,mi,fa,fa,la,sao,mi,re,mi,fa,fa,sao,dao,h_dao,xi, la,fa,xi,h_dao,h_re, sao,h_re,xi,h_dao,la,xi,h_dao,h_re,sao,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位unsigned char code JP[ ]={2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,1,1,2,1,1,4,2,1,1,2,1,1,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,3,1/2,1/2,3,1/2,1/2,3,1,4,};EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x00; // 使用定时器T0的模式1(13位计数器)while(1) //无限循环{i=0; //从第1个音符f[0]开始播放while(f[i]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[i];TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0for(j=0;j<="">delay(); //延时1个节拍单位TR0=0; //关闭定时器T0i++; //播放下一个音符}}}/*********************************************************** 函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波************************************************************/ void Time0(void ) interrupt 1 using 1{sound=!sound; //将P3.7引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}。
基于51单片机的音乐播放器的软件设计
本科生毕业设计(论文)学院:电子与电气工程学院专业:自动化**理工学院本科生毕业设计(论文)基于51单片机的音乐播放器的软件设计Software Design of Music Player Based on 51 MCU总计: 33 页表格: 3 个插图: 15 幅** 理工学院本科毕业设计(论文)基于51单片机的音乐播放器的软件设计Software Design of Music Player Based on 51 MCU学院:电子与电气工程学院专业:自动化学生姓名: ***学号: ***指导教师(职称):***评阅教师:完成日期:**理工学院Nanyang Institute of Technology目录1 引言 (1)1.1 设计背景 (1)1.2 设计意义 (1)1.3 理论分析与方案论证 (1)1.3.1 理论分析 (1)1.3.2 设计方案论证 (2)2 系统硬件原理及概述 (3)2.1 STC12C5A60S2处理器介绍 (3)2.2 系统硬件电路综述 (3)2.2.1 硬件系统总体设计方案 (3)2.2.2 USB总线的通用接口芯片CH375电路 (4)2.2.3 LCD12864显示电路 (5)2.2.4 按键控制电路 (5)2.2.5 音频解码芯片VS1003电路 (5)3 系统软件设计 (6)3.1 软件开发平台 (6)3.2 系统的软件设计 (7)3.2.1 软件总体分析 (7)3.2.2 CH375软件系统设计 (10)3.2.3 CH375模块的U盘数据读取程序设计 (11)3.2.4 VS1003模块的MP3文件播放程序设计 (12)3.3 系统流程图 (14)4 系统调试结果及分析 (15)结束语 (17)参考文献 (18)附录 (19)致谢 (20)1 引言1.1 设计背景随着电子技术的发展,MP3播放器向大容量、高音质、小巧便携不断发展。
虽然播放器与存储器的一体化设计,使MP3播放器便于携带,但与此同时他也带来了很多新的问题,比如存储容量固定。
基于51单片机的音乐播放设计
基于51单片机的音乐播放设计摘要为方便人们的日常生活,优化学校、机关等单位的计时系统,采用以单片机为基础设计了一种的自动音乐播放器。
本设计利用单片机AT89S52的定时和计数功能,来完成时间的显示和定时功能。
并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来完成对音乐节拍长度的控制。
通过音频功率放大器,将单片机输出的信号放大,再通过喇叭播放乐曲。
通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过串口接入PC机,这样就能从PC机上将用C语言编写的程序下载到单片机上。
最后可在数码管上显示时间,当定时时间到后,喇叭自动播放一段连续的音乐。
此设计摆脱了传统闹钟的刺耳声音,取而代之的是美妙的音乐,能为人们的日常生活提供准确的计时,且成本低廉,值得推广。
关键词:音乐播放;音频转换;时间显示;ULN2003Music playback design based on 51 single chip microcomputerAbstractFor the convenience of People's Daily lives, to optimize the timing system schools, agencies and other units, on the basis of the single chip microcomputer was adopted to design a kind of automatic music player.This design using the single chip microcomputer AT89S52 timing and counting functions, to complete the time display and timing functions.And, by the setting of the initial value of timer to generate different frequencies of sound, using a timer interrupt to complete control of the beat of the music length.Through the audio power amplifier, MCU output signal amplification, then play the music over the loudspeaker.Through MAX232 chip, can convert the voltage of power supply voltage of PC and microcontroller, through a serial port connected to the PC, so you can from the PC will be written in C language program downloaded to the microcontroller.Finally on the digital tube display time, when the time to regularly, speakers play a continuous music automatically.This design to get rid of the traditional alarm clock sharp voice, instead, the wonderful music, can offer the accurate timing for People's Daily lives, and low cost, is worth promoting.Key words:Music playback;Audio conversion;Time display;ULN2003目录1 总体设计 (1)2 硬件设计 (2)2.1 AT89S52型单片机介绍 (2)2.2 ULN2003及外围电路的设计 (2)2.3 串行通信和MAX232芯片 (3)2.4 AT89S52的定时/计数器概述 (3)2.5 LED显示 (5)3 软件设计 (6)3.1 音乐编程原理及其流程图 (6)3.1.1 产生声音信号 (6)3.1.2 产生节拍信号 (6)3.1.3 音频转换 (7)3.2 时间显示程序设计 (8)4 仿真及调试过程 (9)4.1 硬件调试过程 (9)4.2 软件仿真过程 (9)5 结束语 (11)参考文献 (12)1 总体设计在基于单片机的自动音乐播放器中,采用AT89C52RC型单片机为硬件基础,通过C语言对芯片进行编程。
一种基于51单片机的音乐播放器的设计
一种基于51单片机的音乐播放器的设计何谐;唐大权;张淑廷;陈雪【摘要】The hardware design method of the music player based on MCU STC12C5A60S2 is introduced in this paper. The program design of the music player based on principle of FAT32 file system is studied. In the music player, MCU STC12C5A60S2 is taken as a main controller,SD card as a memory medium of music files and VS1003 chip as a decoder unit. When the player is running,MCU STC12C5A60S2 reads the music file from the SD card and continuously transfers data flow to VS1003 for decoding. In the meantime,the OLED liquid crystal display shows the message of the music in real time. The tested results from experiments show the music player can play the music files in multiple formats fluently if the player is connected with ear phone.%主要介绍一种基于51单片机的音乐播放器的硬件设计方法,并研究在FAT32文件系统下音乐播放器的程序设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//以下是C调高音的音频宏定义
#define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz
#define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz
#define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz
dao,la,xi,
h_dao,la,xi,
h_dao,h_re,
sao,
0xff}; //以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsigned char code JP[ ]={
2,1,1,
2,2,
2,1,1,
4,
2,1,1,
2,2,
1,1,1,1,
4,
2,1,1,
2,1,1,
2,1,1,
4,
2,1,1,
2,1,1,
1,1,1,1,
4,
2,1,1,2,Leabharlann ,2,1,1,4,
2,1,1,
2,2,
1,1,1,1,
4,
2,1,1,
2,2,
2,1,1,
4,
2,1,1,
2,1,1,
1,1,1,1,
1,1,1,1,
2,1,1,
/*******************************************
函数功能:1个延时单位,延时300ms
******************************************/
void delay()
{
unsigned char i,j;
for(i=0;i<300;i++)
fa,mi,l_la,re,
dao,
dao,l_xi,dao,
sao,sao,
dao,l_xi,dao,
mi,
dao,l_xi,dao,
l_sao,mi,
re,l_la,l_xi,dao,
re,
dao,l_xi,dao,
sao,sao,
la,xi,h_dao,
sao,
la,xi,h_dao,
sao,mi,mi,
#include<reg51.h> //包含51单片机寄存器定义的头文件
sbit sound=P3^6; //将sound位定义为P3.6
unsigned int C; //储存定时器的定时常数
//以下是C调低音的音频宏定义
#define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz
#define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz
#define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz
#define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz
#define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz
#define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz
#define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz
//以下是C调中音的音频宏定义
#define dao 523 //将"dao"宏定义为中音"1"的频率523Hz
#define re 587 //将"re"宏定义为中音"2"的频率587Hz
#define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz
#define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz
#define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz
#define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz
TR0=1; //启动定时器T0
for(j=0;j<JP[i];j++) //控制节拍数
delay(); //延时1个节拍单位
TR0=0; //关闭定时器T0
i++; //播放下一个音符
}
}
}
/***********************************************************
函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波
************************************************************/
void Time0(void ) interrupt 1 using 1
{
sound=!sound; //将P3.7引脚输出电平取反,形成方波
fa,mi,l_sao,re,
dao,l_sao,h_dao,xi,
la,fa,re,
re,l_sao,xi,la,
sao,re,dao,
dao,re,mi,
fa,fa,la,
sao,mi,re,
mi,fa,fa,
sao,dao,h_dao,xi,
la,fa,
xi,h_dao,h_re,
sao,h_re,xi,
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法
}
#define mi 659 //将"mi"宏定义为中音"3"的频率659Hz
#define fa 698 //将"fa"宏定义为中音"4"的频率698Hz
#define sao 784 //将"sao"宏定义为中音"5"的频率784Hz
#define la 880 //将"la"宏定义为中音"6"的频率880Hz
for(j=0;j<300;j++)
;
}
/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
unsigned char i,j;
//以下是《知足》的一段简谱
1,1,1,1,
2,1,1,
2,1,1,
2,1,1,
2,1,1,
2,1,1,
1,1,1,1,
2,2,
1,1,2,
2,1,1,
3,1/2,1/2,
3,1/2,1/2,
3,1,
4,
};
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TMOD=0x00; //使用定时器T0的模式1(13位计数器)
while(1) //无限循环
{
i=0; //从第1个音符f[0]开始播放
while(f[i]!=0xff) //只要没有读到结束标志就继续播放
{
C=460830/f[i];
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法
unsigned int code f[]={
dao,l_xi,dao ,
sao,sao,
dao,l_xi,dao,
mi,
dao,l_xi,dao,
l_sao,mi,
re,l_la,l_xi,dao,
re,
dao,l_xi,dao,
sao,sao,
la,xi,la,
mi,
la,xi,h_dao,
sao,mi,mi,