ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:818.78KB ,
资源ID:20527131      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20527131.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机STC89C52的数字音乐盒设计说明Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机STC89C52的数字音乐盒设计说明Word文件下载.docx

1、低2RE 294/63835中2RE589/64687 高2RE 1245/65134低3M 330/64021 中3M 661/64780高3M 1318/65157低4FA 350/64107中4FA700/64822 高4FA 1397/65178低5SO 393/64264 中5SO 786/64900高5SO 1568/65217 低6LA 441/64402中6LA 882/64969 高6LA 1760/65252低7SI 495/64526 中7SI 990/65031高7SI 1967/65282表(1)音符、音符编码及定时器初始值:为了产生音符必须求出低音到高音的计数初值,

2、而为了便于写谱,必须进行简单的编码,在编程时,根据音符编码查找对应的计数初值,比如说音乐是C调的,低音5(SO)直接写为编码1,低音6(LA)直接写为编码2。表(2)是音符编码表:音符编码不发音12345中3M67中5SO89中7SIA 高1DOB高2RECD高4FAEF高6LAG表(2)3、节拍频率的产生音乐中的节拍是利用延时产生的。1拍=0.4s,1/4拍=0.1s。如此类推,可得到其他节拍的时间。为了便于写谱,也将节拍进行编码。表(3)是节拍数编码表,表(4)是乐谱节拍编程时间延时表:按1/4拍为一个延时时间的节拍编码与节拍对应的表按1/8拍为一个延时时间的节拍编码与节拍对应的表节拍编码

3、节拍1/46/41/86/82/48/42/88/83/410/43/810/84/412/44/812/85/415/45/8表(3)乐谱节拍1/4拍的延时时间1/8拍的延时时间125 ms62 ms187 ms94 ms250 ms表(4)在音符编码和节拍编码完成后,编程时,每个音符占一个字节,高4位是音符编码,低4位是节拍编码。2.2硬件总体设计本设计是由五部分电路组成的,分别是时钟复位电路、单片机系统、按键电路、显示电路和音频输出电路。硬件的总体框图如图(1)所示:图(1)根据系统框图,使用Proteus软件绘制总原理图,总原理图如图(2)所示:图(2)原理说明:(1) 当键盘有键按下

4、时,判断键值,启动定时器0,产生一定的频率,驱动蜂鸣器,播放歌曲,启动定时器1,显示歌曲序号;(2) 用P0口控制七段数码管,P1口控制彩灯变化,P2.0控制喇叭,输出音频信号;(3) 电路采用12MHz的晶振工作,起振电路中C1和C2为22pF的电容。2.3软件总体设计本设计采用Keil软件进行编写程序并进行编译,采用Proteus软件进行仿真调试。在编写程序之前,首先应该画出该程序的流程图,这样编程起来会比较简单一点,不会那么复杂。音乐盒设计的总程序流程图如图(3)所示:图(3)按照主程序的流程图用Keil软件编写系统的主程序。程序清单如附录所示。三、 硬件设计3.1单片机芯片的引脚及部分

5、功能本设计采用的单片机型号是STC89C52,其引脚图如图(4)所示:图(4)跟51单片机一样STC89C52单片机也是8位的单片机,有32个准双向的I/O口,存储单元也分为了2种,程序存储器和数据存储器,其中数据存储器是256KB的,可以扩展到64KB,而程序存储器是4KB的,也可以扩展到64KB。STC89C52单片机的中断系统里有5个中断请求源,4个用于中断控制的寄存器IE、IP、TCON和SCON,用来控制中断的类型、中断的开/关和各种中断源的优先级别,而引脚31,当接低电平时,单片机直接访问外部程序存储器,接高电平时,单片机访问片程序存储器,当程序计数器PC的值超过4KB时,单片机也

