八音盒设计实用版.docx
- 文档编号:18575087
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:32
- 大小:200.05KB
八音盒设计实用版.docx
《八音盒设计实用版.docx》由会员分享,可在线阅读,更多相关《八音盒设计实用版.docx(32页珍藏版)》请在冰点文库上搜索。
八音盒设计实用版
《单片机原理及应用》课程设计
—八音盒设计
班级:
机082-2
学号:
2008235022
姓名:
完成日期:
2011年07月09日
目录
一、单片机设计课程的目的和基本要求2
二、八音盒的设计要求3
三、关于AT89C513
3.1、对于AT89C51的性能介绍3
3.2、AT89C51的管脚介绍4
四、总体设计6
五、硬件原理及设计说明7
六、软件设计流程图7
七、程序输入窗口、编码及音乐程序9
7.1程序输入窗口9
7.2编码9
7.3音乐程序10
八、仿真和调试22
九、元器件清单23
十、电路总图24
十一、实验总结25
参考文献:
26
一、单片机设计课程的目的和基本要求
大学本科生动手能力的培养和提高时大学本科的一个重要内容。
本次课程的设计目的,是让我们通过课程设计建立起单片机应用系统的概念,根据系统设计要求,掌握初步的单片机系统设计方法,让学生的动手能力和对单片机系统从硬件系统和软件系统设计两个方面都得到实际的提高。
为今后的毕业设计打下良好的基础。
课程设计的基本要求有:
(1)在课程设计过程中,学会使用89S51单片机及相应绘图软件,根据设计要求设计,编程,运行,调试最后提供课程设计报告;
(2)课程设计应由学生本人独立完成,严禁抄袭;
(3)认真编写课程设计报告。
二、八音盒的设计要求
8051八音盒
本设计利用8051单片机结合内部定时器LCD设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。
本设计可以学习8051定时器程序设计,按键扫描及歌曲旋律简单直觉式输入法的设计方法。
其基本功能为:
1使用LCD显示器来显示目前演奏的歌曲编号;2具有16个按键操作来选择演奏哪一首歌曲;3内建10首歌曲旋律,按下单键可以演奏歌曲;4演奏时可以按键中断。
程序执行后工作指示LED闪动,表示程序开始执行,按下单键0~9便可以演奏歌曲,歌曲演奏中,可以按键中断。
三、关于AT89C51
3.1、对于AT89C51的性能介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
它可以提供以下的功能标准:
(1)4K的字节闪烁存储器;
(2)128字节随机存取数据存储器;
(3)32个I/O口;
(4)2个16位定时/计数器;
(5)1个5向量两级中断结构;
(6)1个串行通信口;
(7)片内振荡器和时钟电路。
另外AT89C51还可以警醒OHZ的惊涛逻辑操作,并支持两种软件的节点模式。
3.2、AT89C51的管脚介绍
图3.1AT89C51的管脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
四、总体设计
(1)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲
(2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。
例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。
记数脉冲值与频率的关系公式如下:
N=Fi/2/FrN:
记数值
Fi:
内部计时一次为1微秒.故其频率为1MHZ
Fr;要产生的频率
(3):
起记数值的求法如下:
T=65536-N=65536-Fi/2/Fr
例如:
设K=65536,F=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr
低音D0的T=65536-500000/262=63627
中音D0的T=65536-500000/523=64580
低音D0的T=65536-500000/1047=65059
表4.1调个音符频率与计数值T的对照表
音符
频率
简码值(T值)
音符
频率
简码值(T值)
低IDO
262
63628
#4FA#
740
64860
#IDO#
277
63731
中5SO
784
64898
低2RE
294
63853
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高IDO
1046
65058
低6SO
392
64260
#IDO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低SI
494
64524
高4FA
1397
65178
中IDO
523
64580
#4FA#
1480
65198
#IDO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
五、硬件原理及设计说明
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示歌曲号。
(1)硬件电路中用
、
分别接S1、S2作为上、下一曲的功能键
(2)用P1.0-P1.6控制七段码a,b,c,d,e,f。
(3)用P2.0口控制喇叭。
(4)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
六、软件设计流程图
七、程序输入窗口、编码及音乐程序
7.1程序输入窗口
图7.1keil5环境下的程序输入窗口
7.2编码
建立音乐的步骤
(1)先把乐谱的音符找出,然后建立T值表的顺序;
(2)把T值表建立在TABLE1,构成发音符的计数值放在"TABLE"。
(3)简谱码(音符)为高位,节拍为(节拍数)低四位,音符节拍码放在程序的TABLE处。
表7.1拍与节拍的对照
节拍码
节拍数
节拍码
节拍数
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拍
8
2拍
8
1拍
A
2又1/2节拍
A
1又1/节拍
C
3拍
C
1又1/2节拍
F
3又3/4节拍
表7.2简谱对应的简谱码、T值、节拍数
简谱
发音
简谱码
T值
节拍码
节拍数
5
低音SO
1
64260
1
1/4拍
6
低音LA
2
64400
2
2/4拍
7
低音TI
3
64524
3
3/4拍
1
中音DO
4
64580
4
1拍
2
中音RE
5
64684
5
1又1/4拍
3
中音MI
6
64777
6
1又2/1拍
4
中音FA
7
64820
8
2拍
5
中音SO
8
64898
A
2又1/2拍
6
中音LA
9
64968
C
3拍
7
中音TI
A
65030
F
3又3/4拍
1
高音DO
B
65058
2
高音RE
C
65110
3
高音MI
D
65157
4
高音FA
E
65178
5
高音SO
F
65217
不发音
0
7.3音乐程序
OUTBITP2.0;定义音频输出端口,p2.0
NEQU6;歌曲总数
OUT_NUMEQUP1;数码管显视当前所放歌曲曲数
ORG0000H
AJMPMAIN
ORG0003H
AJMPLAST_SONG;外部中断0用于接上一曲歌按键
ORG000BH
AJMPF_T0;定时器0用于定时,作音符发生器用
ORG0013H
q4:
AJMPNEXT_SONG;外部中断1接下一曲歌按键
ORG001BH
AJMPSTART_PAUSE;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffH,方式2
ORG0030H
MAIN:
MOVSP,#60H
MOVDPTR,#TABLE;DPRT指向每首歌曲的入口地址的地址。
MOVR0,#30H;R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放
;歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。
MOVR5,#00H;R5中存放表TABLE中正在执行操作的序号
MOVR6,#1;R6存放正在设置入口信息的歌曲数
SET_TAB:
MOVA,R5;设置每首歌曲的入口信息,存放在以30H开始的存储单元中。
MOVCA,@A+DPTR
MOV@R0,A
INCR5
INCR0
MOVA,R5
MOVCA,@A+DPTR
MOV@R0,A
INCR5
INCR0
MOVA,R5
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCR5
MOVA,R5
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCR5
INCR6;设置完一首歌曲后,歌曲数加一
CJNER6,#N+1,SET_TAB;是否设置完,没有便继续,否则进行下面的操作
;***********************************对中断,计数器的相关参数进行设置
MOVTMOD,#61H;计数器0工作方式1,计数器1工作方式2
MOVTH1,#0FFH;给计数器1置初值0FFH,又由于是工作方式2
MOVTL1,#0FFH;计数器计数为1,相当于一外部中断。
SETBET1;允许计数器1中断
SETBET0;允许计数器具0中断
CLRPT0;计数器0为低优先级
SETBPT1;计数器1为高优先级
SETBIT0;外部中断0为跳沿触发
SETBPX0;高优先级
SETBIT1;外部中断1为跳沿触发
SETBPX1;高优先级
SETBEX1;允许外部中断1中断
SETBEX0;允许外部中断定0中断
SETBEA;开中断总开关
SETBTR1;定时器1开始工作,作中断用
SETBOUT;音频输出端口初始化
;***********************************;设置结束
CLRF0;设置F0=0,用来作暂停/播放的标置位用
MOV22H,#01H;22H单元中存放正在播放的歌曲编号
MOVDPTR,#OUT_TAB;将正在播放的歌曲编号送数码管显视
MOVA,22H
MOVCA,@A+DPTR
MOVOUT_NUM,A
MOVR7,#00H;R7中存放歌曲总信息的入口地址
START0:
MOVR4,#00H;R4存放当前正在播放歌曲的第几个节拍数
MOVR0,#30H;30H开始的单元中存放歌曲的入口信息
MOVA,R7;将歌曲的节拍表的入口地址送到DPTR
ADDA,R0
MOVR0,A
MOVDPH,@R0
INCR0
MOVDPL,@R0
INCR0
MOVA,R4
INCR4
MOVCA,@A+DPTR;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符
;****************************************************
MOV26H,A;将取出的音符数+节拍数保存在职26H单元中
NEXT:
MOVR0,#30H;开始取出歌曲的第一个数据
MOVA,R7
ADDA,R0
MOVR0,A
MOVDPH,@R0
INCR0
MOVDPL,@R0
INCR0
MOVA,R4
INCR4
MOVCA,@A+DPTR;放在A中
;****************************************************
JZEND0;若为0,则表示为休止符,不唱,本次音符不唱
MOVR1,A;不为0,取出节拍数
ANLA,#0FH
MOVR2,A
MOVA,R1
SWAPA
ANLA,#0FH
JNZSING;音符不为0,唱
CLRTR0;为0,不唱,关频率发生器
SJMPSING1
SING:
DECA;开始唱,进行相应的数据处理
MOVR3,A
RLA
MOVDPH,@R0
INCR0
MOVDPL,@R0
INCR0
MOVCA,@A+DPTR
MOV21H,A
MOVTH0,A
MOVA,R3
RLA
INCA
MOVCA,@A+DPTR
MOV20H,A
MOVTL0,A
SETBTR0;开唱
SING1:
LCALLDELAY;每个音符唱多久
JBF0,FOR;是否暂停,
AJMPNEXT;没有暂停,继续
FOR:
CLRTR0;暂停,不唱
JBF0,$;等待播放
AJMPNEXT;开始播放
END0:
CLRTR0;不唱
MOVA,22H;唱完处理
CJNEA,#N,WW;是不是全部歌曲都唱完
MOV22H,#01H;全部唱完,则从第一首开始再唱
MOVR7,#00H
MOVOUT_NUM,#11111001B;数码管显视第一首歌曲编号
AJMPWWW
WW:
MOVA,R7;没有全部唱完,唱下一首,歌曲的入口信息调整
ADDA,#4
MOVR7,A
INC22H
CLREA
PUSHDPH
PUSHDPL
MOVA,22H
MOVDPTR,#OUT_TAB
MOVCA,@A+DPTR
MOVOUT_NUM,A;数码管显视相应的歌曲编号
POPDPL
POPDPH
WWW:
SETBEA
AJMPSTART0;开始下一首的演唱
F_T0:
MOVTH0,21H;定时器0置初值
MOVTL0,20H
CPLOUT;频率产生
RETI
NEXT_SONG:
PUSHACC;下一曲中断程序处理,保护现场
PUSHDPH
PUSHDPL
CLREA;关中断
MOVA,22H
CJNEA,#N,Q;是最后一首吗?
MOVR7,#00H;是最后一首,则R7指向第一首,演唱第一首
MOV22H,#01H
AJMPBACK
Q:
INC22H;不是最后一首,唱下一首,R7内容加4,歌曲数加1
MOVA,R7
ADDA,#4
MOVR7,A
BACK:
MOVR4,#00H;数码管显视相应的歌曲编号
MOVA,22H
MOVDPTR,#OUT_TAB
MOVCA,@A+DPTR
MOVOUT_NUM,A
;********************************************
MOVB,R0;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护
MOVR4,#00H
MOVR0,#30H
MOVA,R7
ADDA,R0
MOVR0,A
MOVDPH,@R0
INCR0
MOVDPL,@R0
INCR0
MOVA,R4
INCR4
MOVCA,@A+DPTR
MOV26H,A;结果存入26H单元中
DECR4
MOVR0,B;恢复R0中的内容
;********************************************
POPDPL;恢复现场
POPDPH
POPACC
SETBEA
RETI;中断返回
LAST_SONG:
PUSHACC;上一曲中断程序处理开始,保护现场
PUSHDPH
PUSHDPL
CLREA;关中断
MOVA,22H;曲目数送A
CJNEA,#1,QQ;是否是第一首
MOV22H,#N;是第一首歌曲
MOVB,#4;将R7指向最后一首歌曲
MOVA,#N-1
MULAB
MOVR7,A
AJMPBACK2;处理结束
QQ:
DEC22H
MOVA,R7;R7减4
SUBBA,#4
MOVR7,A
BACK2:
MOVR4,#00H
MOVA,22H
MOVDPTR,#OUT_TAB
MOVCA,@A+DPTR
MOVOUT_NUM,A;数码管显视相应歌曲的编号
;********************************************
MOVB,R0;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八音盒 设计 实用
![提示](https://static.bingdoc.com/images/bang_tan.gif)