单片机数字音乐盒程序设计.docx
《单片机数字音乐盒程序设计.docx》由会员分享,可在线阅读,更多相关《单片机数字音乐盒程序设计.docx(34页珍藏版)》请在冰豆网上搜索。
单片机数字音乐盒程序设计
《单片机原理及应用》
课程设计报告
题目
数字音乐盒
学号
姓名
邢安超张凯旋罗杰
年级专业
2012级自动化
指导教师
黄云飞
完成日期
2014
年
6
月
7
日
安徽师范大学物理及电子信息学院
CollegeofPhysicsandElectronicInformation,AnhuiNormalUniversity
数字音乐盒
邢安超张凯旋罗杰,皖江学院
摘要:
本设计是采用单片机为核心设计的数字音乐盒。
它可以实现音乐的播放,可以通过功能键来选择乐曲,播放或暂停,并且可以通过LCD屏幕显示正在播放的歌曲的序号,及乐曲播放时间,开机时有英文欢迎提示字符,本音乐盒可以播放三首音乐。
主控芯片采用AT89C51,采用汇编语言进行编程,编程后利用KEILC51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。
本系统功能键有一个2×4的键盘组成,其中1号到3号键是歌曲序列号键,可以直接选择音乐;4号键选择当前播放音乐的上一首音乐,5号键选择当前播放音乐的下一首音乐,6号键使音乐暂停播放,7号键显示开机画面。
键盘采用动态扫描方式。
每次扫描一行键盘,送此行低电平,读输入口的状态值,判断有没有键按下。
若有键按下,根据读入口的值选择显示值并送至显示值寄存单元,判断键值,启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。
同时启动定时器T1,计算音乐的播放的时间,并且启动LCD,在LCD上显示序号和播放时间。
在制作过程中,我发现将音乐代码的首地址送出很难实现。
因为其首地址是十六位的,而单片机中我们能用的十六位的寄存器只有DPTR,但是DPTR在下面必须要用到,所以不能用。
把十六位地址拆成俩个八位的地址分高低位去送,用直接地址#high(4000h)去送,编译成功。
关键词:
AT89C51,数字音乐盒,2×4键盘,LCD,时钟震荡电路
引言
本课程设计是设计数字音乐盒及其播放程序。
乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。
实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及及流行,使这种方案的应用越来越多。
如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。
使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。
FPGA预装了很多已构造好的参数化库单LPM器件。
通过引入支持LPM的EDA[1]软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。
单片机制作的八音盒弥补了这些。
1课程设计目的
基于学习单片机课程的基础,锻炼我们的动手能力。
《单片机及接口技术》课程设计是单片机课程的综合性及实践性教学环节,课程设计的目的就是:
a.综合运用单片机原理课程和单片机接口技术课程的知识,分析和解决实际应用中的问题进一步巩固、加深和拓宽所学的知识。
b.通过设计实践,逐步树立正确的设计思想,熟悉掌握单片机应用系统设计的一般规律,培养分析问题和解决问题的能力。
c.通过逻辑分析、方案设计、硬件电路连接、画程序流程图,汇编语言编程,上机调试,进行全面的单片微机应用基本技能的训练。
2课程设计任务及要求
以单片机为核心,设计一个数字音乐盒:
利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。
采用LCD显示信息。
a.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。
b.可通过功能键选择乐曲、暂停、播放。
c.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲
d.采用LCD显示信息
e.选作内容:
显示乐曲播放时间或剩余时间
3设计意义
a、有利于基础知识的理解
通过《初中信息技术》必修部分的学习,学生掌握了一些信息时代生存及发展必需的信息技术基础知识和基本技能,具备了在日常生活及学习中应用信息技术解决问题的基本态度及基本能力。
但是,学生对于程序、病毒的内涵,程序及文档、数据的区别,计算机运行的机理等知识内容的理解比较肤浅。
学生如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。
b、有利于逻辑思维的锻炼
在许多常规学科的日常教学中,我们不难发现这样一个现象,不少学生的思维常常处于混乱的状态。
写起作文来前言不搭后语,解起数学题来步骤混乱,这些都是缺乏思维训练的结果。
程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
c、有利于及其他学科的整合
在程序设计中,我们可以解决其它学科有关问题,也利用其它课程的有关知识来解决信息技术中比较抽象很难理解的知识。
在信息技术课中整合其它学科的知识,发挥信息技术的优势。
例如,在编写“一元二次方程求解”程序时,就复习了数学的相关知识。
而在讲解逻辑运算的知识时,我们又可以利用物理中的电路知识进行讲解,起到意想不到的效果。
d、有利于治学态度的培养。
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。
4设计原理
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
5系统总体方案介绍
5.1系统组成框图
音乐盒的系统结构以AT89C51单片机位控制核心,加上几个按键、时钟复位电路、蜂鸣器、LCD模块组成。
单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐播放|暂停的样式以及蜂鸣器发音。
系统组成框图如图2.1所示。
图5.1系统组成框图
5.2音乐盒的功能
音乐盒的功能结构如图2.2所示。
1~3号开关负责切换播放歌曲,播放歌曲共3首,分别是同一首歌、世上只有妈妈好和精忠报国。
4、5号开关负责切换歌曲:
上一首和下一首,6号开关负责歌曲的暂停和播放,7号开关是开机键。
6硬件设计
6.1总体设计框图
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
图6.1
6.2各部分硬件设计及其原理
6.2.1按键电路设计
按键电路如图6.2所示:
P1.0-P1.5控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列。
图6.2按键电路
6.2.2LCD显示电路设计及原理
如图6.3所示文字型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的控制信号。
图6.3LCD显示电路
6.2.3时钟振荡电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器及作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF
10PF,而如果使用陶瓷振荡器建议选择40PF
10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
振荡器电路图如下:
图6.4单片机内部、外部振荡电路
6.3硬件电路图及功能
总体硬件电路实现功能如下,如图6.5所示
电路中用P1.0~P1.5控制按键。
P0.0~P0.7控制LED。
P3.0控制蜂鸣器。
电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。
图6.5硬件电路图
7软件设计
7.1软件程序设计
7.1.1程序流程图
7.1.2程序源代码(见附录)
8调试
8.1检查硬件连接
在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:
晶振电路的连接,复位电路是否设计正确。
8.2检查软件系统
1.根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。
2.将所有程序组织起来,在软件环境下运行,检查程序是否正确。
通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。
8.3测试结果
图8.1系统总体运行图
课程设计体会
这学期学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
在一个好的氛围里才能踏下心来做东西,在这一段时间里,同学们都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,查阅资料,互助解决问题。
另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。
我们也是这么做的,这一点在这次的课程设计中十分重要。
通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。
这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。
我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。
对我而言,知识上的收获重要,精神上的丰收更加。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为为我人生旅途上一个非常美好的回忆
在设计即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
参考文献
[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.
附录
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
MOV