资源描述:
《单片机课程设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单片机课程设计报告简易单片机音乐播放器设计一、设计任务要求:利用单片机设计模拟音乐播放器功能,播放存储在内部存储器中的乐曲。可实现启动、停止、上一首、下一首等简单功能。二、基本理论知识:1.音乐的演奏主要是控制音符和节拍,音符对应不同的声音频率,而节拍表达的是音符持续的时间。2.要用单片机产生音频脉冲,只要计算某一音频的后期,将周期除2,利用定时器计时半周期,半周期后将输出脉冲的电平反相,再定半周期时间,对电平又反相,即可实现。如:要实现C调中音1,频率为523HZ,T=1/523=1912us,若fos
2、c=12MHZ,T1工作在方式1,可得定时的初值为65536-956=64580=0FC44HC调音符频率:1234567—
3、
4、频率:523TH/TL:FC44H0000HFFFFH三、硬件电路设计:设计一个音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。同时通过LED灯显示器,用来显示所选曲目,该显示器在音乐播放中关闭,一曲演奏结束时,或选曲时才显示曲目信息,从而利于操作。电路设计原理图1.89C51单片机拥有4KB的
5、片内ROM和128KB的片内RAM。ROM和RAM的片外寻址范围都为64KB.单片机拥有32个并行口和1个串行口。在89C51单片机中存在5个中断源,其中2个外部中断源、两个内部中断源和一个串行中断源。通过TXAL1与TXAL2输入时钟信号,通过p1.0~p1.7输出控制现实控制信号的显示,有p3.2、p3.3与p3.5分别作为上一曲、下一曲和开始暂停的控制输入。2.显示电路是一个8位共阴极LED数码管。单片机的P0.0-P0.7分别与数码管的A、B、C、D、E、F、G、DP相连接。8位共阴极LED灯3.
6、晶振电路由两个30pF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:当晶体振荡频率为6.0MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:4.控制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的控制。键一联通实现上一曲更换,键二联通实现下一曲更换,键三联通实现开始暂停操作。5.发
7、声电路由数字扬声器连接p2.0接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出美妙的音乐。6.总体电路设计四、软件设计及流程图:主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环判断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程
8、序。1.播放/暂停子程序播放/暂停在程序利用内部中断T0口。将T0口设为计数中断并工作在方式2下。标识符初值赋值为R1=00H,计数初值设为TH0=0FFH,TL0=0FFH。当按键第一次产生中断信号时,播放/暂停子程序改变标志符R1,将其赋值为01H。此时播放器由暂停状态进入播放状态。当按键第二次产生中断信号时,播放/暂停子程序判断R1是否为02H后,将R1再次赋值为00H。此时,播放器由播放状态进入暂停状态。代码实现如下:POPDPL;恢复现场POPDPHPOPACCSETBEARETI;中断返回ST
9、ARTPAUSE:CPLF0;开始/暂停中断处理程序,将标置位取反JBF0,RETURN;SETBTR0RETURNRETI;中断返回DELAY:MOV27H,26HD2:MOV28H,#125D3:MOV29H,#248DJNZ29H,$DJNZ28H,D3DJNZ27H,D2DJNZR2,DELAYRET2.曲目选择曲目选择子程序分为上一曲子程序和下一曲子程序。上一曲和下一曲功能实现方式类似,分别由外部中断和外部中断。下面以实现上一曲功能为例:首先设置标识符R7初始值为00H。当按键产生中断信号,上一
10、曲中断子程序改变标识符R7的值为01H并改变曲目R0的值。播放子程序判断出标识符R7改变后,先将R7赋值为00H,然后跳转到曲目识别子程序。代码实现如下:POPDPL;恢复现场POPDPHPOPACCSETBEARETI;中断返回LAST_MUSIC:PUSHACC;上一曲中断程序处理开始,保护现场PUSHDPHPUSHDPLCLREA;关中断MOVA,22H;曲目数送ACJNEA,#1,YY;是否是第一首MOV22H,#NM