当前位置:文档之家› 简单数字音乐播放器

简单数字音乐播放器

音乐播放器一、设计目的熟悉并掌握单片机的原理及基本应用,掌握单片机基本外设的使用方法,掌握汇编语言编程方法,熟悉PROTEUS仿真的使用,可以应用电子工艺的基础知识连接硬件实现设计功能。

二、设计要求(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲。

(2)采用七段数码管显示当前播放的歌曲序号。

(3)可通过功能键选择乐曲,上一曲,下一曲。

三、发音原理3.1播放音乐的原理发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。

首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。

对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。

另外,音符的频率有所不同。

基于上面的内容,这样就对发音的原理有了一些初步的了解。

音符的发音主要靠不同的音频脉冲。

利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.2引脚的输出音乐。

只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

3.2音符频率的产生音符及定时器初始值:例如:中音1(do)的音频=523HZ,周期T=1/523s=1912sμ定时器/计数器0的定时时间为:T/2=1912/2sμ=956sμ定时器956sμ的计数值=定时时间/机器周期=956sμ/1sμ=956(时钟频率=12MHZ)装入T0计数器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.1引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。

将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。

下表1是C调各音符频率与计数初值T的对照表:表1 C调各音符频率与计数初值T的对照表音符频率(Hz)/初值(sμ) 音符频率(Hz)/初值(sμ)低1DO 262/63627 中1DO 523/64580 高1DO 1042/65056 低2RE 294/63835 中2RE 589/64687 高2RE 1245/65134 低3M 330/64021 中3M 661/64780 高3M 1318/65157 低4FA 350/64107 中4FA 700/64822 高4FA 1397/65178 低5SO 393/64264 中5SO 786/64900 高5SO 1568/65217 低6LA 441/64402 中6LA 882/64969 高6LA 1760/65252 低7SI 495/64526 中7SI 990/65031高7SI 1967/65282音符、音符编码及定时器初始值:为了产生音符,必须求出音符低音5—高音5的计数初值。

例如C 调的低1DO 的THTL=65536-50000/262=63627,中音DO 的THTL=65536-500000/523=64580,高音DO 的THTL=65536-500000/1042=65056。

为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。

比如说音乐是C 调的,那么出现低音的5SO ,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI ,直接写一个3代码。

表2 音符编码表 3.3节拍频率的产生 音乐中的节拍用延时时间产生。

例如,1拍=0.4s,1/4拍=0.1s ,以此类推。

假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。

为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表3和表4所示表3 节拍数编码表音符 音符编码 音符 音符编码 不发音 0 低5SO 1 低6LA 2 低7SI 3 中1DO 4 中2RE 5 中3M 6 中4FA 7 中5SO 8 中6LA 9 中7SI A 高1DO B高2RE C 高3M D高4FA E 高5SO F高6LAG按1/4拍为一个延时时间的节拍编码与节拍对应的表按1/8拍为一个延时时间的节拍编码与节拍对应的表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍1 1/4 6 6/4 1 1/8 6 6/82 2/4 8 8/4 2 2/8 8 8/83 3/4 A 10/4 3 3/8 A 10/84 4/4 C 12/4 4 4/8 C 12/85 5/4 F 15/4 5 5/8表4 乐谱节拍编程时的时间延时表乐谱节拍1/4拍的延时时间乐谱节拍1/8拍的延时时间4/4 125 ms 4/4 62 ms3/4 187 ms 3/4 94 ms2/4 250 ms 2/4 125 ms音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。

四、电路原理 4.1 电路图本设计中用到89C52单片机,喇叭,七段显示数码管LED 。

D02D13D24D35D46D57D68D79Q019Q118Q217Q316Q415Q514Q613Q712LE 11OE 1U274HC573XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52SRCFILE=很重要,勿删!!!!贺龙\课程设计\新建文本文档.hexX1CRYSTALC110pC210pC31nFLS2SPEAKERvccR1100RR21kvcc4.2 连接说明当键盘有键按下时,识别中断,记录键值,显示歌曲号,同时启动定时器T0,显示歌曲号产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。

(1) 硬件电路中用0INT 、1INT 分别接S1、S2作为下、上一曲的功能键 (2) 用P3.0-P3.6控制七段码a,b,c,d,e,f 。

(3) 用P2.3口控制喇叭。

(4) 电路为12MHZ 晶振频率工作,起振电路中C1,C2均为30pf 。

五、软件设计 5.1软件流程图本程序可以实现课程设计的基本要求,并可以通过按键播放四首歌曲,当没有按键时程序将自动循环播放歌曲,程序流程图如下:5.2 仿真、安装和调试1、Proteus 软件仿真按照上面设计的电路在proteus 软件内画图, 打开单片机软件开发系统Keil,选择89c52单片机,在其中编写程序,运行生成一个后缀名为.hex 的文件,然后将该文件下载到proteus 中的AT89c52单片机中进行仿真,观察实验现象。

如图9 Proteus 仿真电路图所示。

仿真时S1按键选择下一曲歌,S2按键选择上一曲歌功能,S3按键实现复位功能。

仿真成功后,安装好实验板,然后将音乐程序下载到电路板内 ,观察结果。

能实现播放音乐,按键换曲等功能。

2、程序调试中应注意的问题开始 设置音节起始位置设置节拍间距 读取相应歌曲的音阶,音符 显示当前播放歌曲序号初始化 外中断按键选下一首 外中断按键选上一首(1)有时程序没有语法错误或逻辑错误后仍不能正常运行,这可能是由于指令书写不规范,例如不要用太长的前缀,RET返回指令前不留空行。

(2)为保证程序顺利运行都用LJMP,LCALL。

(3)编程时要注意,在程序开始时,要写入各中断的入口地址,而且要跳转到中断。

(4)调试时会出现一些自定义的表头无法找到,这时可以尝试将找不到的列表向前移,但其各种参数均不变。

六、设计体会本学期学习单片机理论知识的时候,对于书本中的知识感到十分的枯燥,但是经历过这次的课程设计,自己亲自动手做东西,运用所学的原理,使我对书本知识的认识更加到位更加深刻,也让我在其中体会到了无限的乐趣,不但激发了我的学习兴趣也增强了我的动手能力,听着自己设计的东西在软件模拟时发出自己设定的音乐声,我感到了前所未有的成就感。

我切切实实感觉到自己学到了东西,并能将其转化到现实生活中来,而不像以前一样感到自己好像就学了一点“虚无缥缈”的理论,坚定了我学习的信心,这次设计是在一个良好的氛围里踏下心来认认做东西,在这一段时间里,周围的很多同学都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,互相帮助,查阅资料,互助解决问题。

另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。

参考文献[1] 单片机微型计算机原理及应用张毅坤西安电子科技大学出版社,[2] 数字电子技术基础阎石高等教育出版社[3] 单片机技术实验实训教程周越中国水利水电出版社附录1汇编程序PUTOUT BIT P2.3 定义输出音响端口NEXTSONG BIT P3.2 定义中断口LASTSONG BIT P3.3SNB EQU 40H 存放歌曲序列号 ORG 0000HLJMP STARTORG 0003HLJMP ZD0ORG 000BHLJMP TIMEORG 0013HLJMP ZD1ORG 0100HSTART:SETB P2.3 输出端口预先置位MOV SNB,#0 从第零首开始MOV 50H,#0MOV TMOD,#01H 设定定时器工作方式SETB EA 开中断并设定中断优先级SETB ET0SETB IT0SETB IT1SETB EX0SETB EX1SETB PX0SETB PX1START0: MOV 30H,#0 读取简谱码NEXT: LCALL SON 扫描歌曲序号存放单元MOV A,30HMOVC A,@A+DPTRMOV R2,AJZ START0ANL A,#0FHMOV R5,A 简谱码的低半字节节拍码送R5 MOV A,R2SWAP AANL A,#0FH 取简谱码高半字节JNZ SING 若音符为0隔过不唱 CLR TR0LJMP SING1SING: DEC AMOV 60H,AMOV A,SNBCJNE A,#0,SHIJIANMOV 50H,#2LJMP JKSHIJIAN: MOV 50H,#4JK: MOV A,60HADD A,50HMOV 22H,ARL AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV TH0,A 读取定时计数值高八位MOV 21H,AMOV A,22HRL AMOVC A,@A+DPTR 读取定时计数值低八位 MOV TL0,AMOV 20H,ASETB TR0SING1: LCALL DELAYINC 30HJMP NEXTSON: MOV A,SNB 判断歌曲序号并依据序号选定歌曲 SON0: CJNE A,#0,SON1 若是0演唱SONG0MOV DPTR,#SONG0RETSON1: CJNE A,#1,SON2MOV DPTR,#SONG1RETSON2: CJNE A,#2,SON3MOV DPTR,#SONG2RETSON3: CJNE A,#3,SON4MOV DPTR,#SONG3SON4: MOV DPTR,#SONG4RETZD0: CLR EX0 中断0控制下一首歌的播放PUSH ACCPUSH PSWLCALL DELAY0JB NEXTSONG,TO1K1: MOV A,SNBINC AMOV SNB,ACJNE A,#5,TOE0 若此时播放的是第四首则下一 MOV SNB,#0 首是第零首TOE0: LCALL DISP 调用显示子程序MOV 30H,#0TO1: POP PSWPOP ACCSETB EX0RETIZD1: CLR EX1 中断1控制上一首歌的播放PUSH ACCPUSH PSWLCALL DELAY0JB LASTSONG,TO2K2: MOV A,SNBDEC AMOV SNB,ACJNE A,#0FFH,TOE1 若此时播放的是第零首歌,则 MOV SNB,#4 播放第四首TOE1: LCALL DISPMOV 30H,#0TO2: POP PSWPOP ACCSETB EX1RETITIME: PUSH ACC 定时中断控制发音符的频率 PUSH PSWMOV TL0,20HMOV TH0,21HCPL PUTOUT 使音响输出口定时翻转以 POP PSW 产生特定频率的方波POP ACCRETIDISP: PUSH DPL 显示子程序PUSH DPHMOV A,SNBMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,A 显示字符送段码口MOV P2,#07H 选择一个LEDPOP DPHPOP DPLRETDELAY0: MOV R6,#200 消抖延时H2: MOV R1,#250H1: DJNZ R1,H1DJNZ R6,H2RETDELAY: MOV R7,#2 控制一个音符持续的时间 D2: MOV R4,#155D3: MOV R3,#248D1: DJNZ R3,D1DJNZ R4,D3DJNZ R7, D2DJNZ R5,DELAYRETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 共阴极LED TABLE1:DW 63628,63835,64021,64103,64260,64400,64524,64580 DW 64684,64777,64820,64898DW 64968,65030,65058,65110DW 65157,65178,65217,65252,65282兰花草SONG0:DB 42H,82H,82H,82H,86H,72H,63H,71H,62H,52H,48HDB 0B2H,0B2H,0B2H,0B2H,0B6H,0A2HDB 83H,0A1H,0A2H,92H,88H,92H,0B2H,0B2H,0A2H,86H,72H DB 63H,71H,62H,52H,44H,12H,02HDB 12H,62H,62H,52H,46H,82,73H,61H,52H,32H,48HDB 00H绿岛小夜曲SONG4: DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2HDB 0B2H,0A2H,82H,72H,88HDB 72H,82H,0A2H,82H,72H,62H,42H,62HDB 38H,38HDB 0A4H,02H,0B2H,0A4H,84HDB 72H,82H,72H,62H,72H,84H,72HDB 64H,62H,12H,34H,02H,42HDB 38H,38HDB 44H,02H,32H,44H,64HDB 72H,82H,72H,62H,72H,84H,0A2HDB 72H,74H,82H,0A4H,02H,062HDB 0A8H,0A8HDB 0B2H,0B4H,0A2H,84H,82H,72HDB 62H,72H,82H,0A2H,88HDB 72H,74H,62H,42H,32H,32H,62HDB 78H,78HDB 82H,84H,72H,82H,0A2H,84HDB 72H,82H,72H,62H,48HDB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68HDB 0B2H,0B2H,0B2H,0A2H,82H,84H,02HDB 72H,74H,62H,42H,32H,42H,62HDB 78H,78HDB 0A2H,0B2H,0A2H,72H,82H,84H,82HDB 72H,74H,62H,44H,64HDB 0A8H,0A4H,02H,0A2HDB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78HDB 84H,72H,62H,44H,02H,62HDB 72H,81H,71H,62H,72H,84H,02H,0A2HDB 0B4H,02H,82H,74H,82H,72HDB 68H,68HDB 00H两只老虎SONG1: DB 44H,54H,64H,44HDB 44H,54H,64H,44HDB 64H,74H,88HDB 64H,74H,88HDB 82H,92H,82H,72H,64H,44HDB 82H,92H,82H,72H,64H,44HDB 54H,14H,48HDB 54H,14H,48H生日快乐SONG2:DB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H,04HDB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04HDB 00H新年快乐SONG3:DB 42H,42H,44H,14H,02HDB 62H,62H,64H,44H,04HDB 42H,62H,84H,84H,02HDB 72H,62H,54H,04HDB 52H,62H,74H,74H,02HDB 62H,52H,64H,44H,04HDB 42H,62H,54H,14H,02HDB 32H,52H,44H,04HDB 00HEND。

相关主题