6、自动访问片外程序存储器。引脚9是单片机的复位端,当接高电平时,单片机就会复位,而单片机32个I/O口中,P3口具有第二功能,可以实现串行和并行通信的数据接收和发送,也可以控制单片机的中断类型。3.2 各个模块的硬件电路设计1、时钟复位电路时钟电路是由12MHz的晶振和2个22pF的电容组成,给单片机系统提供外部时钟信号源,以保证单片机部定时器的正常工作。而复位电路采用上电复位的接法,由一个10k的电阻和10uF的电容组成,在加电的瞬间电容通过充电,使RST端出现正脉冲,从而使单片机复位。时钟复位电路如图(5)所示:图(5)2、按键输入电路本设计采用三个按键来控制音乐的播放,其中按键S1是控制音

7、乐盒播放下一首歌曲,按键S2是控制音乐盒播放上一首歌曲,而按键S3则是控制音乐播放和暂停,按键电路的接法如图(6)所示:图(6)3、显示电路本设计采用七段共阴数码管来显示当前播放歌曲的序号,其中a、b、c、d、e、f、g分别接到P0.0-P0.6口,而公共端接地,由于P0口里面没有接上拉电阻,在外部电路里还得接上上拉电阻,以保证P0口电平的正常输出。显示电路的接法如图(7)所示:图(7)4、音频输出电路本设计采用喇叭作为音乐盒的音频输出,但是只有一个喇叭就构成整个音频输出电路的话,播放音乐的声音就会太小声,甚至有时小到连声音都听不到,为了增大喇叭的声音,才用一个放大电路使通过喇叭的电流增大,从

8、而增大喇叭的输出功率。放大电路是采用一个PNP型的三极管和两个电阻,其中一个作为反馈回路。音频输出电路如图(8)所示:图(8)5、彩灯控制电路彩灯控制电路为本设计的扩展功能,通过音乐的播放,节拍的变化来控制彩灯的循环变化,彩灯电路有8个发光二极管和8个200欧的电阻组成,接到P1口,通过变化P1口的输出电平,控制彩灯的亮灭。彩灯控制电路如图(9)所示:图(9)四、 软件设计4.1本设计可以实现课程设计的基本要求,可以播放6首歌,并通过按键控制播放、暂停等功能。主要的子程序框图如图(10)、(11)、(12)所示:音乐播放程序框图 图(10)中断程序框图 图(11)系统各主要程序的程序清单可见于

9、附录编写完程序后,用Keil软件进行编译,看是否有错,如果有错应立刻修改,直到编译正确为止。五、 仿真、调试电路在Proteus软件绘制完原理图和编译完源程续后,将Keil软件编译完生成的Hex文件加载到Proteus软件绘制出的原理图里德单片机里,就可以进行仿真,验证是否能实现课程设计的基本功能。当仿真成功后,就可以购买元器件,开始焊接电路板了,焊完电路板后,利用单片机开发板将程序下载到单片机芯片上进行调试,看是否焊接成功,如果没有同仿真时的结果一样,就得检查一下电路,看哪里出错了,再进行调整,达到预期的要求。六、 存在问题和解决方法在设计过程中,虽然在音频输出电路中加了放大电路,来增大输出

10、的电流,但是在调试过程中喇叭的声音还是有点小声,我认为不要采用单个三极管作为放大电路,而应该采用集成运算放大器,因为集成运放里面已经是由多个三极管组成的多级放大电路了,在外部适当的添加一些电阻和电容就能实现功率的放大。七、 总结与体会通过这次课程设计,从整体上我对单片机微机应用系统开发、研制过程软硬件设计的工作方法、工作容、工作步骤更加了解。不仅熟练地掌握了Keil软件和Proteus软件的使用方法,而且提高了我的动手能力和分析问题、解决问题的能力。我觉得这次单片机课程设计是一个综合性的设计平台,除了熟练掌握了一些软件的使用和进行了基本技能的锻炼之外,还巩固了我的单片机知识,在编程方面,我也更

