基于AT89C51单片机的电子音乐盒设计Word格式文档下载.docx
《基于AT89C51单片机的电子音乐盒设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的电子音乐盒设计Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
所用时间
1
布置任务及调研
4天
3
制作与调试
8天
4
撰写设计报告书
2天
合计
14天
4.主要参考资料
单片机课程设计指导书皮大能北京理工大学出版社2012.7
8051单片机实践与应用吴金戎清华大学出版社2003.8
单片机技术基础教程与实践夏路易电子工业出版社 2008.1
单片机原理及应用张毅刚高等教育出版社2012.11
基于Proteus的单片机系统设计与仿真实例蒋辉平机械工业出版社
2007.7
…
指导老师签字:
日期:
摘要
为了实现单片机控制音乐播放,在本次课程设计中尝试基于单片机AT89C51音乐盒的设计对这一思路进行验证。
本设计采用了蜂鸣器发声来实现歌曲的播放,能够保持基本的音调不变,流畅播放歌曲。
主要设计模块包括数码管显示部分,功能键盘部分,蜂鸣器发声部分,彩灯部分。
数码管采用共阳极数码管,通过单片机P1接口控制,实现歌曲序号的显示;
功能键盘采用按键开关,通过P3接口控制,实现歌曲播放顺序的调换和暂停功能;
蜂鸣器由单片机的P2接口控制,实现歌曲播放;
彩灯使用普通二极管,能实现单色常亮和闪烁的效果。
主要工作过程是通过功能键实现上、下曲目的播放及暂停功能,同时有数码管显示当前播放曲目的序号,并会有不同的彩灯闪烁效果。
本次设计要使用单片机及KeilC51编程软件编程和Proteus单片机仿真软件,电工学等方面的有关知识。
用KeilC51编程软件编程,用PROTEUS单片机仿真软件仿真。
最后制作实物,将程序下载到单片机中,利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
关键字:
AT89C51单片机,音乐盒,方波,音调
Abstract
Inordertoachievethesinglechipmicrocomputercontrolmusicplayback,tryinthecurriculumdesignbasedonsinglechipmicrocomputerAT89C51musicboxdesignonthistrainofthoughtforvalidation.ThisdesignUSESthebuzzersoundtorealizethesongsplayed,canmaintainthebasictoneischangeless,smoothplaysongs.
Maindesignmoduleincludesdigitaltubedisplay,keyboardfunctionpart,buzzersound,thelights.Digitaltubeusingatotalofanodedigitaltube,controlledbysinglechipmicrocomputerP1interface,realizesongnumberdisplay;
ThroughP3interface,keyboardswitchwithbuttons,control,realizetheorderofthesongsandpauseswitchfunction;
Buzzeriscontrolledbyasingle-chipmicrocomputerP2interface,realizethesongs;
Lightsusenormaldiode,canrealizemonochromenormallyonandflashingeffect.
Mainworkingprocessisthroughthefunctionkeysachievethefunctionofupperandlowerthemusicplayandpause,atthesametimehavedigitaltubedisplaythecurrenttracknumber,andhavedifferentlightsflashingeffect.ThedesigntousesinglechipmicrocomputerandKeilC51andProteussingle-chipmicrocomputersimulationsoftware,programmingsoftwareprogrammingontheknowledgeofelectrotechnics,etc.UseKeilC51programmingsoftwareprogramming,usePROTEUSsingle-chipmicrocomputersimulationsoftwaresimulation.Finallymakephysical,downloadtheprogramtoMCU,usingI/Omouthproducecertainfrequencysquarewave,drivebuzzer,adifferenttone,soastoplaymusic.
Keywords:
AT89C51Microcontroller,musicalbox,squarewave,tone
1.设计方案分析
1.1设计功能要求
1.利用I/O口处产生一定频率的方波,驱动蜂鸣器,产生不同的音调从而演奏乐曲,达到预期目标。
2.采用七段数码管显示当前播放歌曲的序号数。
3.通过功能键实现上、下及暂停曲目播放的功能。
1.2总体设计原理
通过单片机的定时器产生一定长度的方波,方波脉冲驱动蜂鸣器发声。
要产生音频脉冲,只需算出某一音频的周期(1/音频),然后取半周期的时间定时。
利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。
如中音D0,频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时1912/2=956,在每计数956次时将I/O口反相,就可得到中音D0(523HZ)。
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,在LED显示歌曲号,也可使彩灯长亮和闪烁。
数码管采用共阳极数码管,通过单片机P1口控制,实现歌曲序号的显示;
功能键盘采用按键开关,通过单片机P3口控制,实现歌曲播放顺序的调换和暂停播放功能;
蜂鸣器由单片机的P2口控制,实现歌曲播放;
彩灯是由普通发光二极管代替,通过键盘能实现单色长亮和闪烁效果。
通过功能键可以实现播放上一曲、下一曲、暂停,同时可以通过数码管显示当前播放的曲目序号,蜂鸣器播放出音乐。
当播放出最后一曲时伴有彩灯闪烁。
1.3总体设计框图
单片机接5V电源供电,晶振电路产生单片机所需的时钟周期,通过功能键实现外部中断,控制音乐盒的上一曲、下一曲和暂停功能的实现,再由I/O接口输出控制蜂鸣器发声,LED显示,彩灯闪烁或暂停。
另外,复位电路的功能在于使音乐盒的工作恢复到初始状态,在程序出错时,重新启动单片机工作。
图1.1整体设计框图
通过编程软件设定好程序后,由单片机AT89C51的定时器每秒钟通过P1.0-P1.7接口控制LED数码显示,复位信号由按钮控制,每按下一次系统恢复一次原设定状态。
电源、晶振部分、复位电路、单片机、功能键、LED及蜂鸣器部分将在后面的内容中做详尽说明,在此不再赘述。
2.系统硬件设计
2.1电源电路设计
采用经市电变压,稳压的稳压电路如下图所示
单片机采用的是5V(+_0.2V)的电源,对稳压电路的要求较高,因此可以用LM7805来实现此功能。
首先用交流变压器将220V的交流电变为大于5V的交流电,例如7.5V或10.5V,然后使用桥式电路进行整流,电容进行整流滤波,将交流电处理为直流。
然后使用7805进行5V恒压输出,供给单片机电路使用。
2.2单片机最小系统
单片机的最小系统以AT89C51为核心,外加时钟电路和复位电路,电路结构简单,抗干扰能力强,成本相对较低,比较符合本次课题的要求,89C51系列单片机是在MCS-51的基础上发展起来的,是当前8位单片机的典型代表,采用CMOS工艺,即互补金属氧化物的CMOS工艺,COOS和MOS相结合的技术,具有MOS的高速度和高密度的特点,还具有CMOS低功耗的特点。
单片机的工作环境需要有一个时间基准来统一控制各部分的工作状态此电路为时钟电路,时钟电路分为外部时钟电路和内部时钟电路,如下图所示,从图示可以看出采用外部电路比较复杂,因此本次课题的时钟电路选择内部时钟电路,时钟电路在单片机外部采用XTAL1和XTAL2这两个引脚跨接晶体振荡器和微调电容,构成稳定的自激振荡器。
本系统采用的是6MHz的晶振,一个机器周期为22us,C1,C2分别为22pF。
复位电路的基本功能是:
系统的上电时提供复位信号,待系统电源稳定后撤销复位指令。
为可靠起见,在电源稳定后需要经历一段时间后撤消复位信号,防止电源开关或电源插头插合过程中引起的抖动而影响复位。
复位电路分为上电自动复位和按键复位,电路图如下图所示,。
其中RST是复位信号的输入端,复位信号是高电平段。
本次采用手动复位设计,复位通过电容C3,C4和电阻R1,R2来实现,按键复位通过复位键来实现。
单片机的最小系统电路设计如下图设计所示,以AT89C51为核心进行设计。
单片机最小系统
2.3数码管显示部分
歌曲序号显示部分采用数码管来实现,LED显示器件是通过发光二极管来显示字段的器件。
在单片机的控制系统中最常用的是7段LED数码管,它的显示块中有8个发光二极管,7个二极管组成字符“8”,一个二极管组成小数点。
LED数码管的管脚配置如图a示。
LED显示块如图b所示。
它们经电阻和单片机的控制端连接在一起,只要改变控制端口的电平就能控制LED的点亮或熄灭。
LED共有阳极和阴极两类,如图c所示共阴极LED数码管的发光二极管的阴极共地。
当某个发光二极管的阳极电压为高电平时,二极管发光;
而共阳极LED数码管是发光二极管的阳极共接,当某个二极管的阴极电压为低电平时,二极管发光。
ab
(1)
b
(2)c
本次课题所选的二极管为共阳极二极管,数码管每段的电流是10A。
所以公共段接高电平,Proteus图如下所示
数码管引脚图
2.4键盘部分
键盘是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。
键盘可分为编码式键盘和非编码式键盘两种。
1.编码键盘通过硬件电路产生被按按键的键码,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。
2.非编码键盘常用一些按键排列成行列矩阵,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。
非编码键盘的硬件接口简单,但是要占用较多的CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。
本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。
2.4.1按键开关
在接线时由于有六个引脚,连接时需要用万用表进行测量,然后接通两个引脚。
2.4.2轻触开关
一种电子开关,使用时轻轻点按开关按钮就可使开关接通,当松开手时开关既断开,其内部结构是靠金属弹片受力弹动来实现通断的。
但微动开关也有它不足的地方,频繁的按动会使金属弹片疲劳失去弹性而失效,连接时接通对角线即可。
2.5蜂鸣器部分
一般所指的蜂鸣器是以压电陶瓷为主要元件的。
压电陶瓷是一类有将压力与电流相互转换能力的特殊陶瓷。
这种能力缘于其特殊的晶体结构。
当压电陶瓷在一定方向上受到一个压力使其晶体结构发生形变时,它就会在内部产生一个电流,并且电流的变化与压力的变化密切相关。
反之亦然。
所以利用这一特性,在压电陶瓷上通过一定频率的电流,就会引起压电陶瓷微小形变,这一形变带动空气发生振动,如果频率适当,就可以被人耳所听见,也就是产生了蜂鸣声。
2.5.1蜂鸣器简介
1.蜂鸣器的作用:
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
2.蜂鸣器的分类:
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
3.蜂鸣器的电路图形符号:
蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
实物如下图所示,
蜂鸣器实物
2.5.2蜂鸣器原理
1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱和外壳等部分组成。
有的压电式蜂鸣器外部还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。
当接通电源后(1.5-15V直流工作电压),多谐振荡器起振,输出1.5-2.5kHz的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣器片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。
在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢粘连在一起。
2.0电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
3.系统软件设计
3.1软件系统介绍
一个系统的正常运行不仅需要硬件系统的支持,而且需要软件系统的支持。
如果把硬件比作躯体,那软件就是灵魂,硬件系统和软件系统相互间密切的配合才构建了能够“思考”和“判断”的整体系统。
借助软件的可编程性,可以精简硬件系统的组成;
凭借软件的灵活性,可以不用对硬件系统进行修改而实现系统功能的修改。
软件系统与硬件系统是密切相联的,软件系统建立在硬件系统之上,离开了硬件系统,软件将无法实现任何功能。
软件的设计有一定的针对性,对于不同的硬件系统,需要编写不同的软件。
与硬件系统一样,软件系统的好坏,直接影响到系统的工作效率和可靠性。
3.2编程语言的选择
基于单片机的电子音乐盒的设计本次课题采用汇编语言编程,它是一种面对机器的语言,可以直接控制硬件的语言。
因为本次还要进行硬件连接,所以可以方便控制各个硬件接口如I/O接口,并且目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
具有保持了机器语言的优点,具有直接和简捷的特点。
基于这些特点,所以70%以上的系统软件使用汇编语言编程。
很多很多高级绘图程序、视频游戏程序是用汇编语言编写的。
因此汇编语言是我们理解整个计算机系统的最佳起点和最有效途径,通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;
向下为掌握硬件系统的原理,打下实践应用基础。
单片机烧录的代码,用来编程单片机。
3.3编程软件的选择
单片机的开发除了必须的硬件设备外还需要一定的软件支持,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
3.4系统程序设计
3.4.1主程序流程图
开始定义音频输出端口,歌曲总数以及每首歌曲的入口地址;
然后对定时器初始化,确定工作方式,赋初值,开放中断,启动定时器工作;
对音频输出端口初始化;
设置音节起始位置和节拍间距,把音节和节拍的入口地址信息存放在固定存储单元中;
将取出的音符数+节拍数保存在存储单元中,查询音乐的节拍表;
当六首歌曲的节拍表查询完,音乐播放完毕,程序结束。
具体的程序框图如下图所示:
系统流程图
3.4.2主程序
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
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
MOVOUT_NUM,A
MOVR7,#00H;
R7中存放歌曲总信息的入口地址
START0:
MOVR4,#00H;
R4存放当前正在播放歌曲的第几个节拍数
MOVR0,#30H;
30H开始的单元中存放歌曲的入口信息
MOVA,R7;
将歌曲的节拍表的入口地址送到DPTR
ADDA,R0
MOVR0,A
MOVDPH,@R0
MOVDPL,@R0
MOVA,R4
INCR4
MOVCA,@A+DPTR;
取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符
MOV26H,A将取出的音符数+节拍数保存在职26H单
NEXT:
开始取出歌曲的第一个数据
MOVA,R7
ADDA,R0
MOVR0,A
MOVDPH,@R0
INCR0
MOVDPL,@R0
MOVA,R4
INCR4
MOVCA,@A+DPTR;
放在A中
JZEND0;
若为0,则表示为休止符,不唱,本次音符不唱,
MOVR1,A;
不为0,取出节拍数
ANLA,#0FH
MOVR2,A
MOVA,R1
SWAPA
JNZSING;
音符不为0,唱
CLRTR0;
为0,不唱,关频率发生器
SJMPSING1
SING:
DECA;
开始唱,进行相应的数据处