51单片机简易单音轨音乐播放器课设报告
基于51单片机的简易音乐播放器

基于单片机的电子琴课程设计一:课程目的以及要求用51单片机作为主控电路设计一个电子琴,实现能通过切换不同的键盘按键来切换歌曲。
二:课程设计背景:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要容是用STC89C52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
三:系统硬件设计3.1系统框图3.2 51单片机产生音符原理MCS-5l单片机有两个定时器/计数器。
系统使用定时器/计数器0产生方波。
定时器/计数器l刖用于记录音符的时长,即按键持续的时问。
定时器/计数器0的工作方式是l,即为16位定时器/计数器。
16位定时器/计数器被赋予一个初值,并开始记数。
当记数溢出,产生中断后,中断服务程序将与蜂鸣器连接的引脚电平置反,并且对定时器/计数器再赋初值,重新开始记效。
之后产生中断,引脚电平再被置反,如此周而复始,在引脚上就能产生一个频率与定时初值有关的方波信号。
而定时初值与音符频率有关,相应频率的确定,可参照12平均律,相邻两个半音A和B的频率之间的关系为:A=B√12[1]。
定时器/计数器l的作用为记录音符的时长,工作方式为l,即16位定时器/计数器。
在12MHZ的晶体振荡器F,单片机的机器周期为l“S。
本系统中,定时器/计数器l以10ms的时长为l定时单位,记录音符持续了多少个定时单位,如此,使用一个unmgnedchar型变量既可以记录2.55s的时长,这在用于记录一般弹奏的音符时是足够的。
单片机课程设计报告--简易音乐播放器

第一章前言伴随着科技的发展和时代的进步,人们对生活质量的要求也越来越高,由以前简单的追求温饱和物质财富转向更高层面的精神追求!而这一切催生了智能仪器的发展,音乐则是人们娱乐生活的重要组成部分,目前市场上出现了许许多多的音乐播放器,而人们对播放器的功能需求也越来越广泛,本文将设计一个基于单片机的音乐播放器,通过对其全面的介绍与分析,让大家了解音乐播放器的原理!第二章:简易音乐播放器的功能和原理说明音乐播放器,可以通过单片机板子上的数字按键对音乐播放的曲目进行控制,并且通过LED灯将播放的音乐加以区分,在播放音乐的同时点亮LED 灯, 让人知道现在正在播放的音乐曲目,从而实现简单的音乐播放功能!表1需求分析功能说明:这次设计是依据单片机技术原理,通过硬件电路设计以及软件的编译而设计的一个简单的音乐播放器,可以通过按键选择播放四首歌曲(歌曲自选,只要将想要播放的歌曲的乐谱写入程序中即可)同时点亮相应的LED灯,并用它来指示当前播放的歌曲序列,只能实现简单的音乐播放功能。
原理说明:这个音乐播放器主要有晶振电路,复位电路,LED电路,按键电路以及扬声器组成。
它利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,接着用单片机进行信息处理,再通过蜂鸣器或喇叭放出音乐。
音乐的产生主要是通过单片机的I/O 口输出高低不同的脉冲信号来控制扬声器发音。
通常利用单片机的内部定时器0,工作在方式1下,再改变计数初值TH0和TL0 来产生不同频率。
当控制歌曲按键按下时,按照预先存放在单片机中的程序,就会自动判断键值,然后启动计数器,按照程序产生一定频率的脉冲,接着通过uln2003芯片驱动扬声器,播放出乐曲。
该硬件电路中用 P3.0, P3.1, P3.2, P3.3 控制四个按键,“0” , “ 1”,“2”,“3”分别控制四首音乐。
P1.0,P1.1, P1.2, P1.3 控制四个LED 灯,它们分别对应四个按键,用来显示正在播放的歌曲,并用P2.3 来控制扬声器,电路为12MHz 晶振频率工作,起振电路中 C1和C2为22pf 。
单片机音乐播放器课程设计

