单片机音乐播放器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物理与电子信息工程系单片机课程设计
题目:单片机奏乐
姓名:
学号:
系别:
专业:
年级:
指导教师:
年月日
题目:单片机奏乐
摘要
本文的主要内容是用AT89C2051单片机为核心控制元件,设计一个奏乐器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。
关键词: AT89C2051;奏乐
引言
本文的主要内容是用AT89C2051单片机为核心控制元件,设计一个奏乐器,以单片机作为主控核心、扬声器等模块组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意编写需要的程序,播放出音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合.我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
一、实验任务
基本部分演奏一首乐曲:要求每人的曲目不同;有一个按键,按下时奏曲,再按一下时停止演奏。
曲子播完自动停止。
发挥部分:可以播放多首曲子。
也可以与其他功能结合。
二、系统整体结构
图1.1 AT89C2051芯片的引脚图2.1 AT89C2051简介
AT89C51芯片的引脚图如图1.1:
2.1.1 电源和晶振
Vdd—运行和程序校验时加+5V。
Vss—接地。
XTAL1—输入到振荡器的反相放大器。
XTAL2—反相放大器的输出,输入到内部时钟发生器。
2.2.2 I/O口
当使用片外存储器(ROM及RAM)时,作地址和数据总线分时复用。
在程序校验期间,输出指令字节(这时,需加外部上拉电阻)。
作输入口时,应先用软件置“1”。
P1--8位、准双向I/O口,具有内部上拉电阻。
在编程/校验期间,用做输入低位字节地址。
作输入口时,应先用软件置“1”。
P3--8位、准双向I/O口,具有内部上拉电阻。
作输入口时,应先软件置“1”。
P3提供各种替代功能。
在提供这些功能时,其输出锁存器应由程序置1。
串行口:
P3.0—RXD串行输入口
P3.1—TXD串行输出口
中断:
P3.2—/INT0外部中断0,输入。
P3.3—/INT1外部中断1,输入。
定时器/计数器:
P3.4—T0定时器/计数器0的外部输入。
P3.5—T1定时器/计数器1的外部输入。
2.2.3 控制线
输入:RST—复位输入信号,高电平有效。
在振荡器工作时,在RST上作用两个机器周期以上的高电平,将器件复位。
EA/Vpp—片外程序存储器访问允许信号,低电平有效。
在编程时,其上施加21V 的编程电压。
三、系统硬件设计
1、设计原理
声音的频谱范围约再几十到几千赫兹,利用程序控制单片机某I/O口产生一定频率地矩形波,经放大后接上扬声器就能发出一定频率地声音。
要奏出一首曲子,还必须准确地控制乐曲节奏,即音符地持续时间,常用节拍来表示。
音符的节拍可用定时器来控制。
因此,我们可以编制代码,规定每个音符使用1个字节,字节高4位为音符码代表音符的高低;低4位为节拍码代表音符的节拍。
2、单片机最小系统
(1)时钟电路
时钟电路是计算机的心脏,它是控制着计算机的工作节奏。
MCS-51内部都有一个反相放大器,XTAL1、XTAL2 分别是反相放大器输入和输出端,外接定时反馈元件就组成震荡器产生时钟送至单片机内部的各个部件。
如下图所示,片内电路与片外器件构成一个时钟发生电路,CPU的所有操作均在时钟脉冲同步下进行。
片内振荡器的震荡频率 fOSC 非常接近晶振频率,一般多在 1.2MHz~12MHz 之间选取,这次用的时钟频率是11.0592MHz。
图 3.8 中 C7、C8 是反馈电容,其值在 5pF~30pF之间选择,其典型值是30Pf。
作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用
(2)复位电路
系统在启动运行时都要复位,使中央处理器和系统中的其他部件都处于一个确定的初始状态,并从这状态开始工作。
采用按键复位方式。
在按键的瞬间,电容通过电阻充电,就在端出现一定时间的高电平。
只要保持 RST
引脚为高电平时间足够长,就可使 CPU 复位。
所需高电平时间的长短与 Vcc 上升时间和振荡器起振时间有关。
10MHz 时,约1ms;1MHz 时,约10ms。
若 Vcc 上升时间小于 20ms,那么从上电时间算起,只要保持 RST 引脚在高电平停留时间不小于 20ms 即EA端接VCC,让单片机读取内部存储器的数据。
3、硬件及说明
1、硬件原理图
2、硬件说明
2.1 p1.0到p1.7接发光二极管,然后再接上保护电阻1k
2.2 p
3.7是输出口,接上一个3k3的上拉电阻,提高灌电流,提高负载的功率。
2.3 p
3.3、3.4、3.5接上三个按键,p3.3用来暂停和开始,p3.4是上一首,p3.5是下一首
2.4 12M的晶振要靠近89c2051,因为晶振距离芯片越远误差越大
四、软件设计
1、音符的产生及编码
(1)要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的
脉冲.
(2)利用8051的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法.
(3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).
计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr N: 计算值;
Fi: 内部计时一次为1us, 故其频率为1MHz;
(4)其计数值的求法如下:
T=65536-N=65536-Fi÷2÷Fr
例如: 设K=65536, F=1000000=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=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1047=65059
(5)、将乐曲中所有用到的音符按低、中、高的顺序编码,如下所示:
2、节拍的编码
(1)、找出简谱中最短的节拍(1/4节拍),并以其为基准,则各音符的节拍码如下图所示:
(2)、用定时器/计数0中断的方法来实现音符的节拍,每50ms中断一次,重复循环8次,则1/4节拍为0.4s
3、编写音乐代码
根据简谱,依次找出每个音符代码及节拍码,按照把音符码放在高4位节拍码放在低4位的方法组合成一个字节,并建立一个表格按顺序存放,则通过顺序查表的方式,就能获得音符及节拍的信息。
五、实验总结及心得
1、实验操作
将程序烧写进芯片后接通电源,按下播下放键便可以播放音乐,按下下一首键就播放下一首歌曲,按上一首键就播放上一首歌曲
2、调试
(1)经常会出现编译同过了,但是烧进芯片后还是出现这样那样的错误,这就是程序中出现了细节的错误。
(2)程序要尽量模块化,这样不仅使程序看起来美观,而且也方便于调试,找错,不然很容易使自己乱掉。
(3)写程序要养成先写流程图在写程序的习惯,这样你在心中才有一个清晰的
思路,写起来才能够快而准确。
3、设计总结
(1)、画PCB图的比原来熟练,而且一些细节掌握得比原来好。
但仍需要努力,由于器件布局不够好,有一根跳线,影响了板的美观。
(2)、布图时有考虑到单联电位器的位置要方便调试时使用,却忘了考虑AT89C2051的位置导致在烧写程序时拆装芯片不方便。
(3)、细节定成败,要注意小细节,有时候一块板的调试成功就在于小细节。
4、心得
通过这次课程设计我对单片机有了更深的了解,同时加强了我的实际动手能力,利用所学知识,根据实际生产当中给出的产品参数,初步掌握仪器、仪表的设计方法及其制造过程;锻炼了自己初步掌握工程设计的要点和撰写技术文件的基本方法。
并对该类器件的参数、性能和应用进行更深入的了解,初步了解该行业的现状、未来和发展,这次设计让我受益匪浅。
六、参考文献或资料
1、韩志军,王振波,等. 单片机应用系统设计——入门向导与设计实例. —北京:机械工业出版社
2、张义和,陈敌北,等. 例说8051. —北京:人民邮电出版社
3、胡健.单片机原理及接口技术实践教程.机械工业出版社
4、张俊谟.单片机中级教程原理与应用.北京航空航天大学出版社
5、李全利,单片机原理及应用[M],高等教育出版社,2000
附录
附录1:原理图
附录2:PCB图
附录3:元件清单
附录4:程序框图
附录5:程序
附录6:歌谱
附录7:实物正反面
附录1:原理图
附录2:PCB图
附录3:元件清单
附录3:程序框图
子程序
附录4:程序
ORG 0000H
LJMP MAIN
ORG 000BH ;定时器T0中断 LJMP INTT0
ORG 0300H
MAIN: INCLUDE "VARDFN.ASM"
MOV TMOD,#11H
MOV IE,#82H
CLR F0
MOV CYA,#00H
MOV TH1,#0F0H
MOV TL1,#60H
MOV STA,#00H
SETB TR1
MLOOP: JNB TF1,$
CLR TF1
MOV TH1,#0F0H
MOV TL1,#60H
LCALL RDKEY
MOV DPTR,#MTAB
MOV A,STA
ANL A,#0FH
RL A
JMP @A+DPTR
MTAB: AJMP WORK0
AJMP WORK1
AJMP WORK0
AJMP WORK0
WORK0: MOV A,#01H
JB EK3,WK01 ;播放
SJMP WK02
WK01: MOV BCG,A
LCALL PPT
WK02: AJMP MLOOP
PPT: MOV DPTR,#TAB1
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H ; 查第一个音节
MOV STA,#01H
MOV TH1,#0F0H
MOV TL1,#60H
AJMP MLOOP
WORK1: LCALL BEGIN
DELAY1:SETB TR1
DELAY: MOV R4,#31
M000: JNB TF1,M000
CLR TF1
MOV TH1,#0F0H
MOV TL1,#60H
LCALL RDKEY
JB EK1,WK11 ;下一首 JB EK2,WK12 ;上一首 JB EK3,WK13 ;暂停 DJNZ R4,M000
DJNZ R1, DELAY
INC CYA
LJMP WORK1
WK12: LJMP WK1
WK13: LJMP WK2
WK11: MOV A,BCG
CJNE A,#03H,NEXT
MOV BCG,#01H
SJMP AST
NEXT: CJNE A,#01H,NEXT1
INC BCG
MOV DPTR,#TAB2
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
SJMP AST
NEXT1: CJNE A,#02H,AST
INC BCG
MOV DPTR,#TAB3
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
AST: LJMP WORK1
WK1: MOV A,BCG
CJNE A,#03H,WK001
DEC BCG
MOV DPTR,#TAB2
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
SJMP WK003
WK001: CJNE A,#02H,WK002
DEC BCG
MOV DPTR,#TAB1
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
SJMP WK003
WK002: CJNE A,#01H,WK003
MOV BCG, #03H
MOV DPTR,#TAB3
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
WK003: LJMP WORK1
WK2: CPL F0
JB F0,PAUSE ;暂停
SETB TR0
MOV CYA,42H
LJMP WORK1
PAUSE: CLR TR0
MOV 42H,CYA
PAUSE1:SETB TR1
JNB TF1,$
CLR TF1
MOV TH1,#0F0H
MOV TL1,#60H
LCALL RDKEY
JB EK3,WK2
SJMP PAUSE1
BEGIN: MOV A,CYA ;查歌曲表
MOV DPH,CZG
MOV DPL,CZD
MOVC A,@A+DPTR
MOV R2,A
JZ STOP ;结束
ANL A,#0FH ; 采集节拍 MOV R1,A
ANL P1,#0FFH ;节拍送p1口 MOV P0S,R2
MOV P1,P0S
MOV A,R2 ;中断次数 SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
SJMP RETT
STOP: CLR TR0
MOV A,BCG
CJNE A,#03H,WOOK1
MOV BCG,#01H
MOV DPTR,#TAB1
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
MOV R1,#1
SJMP RETT
WOOK1: CJNE A,#01H,WOOK2
INC BCG
MOV DPTR,#TAB2
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
MOV R1,#1
SJMP RETT
WOOK2: CJNE A,#02H,RETT
INC BCG
MOV DPTR,#TAB3
MOV CZG,DPH
MOV CZD,DPL
MOV CYA,#00H
MOV R1,#1
SJMP RETT
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
RETT: RET
INTT0: PUSH ACC ;中断程序
PUSH PSW
MOV TH0,21H
MOV TL0,20H
CPL SPEAK
POP PSW
POP ACC
RETI
TAB0: DW 64580,64684,64777,64820
DW 64898,64968,65030,64260
DW 64400,64524,65058,63835,64021 ;低7,5,3,2 中1,2,3,4,5,6,7 高1,4
;******************** 第一首《十年》******************
TAB1:DB
02H,11H,21H,32H,32H,22H,32H,21H,11H,0A1H,91H,92H,0D1H,91H,83H,91H,0A2 H,91H,81H,94H,11H,0A1H,91H,0A1H,98H,03H,81H,0A1H,0A1H,91H,0A1H DB
98H,04H,02H,11H,21H,32H,32H,22H,32H,21H,31H,51H,11H,13H,31H,22H,22H,2 1H,11H,0A1H,11H,13H,11H,11H,0A1H,91H,0A1H
DB
11H,93H,94H,03H,81H,11H,0A1H,91H,81H,92H,0A1H,91H,94H,08H,03H,81H,32H ,21H,11H,22H,31H,21H,21H,83H
DB
01H,11H,91H,0A1H,11H,61H,51H,11H,34H,01H,31H,21H,31H,48H,23H,31H,32H, 42H,38H,03H,11H,21H,52H,31H
DB
33H,31H,31H,41H,51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H ,0A1H,11H,91H,92H,91H,11H,0A1H,91H
DB
0A1H,31H,31H,22H,0A1H,11H,14H,01H,11H,21H,31H,63H,31H,42H,51H,31H,31H ,22H,11H,21H,52H,31H,33H,31H,31H,41H
DB
51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H,0A1H,11H,91H,92 H,91H,11H,0A1H,91H
DB
0A2H,41H,31H,22H,31H,21H,12H,12H,11H,11H,21H,31H,63H,51H,32H,11H,21H, 26H,11H,0A1H,18H
DB 00
;***************第二首<<两只蝴蝶>>********************
TAB2:DB
32H,22H,38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,9 2H,88H,04H,32H,22H
DB
38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,21H,92H,12H,28H,0 4H,32H,22H
DB
38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,91H,11H,8 8H
DB
04H,32H,52H,58H,02H,52H,62H,52H,38H,04H,22H,22H,24H,22H,32H,22H,12H,9 2H,92H
DB
12H,12H,1cH,08H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22H DB
38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,5 4H,02H,0b4H,72H
DB
62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,32H,22H,32H DB 58H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22H
DB
38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,5 4H,02H,0b4H,72H
DB
62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,84H,92H,1cH DB 00
;***************第三首《月亮代表我的心》****************
TAB3: DB 02H,82H
DB 16H,32H,54H,02H,52H
DB 0A6H,32H,54H,02H,52H
DB 64H,74H,0B6H,64H
DB 52H,5CH,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,12H,94H,22H,32H
DB 2CH
DB 32H,52H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 96H,0A2H,96H,82H
DB 3CH,54H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 16H,12H,14H,22H,32H DB 2CH,02H,82H
DB 16H,32H,56H,12H
DB 0A6H,32H,56H,52H
DB 66H,72H,0B6H,62H
DB 62H,52H,58H,32H,22H DB 16H,12H,14H,32H,22H DB 16H,12H,14H,22H,32H DB 26H,92H,0A4H,12H,22H DB 1CH
DB 00
INCLUDE "RDKEY.ASM"
END
附录6:歌谱
附录7:实物正反面。