11、加的熟练。而且通过查阅资料,还拓展了我的知识视野,加强了我查阅资料的能力。但是这次单片机课程设计也不是一帆风顺的,在编程和仿真过程中倒是没有出现太大的问题,而在焊接完电路板,进行电路调试时却发现整个电路都不工作。我们检查了两天都没发现什么问题。当我正想放弃时,我突然想起爱迪生说过的一句话“无论什么时候,不管遇到什么情况,我绝不允许自己有一点点灰心丧气。”于是,我决定重新买器件再焊过一块电路板,老天还是很眷顾我的,第二块电路板调试最终成功了,我非常开心,我觉得第一块电路板里可能是电容或晶振坏了,但我又不知道怎么检查电容和晶振。因此果断焊过第二块。总而言之,这次课程设计我获益匪浅。不仅锻炼了我各方

12、面的能力,在人生哲理上,我也更加成熟。我更加深刻地认识到:在人生的道路上,路并不是一直平坦的,会有无数的荆棘、无数的高墙挡在你的前面,但是只有坚持不懈,才能斩断挡在你面前的荆棘,退到你面前的高墙,开辟一条新的道路,只有这样才能跨越自己的极限,走到像桃花源记里面所说的世外桃源一样,最终你的梦想也将实现。八、 参考文献1单片机原理与接口技术,朝青编著,航空航天大学,2005年10月;2单片机课程设计指导,楼然苗、光飞编著,航空航天大学,2007年7月;3单片机控制实习与专题制作,蔡朝洋,航空航天大学;4图书馆相关书籍;5网上资料;元件清单:PNP型三极管(8550)STC89C52芯片电阻10k电

13、阻20016按键喇叭七段共阴数码管发光二极管晶振(12MHz)电容 22pF 10uF附录源程序:OUT BIT P2.0 ;定义音频输出端口,p2.0N EQU 6 ;歌曲总数OUT_NUM EQU P0 ;数码管显视当前所放歌曲曲数 ORG 0000HK2: AJMP MAIN ORG 0003H AJMP LAST_SONG ;外部中断0用于接上一曲歌按键 ORG 000BH AJMP F_T0 ;定时器0用于定时,作音符发生器用 ORG 0013Hq4: AJMP NEXT_SONG ;外部中断1接下一曲歌按键 ORG 001BH AJMP START_PAUSE ;定时器1用计数,这

14、里用作中断,接开始/暂停键,初值为0ffH,方式2 ORG 0030HMAIN: MOV 50H,#00H MOV SP,#60H MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。 MOV R0,#30H ;R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放 ;歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。 MOV R5,#00H ;R5中存放表TABLE中正在执行操作的序号 MOV R6,#1 ;R6存放正在设置入口信息的歌曲数SET_TAB: MOV A,R5 ;设置每首歌曲的入口信息,存

15、放在以30H开始的存储单元中。 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 INC R6 ;设置完一首歌曲后,歌曲数加一 CJNE R6,#N+1,SET_TAB ;是否设置完,没有便继续,否则进行下面的操作 ;* 对中断,计数器的相关参数进行设置 MOV TMOD, #61H ;计数器0工作方式1,计数器1工作方式2 MOV TH1,#0FFH ;给计数器1置初值0FFH,又由于是工作方式2,所以 MOV TL1,#0FFH ;计数器计数为1,相当于一外部中断。 SETB ET1 ;允许计数器1中断 SETB ET0 ;允许计数器具0中断 CL

16、R PT0 ;计数器0为低优先级 SETB PT1 ;计数器1为高优先级 SETB IT0 ;外部中断0为跳沿触发 SETB PX0 ;高优先级 SETB IT1 ;外部中断1为跳沿触发 SETB PX1 ; SETB EX1 ;允许外部中断1中断 SETB EX0 ;允许外部中断定0中断 SETB EA ;开中断总开关 SETB TR1 ;定时器1开始工作,作中断用 SETB OUT ;音频输出端口初始化* ;设置结束 CLR F0 ;设置F0=0,用来作暂停/播放的标置位用 MOV 22H,#01H ;22H单元中存放正在播放的歌曲编号 MOV DPTR,#OUT_TAB ;将正在播放的歌