单片机音乐播放器课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握其内部结构与工作原理;2. 学会使用C语言编写单片机程序,实现音乐播放器的功能;3. 了解音乐播放器的基本组成部分,如音符产生、音调控制等;4. 掌握音乐理论知识,能将简单的乐谱转换为单片机程序。
技能目标:1. 能够运用所学知识,设计并实现一个具有基础音乐播放功能的单片机系统;2. 熟练使用编程软件进行单片机程序编写、调试与优化;3. 学会使用相关工具和仪器,进行电路搭建、测试与故障排查。
情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发创新精神;2. 培养学生的团队协作能力,学会与他人共同解决问题;3. 增强学生的自信心,敢于面对挑战,勇于克服困难;4. 培养学生的责任心,关注环境保护,养成良好的操作习惯。
课程性质:本课程为实践性较强的课程,以项目为导向,结合单片机原理与应用,培养学生的动手能力和创新能力。
学生特点:本课程针对高中年级学生,学生具备一定的物理、数学基础,对电子制作有一定兴趣,但编程能力参差不齐。
教学要求:教师需结合学生特点,采用循序渐进的教学方法,注重理论与实践相结合,关注个体差异,提高学生的实践操作能力。
在教学过程中,注重引导学生思考,激发学生的学习兴趣,培养其创新精神。
通过课程学习,使学生能够独立完成一个简单的单片机音乐播放器设计。
二、教学内容1. 单片机基础知识:介绍单片机的内部结构、工作原理、性能特点,引导学生了解并掌握单片机的基本概念。
教材章节:第一章 单片机概述2. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制结构等,为学生编写单片机程序奠定基础。
教材章节:第二章 C语言基础3. 单片机程序设计与调试:学习如何使用编程软件进行程序编写、调试与优化,掌握单片机程序的开发流程。
教材章节:第三章 单片机程序设计与调试4. 音频信号处理:介绍音频信号的基本知识,如音符、音调、节拍等,学习如何将乐谱转换为单片机程序。
基于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 单片机音乐播放器课程设计报告课程设计课程设计名称:单片机课程设计专业班级电科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)//1602lcd_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.8ms while(!TF2);// 等到 0.8ms 时间到TR2=0;// 关定时器TF2=0;// 清标志位if(IRIN)// 发送是 1,其高电平时间长,大于 0.565ms irma[j]|=0x80;// 把最高位置 1 while(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单片机的音乐播放器设计

题目:音乐播放器课程设计(论文)任务书课程设计(论文)题目:音乐播发器基本内容:利用单片机的定时器产生各种频率的方波,信号经过放大后送到喇叭从而产生各种音调。
自行定义键盘,每按一键,可选择一首歌曲进行演奏,至少能够存储并播放十首歌曲,在LCD上显示演奏歌曲的名称并滚动显示歌词,单片机可连续播放这首歌曲,演奏可通过按键停止。
课程设计(论文)专题部分:题目:音乐播放器基本内容:通过单片机设计可以播放十首歌曲的音乐播放器,同步显示歌曲名称和歌词。
学生接受毕业设计(论文)题目日期第19 周指导教师签字:2009年7月摘要随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。
音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。
目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。
单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。
它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。
而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。
随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。
作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。
基于AT89C51单片机的音乐播放器课程设计

五、总 结
通过本次设计,我对单片机这门课有了更进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了AT89C52单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。总之这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
基于AT89C51单片机的音乐播放器课程设计
一、设计任务与要求
基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,我设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。为了体现乐曲播放过程中的动态效果,增加了1只LED,作随机闪烁以指示旋律的节奏。由于时间及条件限制,本设计实现了一种简单的音乐播放器,其核心器件采用AT89C51单片机,本播放器具有电路简单,功能强大,易于拓展等特点。
总体原理:乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。
仿真图: 实物图:
歌曲《军港之夜》
实物图波形:仿Βιβλιοθήκη 图波形:暂停仿真及实物图实物图波形:仿真图波形:
基于C51单片机的MP3播放器设计

