电子信息实习报告 音乐播放器设.docx
- 文档编号:10510422
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:19
- 大小:63.22KB
电子信息实习报告 音乐播放器设.docx
《电子信息实习报告 音乐播放器设.docx》由会员分享,可在线阅读,更多相关《电子信息实习报告 音乐播放器设.docx(19页珍藏版)》请在冰豆网上搜索。
电子信息实习报告音乐播放器设
电子科技大学
实习总结报告
实习类型生产实习
实习单位电子科学学院实习基地
实习起止时间202X年X月X日至202X年X月X日
指导教师
所在院(系)电子科学学院
班级电信12-3班
学生姓名
学号
202X年X月XX日
音乐播放器设计
一、课题目的
1、设计目的及意义
(1)设计目的及意义
1)掌握51系列单片机的基本硬件结构及工作原理;
2)掌握51系列单片机的汇编语言及基本程序设计方法;
3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。
(2)设计要求
单片机控制音乐播放器主要用于玩具的音乐播放和家用电器的报警提示音等方面。
其设计要求如下:
1)采用蜂鸣器播放音乐;
2)51系列单片机控制整个系统工作;
3)至少能够播放5首音乐;
2、总体设计方案
(1)单片机开发板原理及各部分功能说明
单片机有很多的特点,主要表现在:
体积小、功耗低、价格廉、控制功能强、应用现场环境恶劣等等。
本设计核心采用了AT89C52单片机89C52芯片为40引脚双列直插封装,单一的+5V电源,它具有3个可编程I/O口,其中个2个口(A和B)为8位口,1个口(C)为6为口。
此外还有256单元的RAM和1个14位计数结构的定时器/计数器。
1)89c52的主要性能:
①8位微处理器和控制器。
②内含一个一位布尔运算处理器,可直接对数据的位进行操作和运算,特别适用于逻辑控制。
③内部含有4KB的程序ROM。
④2个16位的计数/定时器。
⑤内部时钟振荡器。
⑥全双工方式的串行接口(UART)。
⑦两极中断优先权的6个中断源/5个中断矢量的中断逻辑。
2)89C52型号功能介绍:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作3输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
(2)音乐播放器设计
1)基本原理简述
声音是通过振动产生的。
单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波通过放大,作用于一定的物理实件(扬声器),就产生了一定频率的声音。
若改变输出方波的频率,产生的声音随之改变。
通过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样的节拍,单片机就可以产生电子音乐。
音乐的播放模式及选择可以通过按键的输入得以实现。
方波的产生由定时器控制。
定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。
必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。
一般中断响应时间为3~6个机器周期,经过反复试验取5个机器周期作为校正最为恰当。
另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。
这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。
音乐播放器的基本硬件电路有六部分组成:
单片机、时钟与复位电路、选择按键输入电路、音频发生器、音频放大器和扬声器。
利用单片机内部定时器/计数器T0与P3.0引脚配合,构成音频发生器,与外置电路组成音频放大器,驱动扬声器输出。
选择按键通过P3.2和P3.3引脚接入,也可以工作在查询方式,也可以工作在中断方式。
2)总体电路设计
图1-1总体电路图
3)晶振时间电路设计
晶振电路由两个30pF的电容和一个12MHz的晶体振荡器组成。
晶振电路如图所示。
节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:
当晶体振荡频率为12MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X。
则可根据下式计算X:
1/(f/2)=(216-X)*12/(12*106)。
图1-2晶振电路
4)控制电路设计
控制电路中,按键K1与P3.2相连。
当电键按下时接口接低电平,实现对音乐播放器的控制,可以实现歌曲切换操作。
复位电路如图所示:
图1-3控制电路
5)输出电路设计
发声电路由蜂鸣器连接P2.4接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由P2.4口输出,通过驱动蜂鸣器发出美妙的音乐。
输出电路如图所示:
图1-4输出电路
(3)音调和节拍的产生
音符及定时器初始值:
例如:
中音1(do)的音频=523Hz,周期T=1/523s=1912us
定时器/计数器0的定时时间为:
T/2=1912/2=956us。
定时器956us的计数值=定时时间/机器周期(12MHz晶振)=956us/1us=956。
装入T0计数器初始值为65536-956=64580(0xFC44)将0xFC44装入T0寄存器中(TH0装高八位即TH0=0xFC;TL0装低八位即TL=0x44),启动T0工作后,每计数956次将产生溢出中断,进入中断服务,每次对P1.0引脚的输出取反,就可得到中音do(523Hz)的音符频率。
依此产生其他的不同音符,以下是给出四个八度的28个频率数据编码
音阶频率高八位数据codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};//音阶频率的低八位数据codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
音乐中的节拍用延时时间产生。
例如:
1拍=0.4s,1/2=0.2s,以此类推。
只要求出1/2拍的延时时间,其余节拍是他的倍数就行了。
(4)乐理知识
音符名称
写法
时值
全音符
5---
四拍
二分音符
5-
二拍
四分音符
5
一拍
八分音符
5
-
半拍
十六分音符
5
=
四分之一拍
三十二分音符
5
≡
八分之一拍
表1-1音长
二、软件编程
软件开发是产生音乐的重要部分,音乐各音符所对应的频率和音乐的节拍都是通过软件的设计来实现的,软件开发的好坏直接决定了产生的音乐是否正确。
以下是主程序流程图:
N
Y
再次按键
图2-1
具体程序设计:
#include
sbitspeaker=P2^4;
unsignedchartimer0h,timer0l,time;
sbitK1=P3^2;
sbitK2=P3^3;
unsignedcharK1num=0,K2num=0;
bitflag=0;
//NOKIA铃声
codeunsignedcharmusic1[42]={5,3,1,4,3,1,6,2,1,7,2,1,4,3,1,
3,3,1,4,2,1,5,2,1,2,3,1,1,3,1,
3,2,1,5,2,1,1,3,2,0,0,0
};
//手写的从前
codeunsignedcharmusic2[288]={
5,2,1,2,3,1,1,3,1,5,2,1,2,3,2,1,3,1,5,2,1,
2,3,1,2,3,1,1,3,1,3,3,2,2,3,1,1,3,1,5,2,1,
2,3,2,1,3,1,5,2,1,2,3,1,2,3,1,1,3,1,3,3,2,
1,3,1,3,3,1,5,3,1,6,3,2,3,3,2,2,3,2,1,3,2,
7,2,1,1,3,1,2,3,1,1,3,1,6,2,1,1,3,1,5,2,1,
5,3,1,4,3,1,3,3,1,2,3,1,6,2,1,1,3,1,5,3,1,
5,3,1,4,3,1,3,3,1,2,3,3,5,2,1,2,3,1,1,3,1,
5,2,1,2,3,2,1,3,1,5,2,1,2,3,1,2,3,1,1,3,1,
3,3,2,2,3,1,1,3,1,5,2,1,2,3,2,1,3,1,5,2,1,
2,3,1,2,3,1,1,3,1,3,3,2,1,3,1,3,3,1,5,3,1,
6,3,2,3,3,2,2,3,2,1,3,2,7,2,1,1,3,1,2,3,1,
1,3,1,6,2,1,1,3,1,5,2,1,5,3,1,4,3,1,3,3,1,
2,3,1,3,3,1,4,3,1,5,3,1,5,3,1,4,3,1,3,3,1,
2,3,2,1,3,1,7,2,1,1,3,1,0,0,0
};
//时间煮雨
codeunsignedcharmusic3[99]={
3,2,1,5,2,1,6,2,2,1,3,2,7,2,3,5,2,1,3,2,2,
1,2,1,1,2,3,6,2,1,6,2,1,5,2,1,3,2,1,2,2,1,
3,2,4,3,2,1,5,2,1,6,2,2,1,3,2,7,2,3,3,2,1,
1,3,2,3,2,1,2,2,3,6,2,1,6,2,1,5,2,1,3,2,1,
2,2,1,1,2,1,1,2,1,1,2,4,0,0,0
};
//小苹果
Codeunsignedcharmusic4[525]={
3,3,2,1,3,2,2,3,2,6,2,2,3,3,1,2,3,1,1,3,1,
2,3,1,6,2,4,3,3,2,1,3,2,2,3,2,2,3,2,5,3,1,
3,3,1,7,2,2,1,3,2,1,3,1,7,2,1,6,2,2,7,2,1,
1,3,1,2,3,2,5,2,2,6,3,1,5,3,1,3,3,2,3,3,2,3,3,1,
2,3,1,1,3,2,2,3,1,3,3,1,2,3,1,3,3,1,2,3,1,5,3,1,
5,3,8,3,3,2,1,3,2,2,3,2,6,3,2,3,3,1,2,3,1,1,3,1,
2,3,1,3,2,4,3,3,2,1,3,2,2,3,2,2,3,1,2,3,1,5,3,1,
3,3,1,7,2,2,1,3,2,1,3,1,7,2,1,6,2,2,7,2,1,1,3,1,
2,3,2,5,2,2,6,3,1,5,3,1,3,3,2,3,3,2,3,3,1,2,3,1,
1,3,2,2,3,1,3,3,1,2,3,2,5,2,2,6,2,2,6,2,1,1,3,1,
6,2,4,0,0,0
};
//烟花易冷
codeunsignedcharmusic5[243]={5,3,1,3,3,1,2,3,2,2,3,1,2,3,1,3,3,1,
1,3,1,2,3,1,3,3,4,5,3,1,3,3,1,2,3,2,2,3,1,2,3,1,
5,2,1,3,3,1,4,3,1,3,3,4,3,3,1,3,3,1,7,3,3,3,3,1,
2,3,1,2,3,2,1,3,1,7,2,1,1,3,1,2,3,1,3,3,1,6,3,1,
6,3,2,6,2,1,1,3,1,3,3,1,2,3,1,6,2,1,1,3,1,7,2,2,
5,2,2,6,2,8,5,3,1,3,3,1,2,3,2,2,3,1,2,3,1,3,3,1,
1,3,1,2,3,1,3,3,4,5,3,1,3,3,1,2,3,2,2,3,1,2,3,1,
5,2,1,3,3,1,4,3,1,3,3,4,3,3,1,3,3,1,7,3,3,3,3,1,
2,3,1,2,3,2,1,3,1,7,2,1,1,3,1,2,3,1,3,3,1,6,3,1,
6,3,2,6,2,1,1,3,1,3,3,1,2,3,1,6,2,1,1,3,1,7,2,2,
0,0,0};
//音阶频率表高八位
codeunsignedcharFREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,
0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
};
//音阶频率表低八位
codeunsignedcharFREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i
0xEE,0x44,0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
voiddelay_1ms(unsignedintx)//按键按下延时x毫秒开始播放音乐各音阶相对应的定时器计数初值为X
{
unsignedinti,j;
for(j=x;j>0;j--)
for(i=110;i>0;i--);
}
voiddelay(unsignedchart)//一个音调播放的时间
{
unsignedchart1;
unsignedlongt2;
for(t1=0;t1 for(t2=0;t2<8000;t2++); TR0=0; } voidt0int()interrupt1//定时器0中断 { TR0=0; speaker=! speaker; TH0=timer0h; TL0=timer0l; TR0=1; } voidsong()//歌曲处理函数 { TH0=timer0h;//赋值定时器时间,决定频率 TL0=timer0l; TR0=1;//打开定时器 delay(time);//延时所需要的节拍 } voidKEY()//按键浏览 { if(K1==0)//K1按下 { delay_1ms(5);//消抖 if(K1==0)//确认功能键被按下 {K1num++;//功能键按下次数记录 while(! K1);//释放确认 if(K1num==1) { flag=1; } if(K1num==2) { flag=0; K1num=0; K2num=0; } } } if(flag==1) { if(K2==0) { delay_1ms(5); if(K2==0)//确认功能键被按下 {K2num++;//功能键按下次数记录 while(! K1);//释放确认 if(K2num==6) { K2num=0; } } } } } voidmain(void) { unsignedchark,i; TMOD=0x01;//置CT0定时工作方式1 EA=1; ET0=1;//IE=0x82//CPU开中断,CT0开中断 while (1) { KEY(); if(K2num==1) { i=0; while((i<42)&&(K2num==1)) {//音乐数组长度,唱完从头再来 k=music1[i]+7*music1[i+1]-1;//去音符振荡频率所需数据 timer0h=FREQH[k]; timer0l=FREQL[k]; time=music1[i+2];//节拍时长 i=i+3; song(); KEY(); } } if(K2num==2) { i=0; while((i<288)&&(K2num==2)) {//音乐数组长度,唱完从头再来 k=music2[i]+7*music2[i+1]-1;//去音符振荡频率所需数据 timer0h=FREQH[k]; timer0l=FREQL[k]; time=music2[i+2];//节拍时长 i=i+3; song(); KEY(); } } if(K2num==3) { i=0; while((i<99)&&(K2num==3)) {//音乐数组长度,唱完从头再来 k=music3[i]+7*music3[i+1]-1;//去音符振荡频率所需数据 timer0h=FREQH[k]; timer0l=FREQL[k]; time=music3[i+2];//节拍时长 i=i+3; song(); KEY(); } } if(K2num==4) { i=0; while((i<525)&&(K2num==4)) {//音乐数组长度,唱完从头再来 k=music4[i]+7*music4[i+1]-1;//去音符振荡频率所需数据 timer0h=FREQH[k]; timer0l=FREQL[k]; time=music4[i+2];//节拍时长 i=i+3; song(); KEY(); } } if(K2num==5) { i=0; while((i<243)&&(K2num==5)) {//音乐数组长度,唱完从头再来 k=music5[i]+7*music5[i+1]-1;//去音符振荡频率所需数据 timer0h=FREQH[k]; timer0l=FREQL[k]; time=music5[i+2];//节拍时长 i=i+3; song(); KEY(); } } } } 三、调试分析 1、排除逻辑故障 这类故障往往由于设计和加工制板过程中工艺性错误所造成的。 主要包括错线、开路、短路。 排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。 应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。 必要时利用数字万用表的短路测试功能,可以缩短排错时间。 2、时钟与复位模块 由电容,电位器,按键组成复位电路部分,该电路接于单片机的RESET端可以通过按键达到手动复位的效果,也可以通过电位器和电容组成上电复位电路。 通过复位电路使单片机回到初始状态。 四、总结及体会 一个简单的音乐发生器就是一个小型的单片机系统。 它应该有功率放大器、放音设备,以此来实现音乐发生器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。 用户可以按照自己的喜好选择音乐并将其转化成简谱码存入单片机的存储器中。 由于水平有限,使用软件编写方面不顺手,软件流程方面比较繁琐。 使许多简单的问题都复杂了。 希望通过已后的努力学习把设计搞得更加完善。 通过本次设计的任务,我了解了做软件的艰辛,也积累了做软件的细节和经验,这些都是书本上无法学来的,这对自己无疑是一种提高。 在整个课程设计过程中,我对本课程所学的知识有了一个系统的认识和理解,尤其是对本课题所用到的单片机及其相关知识有了进一步的掌握,对利用单片机进行控制系统的设计与开发又及对系统的分析和问题硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。 当然,这其中也有很多问题,第一、由于对课本理论的不熟悉导致编程出现错误。 第二,是在学习态度上,这次课设是对我的学习态度的一次检验。 对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。 我们这次实习所遇到的多半问题多数都是由于我们不够严谨。 经过这次的单片机设计,加深了对理论的理解,将理论很好地应用到实际当中去,而且还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。 指导教师评语及成绩评定: 成绩: 指导教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子信息实习报告 音乐播放器设 电子信息 实习 报告 音乐 播放