数字音乐盒的设计.docx
《数字音乐盒的设计.docx》由会员分享,可在线阅读,更多相关《数字音乐盒的设计.docx(29页珍藏版)》请在冰豆网上搜索。
![数字音乐盒的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/24/82da0b91-0d28-4433-a8e7-0f95af5fa8e3/82da0b91-0d28-4433-a8e7-0f95af5fa8e31.gif)
数字音乐盒的设计
单片机原理与接口技术
课程设计
成绩评定表
设计课题:
数字音乐盒的设计
学院名称:
电气工程学院
专业班级:
_
学生姓名:
__
学号:
指导教师:
王黎、臧海河、周刚
设计地点:
31-630
设计时间:
2012-12-17~2012-12-28
指导教师意见:
成绩:
签名:
年月
单片机原理与接口技术
课程设计
课程设计名称:
数字音乐盒的设计
专业班级:
学生姓名:
学号:
指导教师:
王黎、臧海河、周刚
课程设计地点:
31-630
课程设计时间:
2012-12-17~2012-12-28
单片机原理与接口技术课程设计任务书
学生姓名
专业班级
学号
题目
数字音乐盒的设计
课题性质
工程设计
课题来源
自拟
指导教师
王黎、臧海河、周刚
主要内容
(参数)
89c51数字音乐盒:
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)。
2.采用LCD显示信息,显示乐曲编号,播放时间或剩余时间,开机时有英文欢迎提示字符。
3.可通过功能键选择乐曲,暂停,播放。
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。
主要参考
资料
[1]吴亦峰,陈德伟,单片机原理与接口技术,北京:
电子工业出版社,2010年11月
[2]黄智伟全国大学生电子设计竞赛系统设计[M],北京:
北京航空航天大学出版社,2006.6.
[3]黄智伟凌阳单片机课程设计指导[M],北京:
北京航空航天大学出版社,2006.11.
[4]李广弟,朱月秀,王秀山.单片机基础[M],北京:
北京航空航天大学出版社,2001.7.
审查意见
系(教研室)主任签字月日
1.概述
本设计是以AT89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。
1.1设计任务
设计一个基于单片机的音乐盒,利用按键切换演奏出不同的乐曲。
蜂鸣器发出某个音调,使用两个按键,一个用来选择上一首歌曲,另一个切换下一首歌曲。
1.2设计内容
用单片机设计一个音乐盒。
功能如下:
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)。
2.采用LCD显示信息,显示乐曲编号,播放时间或剩余时间,开机时有英文欢迎提示字符。
3.可通过功能键选择乐曲,暂停,播放。
2.系统总体方案介绍
2.1系统组成
系统组成框图如图2.1所示
图
2.1系统组成框图
2.1.1控制器选择
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
引脚如图2.1所示
主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源图2.289c51引脚图
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
音频输出部分
整个输出部分由一个蜂鸣器/喇叭组成,原理图如右图所示:
用P3.0口控制蜂鸣器。
输出显示电路如图2.3所示:
图
图2.3输出显示电路
3.硬件设计
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
3.1按键电路设计
按键电路如图3.1所示:
P1.0-P1.5控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列。
图3.1按键电路
3.2LCD显示电路设计与原理
LCD显示电路如图3.2所示,文字型LCD(16×2)的D0-D07端口与AT89C51端口P0.0-P0.7相连接VSS与VEE两端接地。
P2.0-P2.2作为LCD的RS,R/W,E的控制信号。
用P0.0-P0.7作为LCD的D0-D7的控制信号。
图3.2LCD显示电路
3.3时钟振荡电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
振荡器电路入图3.3所示:
图3.3单片机内部时钟电路
4.软件设计
4.1主程序流程图
主程序流程图如图4.1所示。
4.1主程序流程图
LCD显示流程图如图4.2所示
图4.2LCD显示流程图
5调试
5.1检查硬件连接
在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:
晶振电路的连接,复位电路是否设计正确。
5.2检查软件系统
1.根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。
2.将所有程序组织起来,在软件环境下运行,检查程序是否正确。
通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。
5.3测试结果
5.3.1.总体运行图
图5.1系统总体运行图
6.课程设计体会
这学期学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
在一个好的氛围里才能踏下心来做东西,在这一段时间里,同学们都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,查阅资料,互助解决问题。
另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。
我们也是这么做的,这一点在这次的课程设计中十分重要。
通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。
这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。
我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。
对我而言,知识上的收获重要,精神上的丰收更加。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为为我人生旅途上一个非常美好的回忆
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
参考文献
[1]吴亦峰,陈德伟,单片机原理与接口技术,北京:
电子工业出版社,2010年11月
[2]黄智伟全国大学生电子设计竞赛系统设计[M],北京:
北京航空航天大学出版社,2006.6.
[3]黄智伟凌阳单片机课程设计指导[M],北京:
北京航空航天大学出版社,2006.11.
[4]李广弟,朱月秀,王秀山.单片机基础[M],北京:
北京航空航天大学出版社,2001.7.
[5]赵曙光,郭万有,杨颂华.可编程逻辑器件原理开发与应用[M],西安:
西安电子科技大学,2000.
[6]候伯亨.VHDL硬件描述语言与数字逻辑电路设计[M],西安:
西安电子科技大学出版社,1999.
[7]康华光.模拟电子技术基础(第四版)[M],武汉:
华中理工大学出版社,1999。
附录A系统原理图
系统原理图
附录B程序源代码及注释
RSBITP2.0;定义液晶显示端口标号
RWBITP2.1
EBITP2.2
;*************************
L50MSEQU60H
L1MSEQU61H
L250MSEQU62H
SECEQU65H
MINEQU64H
HOUEQU63H
ORG0000H
;*************************
LJMPMAIN
ORG000BH
LJMPTT0
ORG001BH
LJMPT1INT
ORG1000H
MAIN:
;-----------------------;液晶初始化
MOVSP,#70H;设置堆栈指针
MOVP0,#01H;清屏
CALLENABLE;调用延时程序
MOVP0,#38H;8位,2行显示
LCALLENABLE
MOVP0,#0FH;屏显ON,光标ON,闪烁ON
LCALLENABLE
MOVP0,#06H;计数地址加1,显示幕ON
LCALLENABLE
;-------------------------------内存初始化
LCALLINITIL
;-------------------------------
KEY1:
LCALLKEY
LCALLMODD
LJMPKEY1
;---------------------键盘扫描
KEY:
NOP
NOP
LCALLKS
JNZK1;有按键转到K1
LCALLKAIJI
LCALLSOP
XN:
LJMPKEY
K1:
LCALLMODD
LCALLMODD
LCALLKS
JNZK2
LJMPKEY
K2:
MOVR2,#0FEH;读键盘
MOVR4,#00H
K3:
MOVA,R2
MOVP1,A
MOVA,P1
JBACC.4,L1;为1跳转,第一行无按键
MOVA,#00H
LJMPLK
L1:
JBACC.5,NEXT1
MOVA,#0CH
;-------------------------------------------------------
LK:
ADDA,R4
PUSHACC
K4:
LCALLDELAY1;若同时有其他按键,则等待
LCALLKS
JNZK4
;--------------------------------------------------------
MOVR3,#07H
CLRA
MOVR0,#30H
MOVR1,#31H
MM1:
MOVA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR3,MM1
POPACC
MOV@R0,A
RET
;------------------------------------------------------
NEXT1:
INCR4;------列扫描
MOVA,R2
JNBACC.3,N2
LJMPN1
N2:
LJMPKEY
N1:
RLA
MOVR2,A
LJMPK3
;----------------------------------------------
KS:
MOVA,#0F0H;判断P1口
MOVP1,A
NOP
NOP
MOVA,P1
CPLA
ANLA,#0F0H
RET
;--------------------------------------------------
DELAY1:
SETBRS0
DL:
MOVR5,#0AH
DL2:
MOVR6,#63
DL3:
NOP
NOP
DJNZR6,DL3
DJNZR5,DL2
CLRRS0
RET
;---------------------------------------------------
;30H-37H初值为零
;----------------------------------------------------
INITIL:
MOVR3,#08H
MOVR0,#30H
M1:
MOV@R0,#00H
INCR0
DJNZR3,M1
RET
;----------------------------------------------------
;显示
;---------------------------------------------------
MODD:
MOVP0,#8EH
LCALLENABLE
MOVA,37H
MOVDPTR,#TABLE3
MOVCA,@A+DPTR
LCALLWRITE2
RET
;--------------------------------------------------
;开机提示字
;-------------------------------------------------
KAIJI:
MOVA,37H
CJNEA,#0FH,DFF
MOVP0,#80H;设光标地址
LCALLENABLE
MOVDPTR,#TABLE1;写数据
LCALLWRITE1
DFF:
RET
;----------------------------------------------
;按键值播放歌曲
;----------------------------------------------
SOP:
MOVA,37H
CJNEA,#01H,A11
LCALLMODD
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
LCALLINITILE2
LCALLMAIN0
A11:
CJNEA,#02H,A22
LCALLMODD
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
LCALLINITILE2
LCALLMAIN0
A22:
CJNEA,#03H,AAA
LCALLMODD
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
LCALLINITILE2
LCALLMAIN0
AAA:
RET
;******************************************
INITILE2:
MOVL50MS,#20
MOVL1MS,#00H
MOVL250MS,#00H
MOVSEC,#00H
MOVMIN,#00H
MOVHOU,#00H
MOVA,HOU
MOVB,#10
DIVAB
ADDA,#30H;将BCD吗转化为ASIIC码
MOVP0,#0C8H;显示小时十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0C9H;显示小时个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0DH;显示冒号
CALLENABLE
CALLWRITE2
MOVA,MIN
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CBH;显示分十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH;显示分个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0CDH;显示冒号
CALLENABLE
CALLWRITE2
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH;显示秒十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH;显示秒个位
CALLENABLE
CALLWRITE2
MOVP0,#0C0H;设光标地址
CALLENABLE
MOVDPTR,#TABLE2;写数据
CALLWRITE1
RET
;*********************************************写指令
ENABLE:
CLRRS
CLRRW
CLRE
LCALLDELAY
SETBE
RET
;**********************************************写数据
WRITE1:
MOVR1,#00H
A1:
MOVA,R1
MOVCA,@A+DPTR
CALLWRITE2
INCR1
CJNEA,#0FEH,A1;未到字符串末尾继续
RET
WRITE2:
MOVP0,A
SETBRS
CLRRW
CLRE
CALLDELAY
SETBE
RET
;**********************************************延时
DELAY:
MOVR4,#05
D1:
MOVR5,#0FFH
DJNZR5,$
DJNZR4,D1
RET
;----------------------------------------------显示开机,查表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
TAB1:
DB89H,86H,0C7H,0C7H,0C0H
TAB2:
DB0C6H,88H,0C0H
TABLE1:
DB'WELCOME!
',0FEH
TABLE2:
DB'DFFWB',0FEH
TABLE4:
DB'CAU',0FEH
TABLE3:
DB30H,31H,32H,33H
DB34H,35H,36H,37H
;-------------------------------------------------------------------
;播放歌曲程序
;-------------------------------------------------------------------
MAIN0:
MOVTMOD,#11H
MOVIE,#8AH
MOVTH1,#3CH
MOVTL1,#0B0H
LCALLKS
JNZTTM12
MOV40H,#00H
;---------------------------------------------------------
NEXT20:
MOVA,40H
MOVDPH,52H
MOVDPL,53H
MOVCA,@A+DPTR
MOVR2,A
JZSTOP
ANLA,#0FH
MOVR1,A
MOVA,R2
SWAPA
ANLA,#0FH
JNZSING
CLRTR0
JMPW1
;----------------------------------------------------------
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE00
MOVCA,@A+DPTR
MOVTH0,A
MOV21H,A
MOVA,22H
RLA
INCA
MOVCA,@A+DPTR
MOVTL0,A
MOV20H,A
SETBTR0
SETBTR1
W1:
LCALLDELAY30
INC40H
LCALLKS;------有键跳出
JNZSTOP
LJMPNEXT20
;-----------------------------------------------------------
STOP:
CLRTR0
CLRTR1
LJMPMAIN0
;----------------------------------------------------------
TTM12:
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM13
CLRTR1
LCALLDELAY1
TTM120:
LCALLKS
LCALLDELAY1
JZTTM120
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM120
SETBTR1
LJMPNEXT20
TTM13:
CJNEA,#0CH,TTM14
MOVA,52H
INCA
MOV52H,A
MOVA,53H
INCA
MOV53H,A
MOVA,36H
INCA
MOV37H,A
LJMPTTM2
TTM14:
CJNEA,#0DH,TTM2
MOVA,52H
DECA
MOV52H,A
MOVA,53H
DECA
MOV53H,A
MOVA,36H
DECA
MOV37H,A
;------------------------------------------------------
TTM2:
RET
;***************************************************
;定时器中断子程序0
;***************************************************
TT0:
PUSHACC
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP3.0
POPPSW
POPACC
RETI
;*****************************