单片机课程设计报告_第1页
单片机课程设计报告_第2页
单片机课程设计报告_第3页
单片机课程设计报告_第4页
单片机课程设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计报告简易单片机音乐播放器设计一、设计任务要求:利用单片机设计模拟音乐播放器功能,播放存储在内部存储器中的乐曲。可实现启动、停止、上一首、下一首等简单功能。二、基本理论知识:1音乐的演奏主要是控制音符和节拍,音符对应不同的声音频率,而节拍表达的是音符持续的时间。2要用单片机产生音频脉冲,只要计算某一音频的后期,将周期除2,利用定时器计时半周期,半周期后将输出脉冲的电平反相,再定半周期时间,对电平又反相,即可实现。如:要实现C调中音1,频率为523HZ,T=1/523=1912us,若fosc=12MHZ,T1工作在方式1,可得定时的初值为65536-956=64580=0FC44H

2、C调音符频率:1 2 3 4 5 6 7 | 频率:523 TH/TL:FC44H 0000H FFFFH三、硬件电路设计:设计一个音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。同时通过LED灯显示器,用来显示所选曲目,该显示器在音乐播放中关闭,一曲演奏结束时,或选曲时才显示曲目信息,从而利于操作。 电路设计原理图1.89C51单片机拥有4KB的片内ROM和128KB的片内RAM。ROM和RAM的片外寻址范围都为64KB.单片机拥有32个并行口和1个串行口。在89C51单片机中存在5个中断源,其中2个外部中

3、断源、两个内部中断源和一个串行中断源。 通过TXAL1 与TXAL2输入时钟信号,通过p1.0p1.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. 晶振电路由两个30pF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:当晶体振荡频率为6.0MHz,定时器工作在方式1下时,

4、若各音阶相对应的定时器计数初值为X,则可根据下式计算X: 4. 控制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的控制。键一联通实现上一曲更换,键二联通实现下一曲更换,键三联通实现开始暂停操作。5. 发声电路由数字扬声器连接p2.0接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出美妙的音乐。6. 总体电路设计四、软件设计及流程图:主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环

5、判断,得到播放中断的指令后再进行播放。执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环判断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程序。 1. 播放/暂停子程序播放/暂停在程序利用内部中断T0口。将T0口设为计数中断并工作在方式2下。标识符初值赋值为R1=00H,计数初值设为TH0=0FFH,TL0=0FFH。当按键第一次产生中断信号时,播放/暂停子程序改变标志符R1,将其赋值为01H。此时播放器由暂停状态进入播放状态。当按键第二次产生中断信号时,播放/暂停子程序判断R1是否为02H后,将R1再次赋值为00H。此时,播放器由播放状态进入暂停状态

6、。 代码实现如下: POP DPL ;恢复现场 POP DPH POP ACC SETB EA RETI ;中断返回START PAUSE:CPLF0 ;开始/暂停中断处理程序,将标置位取反 JB F0,RETURN ; SETB TR0 RETURN RETI ;中断返回DELAY: MOV 27H,26H D2: MOV 28H,#125D3: MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET2.曲目选择曲目选择子程序分为上一曲子程序和下一曲子程序。上一曲和下一曲功能实现方式类似,分别由外部中断和外部中断。下

7、面以实现上一曲功能为例:首先设置标识符R7初始值为00H。当按键产生中断信号,上一曲中断子程序改变标识符R7的值为01H并改变曲目R0的值。播放子程序判断出标识符R7改变后,先将R7赋值为00H,然后跳转到曲目识别子程序。代码实现如下:POP DPL ;恢复现场POP DPHPOP ACCSETB EA RETI ;中断返回LAST_MUSIC: PUSH ACC ;上一曲中断程序处理开始,保护现场PUSH DPH PUSH DPL CLR EA ;关中断 MOV A,22H ;曲目数送A CJNE A,#1,YY ;是否是第一首 MOV 22H,#N MOV B,#4 ;将R7指向最后一首歌

8、曲MOV A,#N-1MUL AB MOV R7,A AJMP BACK2 ;处理结束YY: DEC 22H MOV A,R7 SUBB A,#4 MOV R7,ABACK2: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;数码管显视相应歌曲的编号3.音调的高低用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表1。由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。将与扬声器连接的P1.7取反后就可得到方波的周期,从而达到了控

9、制频率,即音阶的目的。音阶频率(Hz)音阶频率(Hz)音阶频率(Hz)123456701311471651751962202470123456702622943303493924404940123456705235876596987848809880低八度音中音高八度音音调的长短用节拍数表示(例如1/4拍、2/4拍、),不同节拍数的不同音符的组合形成乐谱。程序中,音的节拍可由延时子程序实现。延时子程序设定为四分之一拍,节拍值只能是它的整数倍。音 符频率(Hz)简谱码(T值)音 符频率(Hz)简谱码(T值)低1DO26263628#4FA#74064860#1DO#27763731中5SO 78