基于C51单片机的MP3播放器设计一、引言随着科技的不断发展,人们对音乐的需求也越来越高。
MP3播放器作为一种便携式的音乐播放设备,已经成为人们日常生活中不可缺少的一部分。
本文将介绍一种基于C51单片机的MP3播放器设计。
二、硬件设计1.主控芯片:选择C51单片机作为主控芯片,因为它具有较低的成本、较好的性能和广泛的应用。
2.存储器:通过串口与单片机连接一个外部闪存芯片作为存储设备,用于存储MP3文件。
闪存芯片的容量可以根据需求进行选择,一般选择4GB以上的容量。
3.音频解码芯片:为了解码MP3文件并输出音频信号,需要选择一个音频解码芯片。
常用的音频解码芯片有VS10XX系列芯片,可以通过SPI接口与单片机通信。
4.音频输出电路:为了使音频信号能够输出到扬声器或耳机上,需要设计一个音频输出电路。
这个电路一般包括运放、耳机插座等组件。
5.控制界面:为了方便用户对MP3播放器的控制,需要设计一个控制界面。
可以选择使用按键、旋钮、触摸屏等方式进行控制。
6.电源电路:为了给MP3播放器提供电源,需要设计一个电源电路。
可以选择使用直流电池或者USB供电。
三、软件设计1.系统初始化:在系统启动时,需要进行一系列的初始化操作,包括初始化串口、外部存储器、音频解码芯片等。
2.文件读取:通过串口从外部存储器读取MP3文件,并将其存储到内存中。
3.解码与播放:将MP3文件解码,并通过音频解码芯片输出音频信号。
可以通过SPI接口与音频解码芯片进行通信,控制解码过程和音频输出。
4.控制界面处理:根据用户的操作,通过控制界面进行相应的处理。
例如,用户可以通过按键或旋钮控制音量、切换歌曲等。
5.电源管理:对于电源供应方面,需要设计合适的电源管理模块。
例如,在电池电量过低时,需要提醒用户充电或自动关闭设备。
6.其他功能:根据实际需求,可以添加其他功能。
例如,可以设计一个定时关闭功能,让播放器在一定时间后自动关闭。
四、总结本文介绍了一种基于C51单片机的MP3播放器设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四.I2C 总线的通信协议* 51 单片机可以通过 I2C 串行总线进行设备拓展,本次课设所使用的开发板上集成
的 DA 数模转换模块芯片便是通过 I2C 进行通信,使用前有必要掌握其基本协议。 I2C 串行总线只有两条信号线,一条是数据线 SDA,一条是时钟线 SCL,所有连接
A1 440 A2 880 A3 1762 A4 3525
#A4 466 #A3 933 #A2 1866 #A1 3734
B1 493 B2 988 B3 1799 B4 3957
二. 蜂鸣器发声原理: 蜂鸣器分两类,一类为有源蜂鸣器,只需加上一定
的电压即可发声;另一类为无源蜂鸣器,必须赋予一定 频率的脉冲才能发声。本次课设所采用的蜂鸣器为无源 蜂鸣器,电路连接如右图所示。
设计原理概述:
一. 电声原理基础:
声音拥有三大属性,即音阶(亦称音调)、音量与音色,其中音阶与音量的控制
较为简单。乐理中的每一个音阶都对应着一个固定频率,我们只需控制声波的频率即
可调整其音阶;音量则由声波的幅值决定,理论上也容易实现;音色的处理则要复杂
许多,不同于音阶和音量的调节只需对现有波形进行简单的尺度或幅值变换即可,音
3
保护现场
当前音阶演奏完毕?
N
是否处于暂停状态?
N
Y
7
调用获取乐谱子程序
N
Y
是否处于倒放模式?
乐谱指针 DPTR 地址增 2
乐谱指针低八位减 2 对 DPTR 减法进行补正
播放进度缓存单元更新
乐谱数据高八位送 A
拆取乐谱数据,音长倍率 信息存 A,音级信息存 B
N
Y
音长倍率为 00H?
音长倍率置 10H
控制字
│ └┬┘
│ └┬┘
│
│
│
└──── A/D 模式下通道选择
│
│
└──────── 自动增量标记位
│
└────────────── A/D 信号输入方式控制位
└────────────────── 模拟信号输出控制位
向 PCF8591P 发送的第二个字节为控制字字节,如上图所示,本课设的目标是让
C1、D2 以及半音阶的 C#1、D#2
等)。
乐谱数据音阶信息送 A
设置存放音阶频率信息的 寄存器单元首地址
8
调用音级处理子程序
由于每个乐谱单元需要有两个字节来储 存,因此在调整音乐播放的进度时,指 向乐谱地址的 DPTR 必须一次性连续增 加或减少两个单元,否则可能会出现将 存储音长和音级信息的数据被当做音阶 进行处理的情况。
I2C 总线在每传输一个字节的数据后都必须伴随有一个应答信号(A)。应答信号 由接收机向 SDA 数据线发出低电平信号产生,而与应答信号对应的时钟信号由主发送 机产生,且此时的 SDA 数据线必须处于高电平状态,为接收来自于接收机的应答信号 做准备。若此刻从机未向 SDA 发出低电平的应答信号,则被发送机识别为非应答信号 (A*),说明接收机并未成功接收前一字节的数据,主机应当重发一遍。
其工作与 D/A 转换模式下,因此只需给模拟信号输出控制位送 1 即可。
发送给 PCF8591P 的第三个字节数据才被存入 DAC 数据寄存器,通过改变输入的
二进制数据大小来调节其输出电压,起到数模转换的效果。
系统设计流程框图
主程序流程
开始
调用初始化子程序
1
2
调用键盘扫描子程序
调用进度控制子程序
3
1
色与声波的波形形状有关,即需要对输出波形本质的内容修改,处理起来难度较大。
附:各级音阶所对应的频率表如下:
C1 262 C2 523 C3 1047 C4 2095
#C1 278 #C2 554 #C3 1109 #C4 2219
D1 294 D2 587 D3 1175 D4 2351
#D1 311 #D2 622 #D3 1245 #D4 2492
而 AT89C51 的 IO 口只能输出方波的数字信号,因此需要调用数模转换模块对波形数 据进行处理。
PCF8591P 是单片、单电源低功耗的 CMOS 数据采集器 件,其引脚结构如右图所示,具有 4 个模拟输入 (AIN0~AIN3),一个模拟输出(AOUT)和一个串行 I2C 总 线接口(SCL、SDA);三个地址引脚 A0、A1、A2 用于编 程硬件地址;VDD 和 VSS 分别为正负电源电压输入,VREF 和 AGND 则分别连接参考电压和系统模拟地;EXT 控制选用内 部或外部的振荡器,OSC 则根据 EXT 的电平切换外部振荡 器信号输入/内部振荡器信号输出。
信息科学与工程学院 《微机应用设计与实践》
课程设计说明书
课题:单片机音乐播放器
班 级: 电科 1201 学 号: 3110209511 姓 名: 林焕膨 指导教师: 张国安 日 期: 2015.03.19
单音轨简易音乐播放器
课程设计目标
一.基础目标:通过汇编语言编程 51 单片机实现简单的单音轨音乐播放功能。 二.功能拓展:编程调用开发板的 8 位独立键盘实现对音乐播放中的曲目切换、暂停/播
到总线的设备的数据线都连接到 SDA 上,时间线都连接到 SCL。如下图所示:
不同于 SPI 总线结构,I2C 总线仅用一条数据线实现地址选择与主从机双向传输的 多重任务,因此虽然硬件结构简单,但使用起来的步骤较为繁琐,传输速率也因此略 逊于 SPI 总线结构。
I2C 总线上数据传送的信号由起始信号(S)、终止信号(P)、应答信号(A)和 非应答信号(A*)及总线数据位组成
设置堆栈底 设置中断开关 设置定时器 其他缓存位初始化 设置乐谱地址缓存
1
2
保护现场
获取 P3 口键盘信息
调用键盘检查子程序
4
Y
N
是否有按键按下?
储存当前按键信息
是否是松开瞬间?
Y N
执行对应按键事件地址
5
恢复现场
2
4
P3 口数据为 0FFH?
Y
N
清零 00H 标记位
将全部键盘标记位置 1
5
4
程序中用可位寻址单元 00H 和 01H
放、加速/减速、正放/倒放以及升降 Key 的功能。 三. 性能优化:尝试改善蜂鸣器发声的音色(未完成)
实验硬件设备
1. 戴尔灵越 15 7000 笔记本
一台
2. 普中 HC6800 EM3 单片机
一套
实验软件工具
1. Keil Vol 2.37 2. PZ-ISP 自动下载软件 V1.48 3. MyEclipse 2014 4. Guagle_wave 波形发生器
的组合共同记录键盘状态。
(00H)= 1 为有按键按下时的标记
(01H)= 0 为无按键动作时的标记
详细组合如下:
00H
01H
保持松开
0
0
保持按下
1
1
松开瞬间
0
1
按键 1 事件?
N
Y
按键 2 事件?
N
调用选曲
Y
子程序
按键 3 事件?
N
Y
6
EA = 1?
按键 4 事件?
N
F0 = 1?
Y N
Y
F0 = 1?
首尾地址写入缓存单元
N
R1 = 3?
N
6
1.选曲后将乐谱首尾地址分别放入当前播放进度 缓存位; 2.EA 直接作为暂停标记位,由于向蜂鸣器输送脉 冲的程序由定时器完成,即可通过开/关总中断 位来轻易控制音乐播放/暂停; 3.F0 作为正/倒放标记位,(F0)= 0 为正放, (F0)= 1 为倒放,在进度控制子程序中对该位 进行判断后决定播放状态; 4.播放音乐时每一拍持续时长由 T1 的延时子程 序控制,设 4AH 作为缓存单元,在 T1 中断程序 中将其送延时循环控制寄存器 R4,即可在键盘事 件中通过增减 4AH 的值来调节音乐播放速度; 5.在进度控制子程序中将根据 5AH 的值进行升降 Key 的操作,只需在键盘事件中对 5AH 的值进行 增减即可实现播放音阶的调节。
I2C 中将 SCL 处于高电平期间,SDA 线由高电平向低电平的变化瞬间定义为起始信 号(S),SDA 线由低电平向高电平的变化瞬间定义为终止信号(P)。只有在起始信 号与终止信号之间传送的其他信号才被视作有效,除了起始信号与终止信号之外,其 他信号的发送或接收时刻 SDA 线都应保持稳定,即信号必须在 SCL 线处于低电平期间 产生(SDA 线发生跳变),然后在 SCL 线处于高电平期间进行传送。
Y
第二级音阶
第一级音阶 地址送 DPTR
第四级音阶
第三级音阶 地址送 DPTR
地址送 DPTR
地址送 DPTR
乐谱低八位存入 4FH
按键 5 事件?
N
Y N
从乐谱首
播放继续
Y N
设置倒放
上调播放 速度
Y
下调播放
按键 7 事件?
Y
N
地址播放
播放暂停
速度
升 Key
降 Key
从乐谱尾 地址播放
设置正放
将全部键盘标志位置 0
6
5
选曲标记单元 R1 增1
R1 = 0?
Y
R1 置 0 Y
N
R1 = 1?
Y
N
R1 = 2?
Y
将 R1 的值所对应的乐谱
跳转音阶处理程序地址
9
AT89C51 中没有直接对 DPTR 进行递减