基于AT89C2051和芯片LM386构成的音乐播放器

更新时间:2024-06-09 18:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

音乐播放器的制作

摘 要

作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。在此设计中我们采用12MHz的晶振,产生的频率信号即音乐信号由P1.0口输出,信号经过放大后由喇叭发出声音。

乐曲中,每一音符对应着确定的频率,我们可以参照给出的各音符频率及其相应的时间常数来编写程序,根据表中所提供的常数,将其16进制代码送入芯片里,可以奏出音符。音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系也可以从两者关系表中得到。

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0进行工作。

关键词: 音乐播放器、 节拍、 音频频率

Abstract

SCM as important resources of the hardware, using the timer could have a variety of fixed-frequency square-wave signal,and also could have included \\and \-- such as scale, the frequency sound ,In this design, we used 12 MHz oscillator, the frequency signal that the music signal output from P3.7 mouth, After signal amplified by the loudspeaker to make their voices heard.

Music, each note corresponds to determine the frequency, We can refer to the notes given to the frequency and time constant corresponding to the preparation process.According to the table provided by the constant, 16 to 229 of its code into the chip, and then the music can be played.We celebrate the rhythms T0 timer can be used to control and to different initial value, it can have different timing time.for exaple,some songs to the rhythm of each

1

94-minute film, a film of 0.64 seconds. Other rhythms and the time relationship can also relations between the two tables.

Timer T0 work in a regular manner, cytokines and TL0 change, the different audio frequencies. To prepare the scores required to note byte data table in the form of stored procedures, change is the music of the data by changing the content to achieve they.The main program is a sequential read data byte table, according to the sound level of the subroutine call and audio eldest son procedures, start timer T0 work.

Keywords:music player, beats, audio frequency

2

一、方案选择

利用AT89C2051和芯片LM386构成的音乐播放器

利用AT89C2051和芯片LM386构成的音乐播放器的电路图比较简单,而且LM386的放大和滤波效果好,因此选用此方案。具体分析如下:

1.1 AT89C51的主要特性和引脚功能

AT89C51是带4K字节闪烁可编程可擦除只读存储器(EPEROM)的低电压、高性能CMOS

8位微处理器(俗称单片机)。该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。AT89C51将多功能8位CPU和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。 AT89C51的主要特性如下: 寿命达1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24MHz; 三级程序存储器锁定; 128×8位内部RAM; 32可编程I/O线; 2个16位定时器/计数器; 5个中断源; 可编程串行通道; 低功耗闲置和掉电模式; 片内振荡器和时钟电路。

AT89C51引脚排列如图1所示,引脚功能如下:

3

图1 AT89 C51的引脚排列

VCC(40):+5V。 GND(20):接地。

P0口(39-32):P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流。 P1口(1-8):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流。

P2口(21-28):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流。

P3口(10-17):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口。

RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间。 ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲。

PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现。 EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000H-FFFFH)不管是否

4

有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入。 XTAL2(18):来自反向振荡器的输出

1.2 自动播放系统的设计

自动播放系统如图2所示,AT89C51的P1.0端接音频放大模块的IN+端口,在音

频放大模块的VOUT端接一个8欧姆或者16欧姆的喇叭。

1.3 电路设计及音乐编程原理

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即

为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。

利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO (523Hz)。

图2 自动播放系统

5

计数脉冲值与频率的关系式是:

N=fi÷2÷fr 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。 其计数初值T的求法如下: T=65536-N=65536-fi÷2÷fr

例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr 低音DO的T=65536-500000/262=63628 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1046=65059 C调各音符频率与计数初值T对照如表1所示。

表1 C调各音符频率与计数初值T对照

6

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。 表9.2 节拍码对照表

1/4节拍 1/8节拍 节拍码 节拍数 节拍码 节拍数 1 1/4拍 1 1/8拍 2 2/4拍 2 1/4拍 3 3/4拍 3 3/8拍 4 1拍 4 1/2拍 5 1又1/4拍 5 5/8拍

6 1又1/2拍 6 3/4拍

7 1又3/4拍 7 7/8拍 8 2拍 8 1拍 9 2又1/4拍 9 1又1/8拍 A 2又1/2拍 A 1又1/4拍 B 2又3/4拍 B 1又3/8拍 C 3拍 C 1又1/2拍 D 3又1/4拍 D 1又5/8拍 E 3又1/2拍 E 1又3/4拍 F 3又3/4拍 F 1又7/8拍 表9.3 各调节拍的时间设定表

1/4节拍 1/8节拍 曲调值 DELAY 曲调值 DELAY 调4/4 125毫秒 调4/4 62毫秒 调3/4 187毫秒 调3/4 94毫秒 调2/4 250毫秒 调2/4 125毫秒 ⑹ 建立音乐的步骤:

1)先把乐谱的音符找出,然后由上表建立T值表的顺序。 2)把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。

3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。

表9.4 简谱对应的简谱码、T值、节拍数 简谱 发音 简谱码 T值 节拍码 节拍数 5 低5SO 1 64260 1 1/4拍 6 低6LA 2 64400 2 2/4拍 7 低7SI 3 64524 3 3/4拍 1 中1DO 4 64580 4 1拍

7