17、曲编号送数码管显视 MOV A,22H MOV OUT_NUM,A MOV R7,#00H ;R7中存放歌曲总信息的入口地址START0:MOV R4,#00H ;R4存放当前正在播放歌曲的第几个节拍数 MOV R0,#30H ;30H开始的单元中存放歌曲的入口信息 MOV A,R7 ;将歌曲的节拍表的入口地址送到DPTR ADD A,R0 MOV DPH,R0 MOV DPL,R0 MOV A,R4 INC R4 MOVC A,A+DPTR ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符;* MOV 26H,A ;将取出的音符数+节拍数保存在职26H单元中NEXT:开

18、始取出歌曲的第一个数据 MOV A,R7 MOVC A,A+DPTR ;放在A中 JZ END0 ;若为0,则表示为休止符,不唱,本次音符不唱, MOV R1,A ;不为0,取出节拍数 ANL A,#0FH MOV R2,A MOV A,R1 SWAP A JNZ SING ;音符不为0,唱 CLR TR0 ;为0,不唱,关频率发生器 SJMP SING1SING: DEC A ;开始唱,进行相应的数据处理 MOV R3,A RL A MOV 21H,A MOV TH0,A MOV A,R3 INC A MOV 20H,A MOV TL0,A SETB TR0 ;开唱START:MOV DPT

19、R,#DTABLE MOV A,50H MOV P1,A INC 50H MOV A,50H CJNE A,#15H,SING1 MOV 50H,#00HSING1:LCALL DELAY ;每个音符唱多久 JB F0,FOR ;是否暂停, AJMP NEXT ;没有暂停,继续FOR: CLR TR0 ;暂停,不唱 JB F0,$ ;等待播放 AJMP NEXT ;开始播放END0: CLR TR0 ;不唱 MOV A,22H ;唱完处理 CJNE A,#N,WW ;是不是全部歌曲都唱完全部唱完,则从第一首开始再唱 MOV R7,#00H MOV OUT_NUM,#57H ;数码管显视第一首歌

20、曲编号 AJMP WWWWW: MOV A,R7 ;没有全部唱完,唱下一首,歌曲的入口信息调整 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV DPTR,#OUT_TAB MOV OUT_NUM,A ;数码管显视相应的歌曲编号 POP DPL POP DPHWWW: SETB EA AJMP START0 ;开始下一首的演唱F_T0: MOV TH0,21H ;定时器0置初值 MOV TL0,20H CPL OUT ;频率产生 RETINEXT_SONG: PUSH ACC ;下一曲中断程序处理,保护现场 CLR EA ;关中断 C

21、JNE A,#N,Q ;是最后一首吗?是最后一首,则R7指向第一首,演唱第一首 MOV 22H,#01H AJMP BACKQ: INC 22H ;不是最后一首,唱下一首,R7容加4,歌曲数加1BACK: MOV R4,#00H ;* MOV B,R0 ;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的容进行保护 MOV R4,#00H MOV R0,#30H MOV 26H,A ;结果存入26H单元中 DEC R4 MOV R0,B ;恢复R0中的容 POP DPL ;恢复现场 POP ACC RETI ;中断返回LAST_SONG: PUSH ACC ;上一曲中断程序处理开始,保护现场 CLR EA ;曲目数送A CJNE A,#1,QQ ;是否是第一首 MOV 22H,#N ;是第一首歌曲 MOV B,#4 ;将R7指向最后一首歌曲 MOV A,#N-1 MUL AB AJMP BACK2 ;处理结束QQ: DEC 22H MOV A,R7 ;R7减4 SUBB A,#4BACK2:数码管显视相应歌曲的编号 MOV B,R0 ; I

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1