10、464898低2RE29463835#5SO#83164923#2RE#31163928中6LA88064968低3M33064103#693264994低4FA34964204中7SI98865030#4FA#37064260高1DO104665058低5SO39264261#1DO#110965085#5SO#41564400高2RE117565110低6LA44064443#2RE#124565124#646664524高3M131865157低7SI49464524高4FA139765178中1DO52364331#4FA#1480651894.C调各音符频率与计数值T的对照表如下表所

11、示:5 . 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。1/4节拍1/8节拍曲调值DELAY曲调值DELAY调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒 四分之一拍延时代码设计:1/4拍的延迟时间=187毫秒DELAY: MOV R7,#2D2: M

12、OV R4,#187D3: MOV R3,#248DJNZ R3,$DJNZ R4,D3DJNZ R7,D2RET6. 建立音乐代码库 (1)先找出乐曲的最低音和最高音范围,然后确定音符表T的顺序。(2)把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。(3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。(4)音符节拍码00H为音乐结束标记。7.歌曲设计根据音乐软件的设计方法,简谱对应的简谱码、T值、节拍数如表所示。简谱发音简谱码T值节拍码节拍数低7低音Si16452411/41中音Do26458022/42中音Re36468433/43

13、中音Mi464777414中音Fa56482051+1/45中音So66489861+1/26中音La764968827中音Ti865030A2+1/2高1高音Do965058C3低6低音LaA64400F3+3/4低5低音SoB64260例 : 中华人民共和国国歌代码实现如下,G=2/4DB 04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54HDB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54

14、H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04HDB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54HDB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14HDB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,

15、12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04HDB 04H,04H,04H,04HDB 00HEND;五调试过程:(1)编程前画流程图,做整体规划,思路清晰。(2)借鉴网络资料,结合实验室硬件电路,写出合适的程序。(3)有时候程序一点错误也没有,但就是不能正常运行,最后发现程序中有的指令书写得不规范,还有些程序设置与硬件不匹配。(4)先从子程序入手,一一测试,然后总体运行。(5)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。六设计心得:在做此课程设计中遇到不少的难点,有的原理,根本就不知道怎样去实现。最后通过自己仔细查资

16、料和参考,一点一点的就慢慢懂了。在实验中发现,其实在难编写的程序都是由一些基础程序模块构成的,很多的基础模块前人就已经做好了,只要我们拼凑就行了,当然拼凑的工作也不是很简单,最重要的还是要自己的基础扎实,同时,自己的思路要非常的清晰。一周的实验做完后,感觉到平时掌握的东西实在太少了,要真正实现学有所成、学有所用还有很长的路要走。 单片机课程设计是一门很重要的课程,这个过程最能锻炼同学们的各种能力与智慧,为今后的其他专业课打下良好的基础。现在信息技术发展迅速,我们所学的东西在社会上也许已经或即将被淘汰。因此在学校要学的不仅是书本上的东西,更重要的是自学的能力、独立思考的能力和动手的能力。要想在竞

17、争异常激烈的现代社会立足,就必须培养这种能力。在学校的时间是最好的学习机会,一定要珍惜好这有限的时间,多学知识,结合实际,努力提高自己。七源程序:OUT BIT P2.0 ;定义音频输出端口p2.0N EQU 3;歌曲总数OUT_NUM EQU P1;数码管显视当前所放歌曲曲数 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_MUSIC ;外部中断0用于接上一曲歌按键 ORG 000BH AJMP F_T0 ;定时器0用于定时,作音符发生器用 ORG 0013HY4: AJMP NEXT_MUSIC ;外部中断1接下一曲歌按键 ORG 001BH AJMP ST

18、ART_PAUSE ;定时器1用计数,此处用作中断 ORG 0030HMAIN: MOV SP,#60H MOV DPTR,#TABLE MOV R0,#30H ;R0中存入数据30H MOV R5,#00H MOV R6,#1 ;R6存放正在设置入口信息的歌曲数SET_TAB: MOV A,R5 ;设置每首歌曲的入口信息 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 MOV A,R5

19、 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 INC R6 ;设置完一首歌曲后,歌曲数加一 CJNE R6,#N+1,SET_TAB ;是否设置完,没有便继续 MOV TMOD, #61H ;计数器0工作方式1,计数器1工作方式2 MOV TH1,#0FFH ;给计数器1置初值0FFH MOV TL1,#0FFH;计数器计数为1,相当于一外部中断 SETB ET1 ;允许计数器1中断 SETB ET0 ;允许计数器具0中断 CLR PT0 ;计数器0为低优先级 SETB PT1 ;计数器1为高优先级 SETB IT0 ;外部中断0为跳沿触发 SETB PX0 ;高