2 中2RE 5 64684 5 1又1/4拍 3 中3M 6 64777 6 1又2/4拍 4 中4FA 7 64820 7 1又3/4拍 5 中5SO 8 64898 8 2拍 6 中6LA 9 64968 9 2又1/4拍 7 中7SI A 65030 A 2又2/4拍 1 高1DO B 65058 B 2又3/4拍 2 高2RE C 65110 C 3拍 3 高3M D 65157 D 3又1/4拍 4 高4FA E 65178 E 3又2/4拍 5 高5SO F 65217 F 3又3/4拍 不发音 0

1/4拍的延迟时间=187毫秒

1.4 程序(音乐:祝你平安)

SPK BIT P1.0 ORG 0000H LJMP START ORG 000BH

INC 20H ;中断服务,中断计数器加1

MOV TH0,#0D8H

MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI

START:

MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MOV B,#00H ;表序号清0 MUSIC1:

NOP CLR A

MOVC A,@A+DPTR ;查表取代码

8

JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:

NOP

MOV R6,A INC DPTR

MOV A,B

MUSIC2:

MUSIC3:

MUSIC4:

END0:

MUSIC6:

DEL:

MOVC A,@A+DPTR ;取节拍代码送R7 MOV R7,A

SETB TR0 ;启动计数 NOP CPL SPK MOV A,R6 MOV R3,A LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否? ;不等,则继续循环

MOV 20H,#00H ;等于,则取下一代码 INC DPTR ; INC B

LJMP MUSIC1

NOP

CLR TR0 ;休止100毫秒 MOV R2,#0DH NOP

MOV R3,#0FFH LCALL DEL

DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1

NOP

MOV R2,#64H ;歌曲结束,延时1秒后继续

MOV R3,#00H LCALL DEL

DJNZ R2,MUSIC6 LJMP MUSIC0 9

NOP DEL3:

MOV R4,#02H DEL4:

NOP

DJNZ R4,DEL4 NOP

DJNZ R3,DEL3 RET NOP DAT:

db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h db30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h

db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h

db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h db 20h,10h,2bh,10h,26h,30h,30h,80h,00H END

二、电路问题分析

2.1 焊接:出现的问题

2.1.1)短路:过大的焊点造成两焊点相接.

2.1.2)线路设计不良:线路或接点间太过接近(应有0.6mm以上间距); 2.1.3)虚焊

2.2 焊点技术小结.

2.1.1)完全使用软件元件库中的元件,不加任何修改

这是大部分情况下我们应该的,但有时你的器件可能多少有点出入,如果你没有用过,确认是否与库里的元件相符,最好量一下实尺寸,以免出现元件到时插不了、管脚不符等的灾难性后果。

10

2.1.2)要保证焊接质量

焊接时确实焊牢,焊锡的堆积、气孔容易造成虚焊。焊接时间一般不超过3秒钟,烙铁的功率应用内热式25W左右。已焊接好的集成电路要仔细查看,最好用欧姆表测量各引脚间有否短路,确认无焊锡粘连现象再接通电源。

2.1.3)焊接时间不宜过长,否则容易烫坏元件,必要时可用镊子夹住管脚帮助散热。 2.1.4)、焊点应呈正弦波峰形状,表面应光亮圆滑,无锡刺,锡量适中。

2.1.5)、焊接完成后,要用酒精把线路板上残余的助焊剂清洗干净,以防炭化后的助焊剂影响电路正常工作。

焊接技术是一项必须掌握的基本技术,需要多多练习才能熟练掌握。

三、调试

程序调试中出现的问题及解决的办法:

3.1.有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

3.2.程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。

3.3.编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

3.4.编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

3.5.程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。 3.6.编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。

3.7.两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。

11

3.8.在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,托因时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。改进方案:若采用可以定时时间更长的单片机,可以避免所有问题。

四、 讨论及进一步研究建议

4.1:扩大宽音域范围:

可以采用适当的误差补偿,利用单片机定时中断的方法能在宽音域范围产生准确稳定的音频信号。

要产生音频信号,只要算出某一音频的周期(频率的倒数),将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。 4.2:关于中断响应时间:

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为3~6个机器周期,经过反复试验取5个机器周期作为校正最为恰当。

4.3:关于杂音:

为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐 4.4:关系波形:

由于输出的是方波,比较难听,也可以将波形细分用DA输出正弦波。 4.5:关于芯片:可以考虑选用89S51 89S51相对于89C51增加的新功能包括:

-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低! -- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。

-- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。

12

-- 具有双工UART串行通道。

-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。 -- 双数据指示器。 -- 电源关闭标识。

-- 全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。

-- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。

比较结果:就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。从AT89C51升级到AT89S51 ,也是同理。和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。

五、课程设计心得

由于学习单片机的时间不长,对单片机的硬件设计,软件设计掌握的深度不够,

但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写单片机的大程序,很有成就感。

在一个好的氛围里才能踏下心来做东西,在这几周课程设计的时间里,学习的氛

围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,我们也是这么做的,这在课设中十分重要。

此次实习可以说是获益匪浅。通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:仔细谨慎,精益求精。在系统加电调试中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。

13

参考文献

肖洪兵. 跟我学用单片机. 北京:北京航空航天大学出版社,2002.8 李广第. 单片机基础. 第1版.北京:北京航空航天大学出版社,1999

徐惠民、安德宁. 单片微型计算机原理接口与应用. 第1版.北京邮电大学出版社,1996

夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社, 2001 陈志强 胡辉. 单片机应用系统设计实践指南. 自编教材

李朝青《现代微机原理与接口技术》,第3版,北京航空航天大学出版社,2005.5

14

本文来源:https://www.bwwdw.com/article/zlw6.html

Top