20、优先级 SETB IT1 ;外部中断1为跳沿触发 SETB PX1 ;高优先级 SETB EX1 ;允许外部中断1中断 SETB EX0 ;允许外部中断定0中断 SETB EA ;开中断总开关 SETB TR1 ;定时器1开始工作,作中断用 SETB OUT ;音频输出端口初始化 CLR F0 ;设置F0=0,用来作暂停/播放的标置位用 MOV 22H,#01H ;22H单元中存放正在播放的歌曲编号 MOV DPTR,#OUT_TAB ;将正在播放的歌曲编号送数码管显示 MOV A,22H MOVC A,A+DPTR MOV OUT_NUM,A MOV R7,#00H ;R7中存放歌曲总信息的

21、入口地址 START0:MOV R4,#00H ;R4存放当前正在播放歌曲的第几个节拍数 MOV R0,#30H ;30H开始的单元中存放歌曲的入口信息 MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A NEXT: MOV R0,#30H ;开始取出歌曲的第一个数据 MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+

22、DPTR JZ END0 ;若为0,则停止 MOV R1,A ;不为0,取出节拍数 ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING ;音符不为0,唱 CLR TR0 ;为0,不唱,关频率发生器 SJMP MUSIC1 MUSIC: DEC A ;开始唱,进行相应的数据处理 MOV R3,A RL A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOVC A,A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,A+DPTR MOV 20H,A MOV

23、 TL0,A SETB TR0 ;开唱MUSIC1:LCALL DELAY ;每个音符唱多久 JB F0,FOR ;是否暂停, AJMP NEXT ;没有暂停,继续FOR: CLR TR0 ;暂停,不唱 JB F0,$ ;等待播放 AJMP NEXT ;开始播放END0: CLR TR0 ;不唱 MOV A,22H ;唱完处理 CJNE A,#N,TT ;是不是全部歌曲都唱完 MOV 22H,#01H ;全部唱完,则从第一首开始再唱 MOV R7,#00H MOV OUT_NUM,#06H AJMP WWWTT: MOV A,R7 ADD A,#4 MOV R7,A INC 22H CLR E

24、A PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A POP DPL POP DPHTTT: SETB EA AJMP START0 ;开始下一首的演唱F_T0: MOV TH0,21H ;定时器0置初值 MOV TL0,20H CPL OUT ;频率产生 RETINEXT_MUSIC: PUSH ACC ;下一曲中断程序处理,保护现场PUSH DPH PUSH DPL CLR EA ;关中断 MOV A,22H CJNE A,#N,Y ;判断是不是最后一首 MOV R7,#00H MOV 22H

25、,#01H AJMP BACK Y: INC 22H ; 不是最后一首,唱下一首 MOV A,R7 ADD A,#4 MOV R7,ABACK: MOV R4,#00H ;数码管显示相应的歌曲编号 MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,AMOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;结果存入26H单元

26、中 DEC R4 MOV R0,B ;恢复R0中的内容POP DPL ;恢复现场 POP DPH POP ACC SETB EA RETI ;中断返回LAST-MUSIC: PUSH ACC ;上一曲中断程序处理开始,保护现场 PUSH DPH PUSH DPL CLR EA ;关中断 MOV A,22H ;曲目数送A CJNE A,#1,YY ;是否是第一首 MOV 22H,#N ;是第一首歌曲 MOV B,#4 ;将R7指向最后一首歌曲 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 ;处理结束YY: DEC 22H MOV A,R7 ;R7减4 SUBB A,

27、#4 MOV R7,ABACK2: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;数码管显视相应歌曲的编号 MOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;结果存入26H单元中 DEC R4 MOV R0,B;R0中的内容恢复 POP DPL ;恢复现场 POP DPH POP A

28、CC SETB EA RETI ;中断返回START_PAUSE:CPL F0 ;开始/暂停中断处理程序,将标置位取反 JB F0,RETURN ;为1返回 SETB TR0 ;为0则播放RETURN: RETI ;中断返回DELAY: MOV 27H,26H ;音符演奏时间控制D2: MOV 28H,#125D3: MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RETOUT_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

29、,73H ;OUT_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3TABLE1:DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524MUSIC1: DB 04H ;1=C 2/4 军港之夜DB 32H,54H,52H,32H,54H,52H,32H,12H

30、,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H

31、,0D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HDB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0

32、D2H,0C2H,14H,14HDB 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0

33、D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HTABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684

34、,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178MUSIC2: DB 02H;1=C 4/4 海阔天空DB 04H,94HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4HDB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,

35、0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8HDB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D8H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H ;DB 58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H,98H,08HDB 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论