收藏 分销(赏)

单片机音乐盒课程设计报告.doc

上传人:二*** 文档编号:4532339 上传时间:2024-09-26 格式:DOC 页数:15 大小:127KB
下载 相关 举报
单片机音乐盒课程设计报告.doc_第1页
第1页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、- -机电高等专科学校课程设计报告书课程名称:单片机课题名称:电子音乐盒专业:自动控制系班级:计控111学号:111413144XX: 思 璐2013 年 01月01日- word.zl- -目 录1.设计目的.12.设计要求和设计指标13.设计容13.1硬件局部13.1.1 13.2 软件局部14.本设计改良建议35.总结感想和心得等36.主要参考文献3附录4- word.zl- -1设计目的通过学习单片机课程,对单片机的硬件设计,软件设计掌握有了不少了解,学习了protel 99 SE 和keil软件,锻炼了自己的编程能力,对单片机硬件和软件的设计都有了进一步的认识和提高。为以后的学习也打

2、下了很好的根底。2.设计要求和设计指标(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲(存两首乐曲)。(2) 可通过功能键选择乐曲,播放不同音乐。(3)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(4)利用8051的部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时9

3、56/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。记数脉冲值与频率的关系公式如下:N=Fi/2/Fr N:记数值Fi:部计时一次为1微秒故其频率为1MHZ Fr;要产生的频率(5):起记数值的求法如下:T65536N65536Fi2Fr例如:设K65536,F1000000Fi1MHZ,求低音D0523HZ,高音的D01046HZ的记数值。T65536N65536Fi2Fr6553610000002Fr65536500000Fr低音D0的T6553650000026263627中音D0的T6553650000052364580低音D0的T65536500000104

4、7650593.设计容3.1 硬件局部本设计中用到89C51单片机,蜂鸣器,独立式按键。硬件电路原理图如图1所示3.11 原理说明当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。1硬件电路中用K1, K2, K3, K4分别接P0.0, P0.1, P0.2, P0.3作为对应歌曲按键。2用P1.0口接蜂鸣器。3电路为12MHZ晶振频率工作。 音乐盒原理图3.2.软件局部本程序可以实现课程设计的根本要求,并可以通过按键播放两首歌曲,程序流程图如下:是否有按键按下播放歌曲1开场播放歌曲3播放歌曲2播放歌曲4K1键按下K2键按下K3键按下K4键按下YesYes

5、YesYesYesNoNoNoNoNo4本设计改良建议1 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。2 程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无常运行的现象。当用JNZ指令时,跳转围比拟少,这时要用一个标号中转。3 编程时要注意,在程序开场时,要写入各定时器中断的入口地址。4 编程过程中要注意加注释或分割线,否那么,在程序过长时容易变得很乱,不便于查找或更改。5.收获与体会(1)学习单片机的课时不多,对单片机的硬件

6、设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。(3) 通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。6. 主要参

7、考文献1 单片机原理及应用 清华大学2 Protel 99 SE 印刷电路板设计教程 机械工业3王为青,程国钢.单片机Keil Cx51应用开发技术M.:人民邮电,2007.024 阎石.数字电子技术根底M.:高等教育,1998.12,第4版5 邓元庆.数字电路与逻辑设计M.:电子工业,2001附件1:元件清单名称数量个型号备注电阻1开关1单片机1AT89C51蜂鸣器1电源15V晶振112Hz附件2:音乐程序K1 EQU P0.0;定义引脚 K2 EQU P0.1 K3 EQU P0.2 K4 EQU P0.3SPK EQU P1.0 ;定义蜂鸣器引脚 ORG 0000H LJMP MAIN

8、ORG 001BH LJMP T1SER ORG 0030HMAIN: JNB K1,G1 JNB K2,G2JNB K3,G3 JNB K4,G4 LJMP MAING1: LCALL GQ1G2: LCALL GQ2G3: LCALL GQ3G4: LCALL GQ4;GQ1: MOV SP,#30H MOV TMOD,#10H;设T1工作方式1 MOV IE,#88H;允许中断LOOP1:MOV 40H,#00H;简谱码指针清0LOOP2:MOV A, 40H;简谱码指针放入A MOV DPTR, #TABLE1 MOVC A,A+DPTR;到表格TABLE1中取简谱码 MOV R1,A

9、;取到的简谱码暂存于R1 JZ FINISH;简谱码是00H(完毕码),转移 ANL A,#0FH;不是00H,取低4位(节拍码) MOV R2,A;将节拍码存入R2中 MOV A,R1;将取到的简谱码再放入A SWAP A;上下4位交换 ANL A,#0FH;取低4位(唱名码) JNZ SING;唱名码不是00H,转移 CLR TR1;唱名码是00H,那么不发音 SJMP WY;转移至WYSING:DEC A;唱名码减1MOV 50H,A;唱名码存入50HRL A;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR;到表格TABLE2取计数值高8位MOV TH1, A;计数值高

10、8位存入TH1MOV 51H, A;计数值高8位存入51HMOV A, 50H;将取到的唱名码再放入ARL A;乘2INC A;唱名码加1MOVC A,A+DPTR;到表格TABLE2取计数值低8位MOV TL1, A;计数值低8位存入TL1MOV 52H, A;计数值低8位存入52HSETB TR1;启动T1WY:LCALL DELAY;调用根本单位时间(1/4拍)INC 40H;简谱码指针加1SJMP LOOP2;取下一个简谱码FINISH:CLR TR1;停顿T1LJMP MAIN;重复播放T1SER:PUSH ACC;将A的值暂存于堆栈PUSH PSW;将PSW的值暂存于堆栈MOV T

11、L1, 52H;重置定时器初值MOV TH1, 51HCPL SPK;将SPK取反POP PSW;至堆栈取回PSW值POP ACC;至堆栈取回A值RETI;返回主程序TABLE1:DB 84H,62H,82H,0B6H,02H;简谱码表 DB 94H,0B4H,86H,02HDB 84H,42H,52H,64H,52H,42HDB 58H,04H,04HDB 84H,62H,82H,0B6H,0A2H DB 94H,0B4H,86H,02HDB 84H,52H,62H,76H,32HDB 48H,04H,04HDB 94H,0B4H,0B6H,02HDB 0A4H,92H,0A2H,0B6H,

12、02HDB 92H,0A2H,0B2H,92H,92H,82H,62H,42HDB 58H,04H,04HDB 84H,62H,82H,0B6H,0A2H DB 94H,0B4H,86H,02HDB 84H,52H,62H,76H,32HDB 48H,04H,04HDB 00H;GQ2: MOV SP,#30H MOV TMOD,#10H;设T1工作方式1 MOV IE,#88H;允许中断LOOP12:MOV 40H,#00H;简谱码指针清0LOOP22:MOV A, 40H;简谱码指针放入A MOV DPTR, #TAB2 MOVC A,A+DPTR;到表格TAB2中取简谱码 MOV R1,

13、A;取到的简谱码暂存于R1 JZ FINISH2;简谱码是00H(完毕码),转移 ANL A,#0FH;不是00H,取低4位(节拍码) MOV R2,A;将节拍码存入R2中 MOV A,R1;将取到的简谱码再放入A SWAP A;上下4位交换 ANL A,#0FH;取低4位(唱名码) JNZ SING2;唱名码不是00H,转移 CLR TR1;唱名码是00H,那么不发音 SJMP WY2;转移至WY2SING2:DEC A;唱名码减1MOV 50H,A;唱名码存入50HRL A;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR;到表格TABLE2取计数值高8位MOV TH1,

14、A;计数值高8位存入TH1MOV 51H, A;计数值高8位存入51HMOV A, 50H;将取到的唱名码再放入ARL A;乘2INC A;唱名码加1MOVC A,A+DPTR;到表格TABLE2取计数值低8位MOV TL1, A;计数值低8位存入TL1MOV 52H, A;计数值低8位存入52HSETB TR1;启动T1WY2: LCALL DELAY;调用根本单位时间(1/4拍)INC 40H;简谱码指针加1SJMP LOOP22;取下一个简谱码FINISH2:CLR TR1;停顿T1LJMP MAINTAB2:DB 64H,62H,52H,64H,04H;简谱码表 DB 62H,82H,

15、62H,52H,64H,04H DB 44H,42H,52H,62H,82H,64H DB 54H,52H,42H,54H,04H DB 66H,81H,61H,92H,86H DB 92H,82H,82H,62H,86H,12H DB 64H,52H,52H,84H,62H,52H DB 54H,52H,42H,54H,04H DB 64H,62H,52H,64H,04H DB 62H,82H,62H,52H,64H,04H DB 44H,42H,52H,62H,82H,64H DB 54H,52H,42H,54H,04H DB 66H,81H,61H,92H,86H DB 92H,82H,

16、82H,62H,84H,04H DB 02H,62H,52H,62H,84H,62H,52H DB 52H,46H,44H,04HDB 42H,52HDB 64H,62H,82H,94H,92H,0D2HDB 0D2H,0C2H,0B2H,92H,84H,04HDB 92H,82H,62H,52H,44H,22H,42HDB 54H,52H,42H,54H,42H,52HDB 64H,62H,82H,94H,92H,0D2HDB 0C2H,0B2H,0B2H,0C2H,0B4H,04HDB 84H,82H,62H,0A2H,0B2H,42H,52HDB 64H,04H,54H,04HDB 44

17、H,04H,04H,04HDB 00H;GQ3:MOV SP,#30H MOV TMOD,#10H;设T1工作方式1 MOV IE,#88H;允许中断LOOP13:MOV 40H,#00H;简谱码指针清0LOOP23:MOV A, 40H;简谱码指针放入A MOV DPTR, #TAB3 MOVC A,A+DPTR;到表格TAB3中取简谱码 MOV R1,A;取到的简谱码暂存于R1 JZ FINISH3;简谱码是00H(完毕码),转移 ANL A,#0FH;不是00H,取低4位(节拍码) MOV R2,A;将节拍码存入R2中 MOV A,R1;将取到的简谱码再放入A SWAP A;上下4位交换

18、 ANL A,#0FH;取低4位(唱名码) JNZ SING3;唱名码不是00H,转移 CLR TR1;唱名码是00H,那么不发音 SJMP WY3;转移至WY3SING3:DEC A;唱名码减1MOV 50H,A;唱名码存入50HRL A;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR;到表格TABLE2取计数值高8位MOV TH1, A;计数值高8位存入TH1MOV 51H, A;计数值高8位存入51HMOV A, 50H;将取到的唱名码再放入ARL A;乘2INC A;唱名码加1MOVC A,A+DPTR;到表格TABLE2取计数值低8位MOV TL1, A;计数值低8

19、位存入TL1MOV 52H, A;计数值低8位存入52HSETB TR1;启动T1WY3:LCALL DELAY;调用根本单位时间(1/4拍)INC 40H;简谱码指针加1SJMP LOOP23;取下一个简谱码FINISH3: CLR TR1;停顿T1LJMP MAINTAB3:DB 82H,62H,64H;简谱码表 DB 72H,52H,54H DB 42H,52H,62H,72H DB 82H,82H,84H DB 82H,62H,64H DB 72H,52H,54H DB 42H,62H,82H,82H DB 64H,04H DB 52H,52H,52H,52H DB 52H,62H,7

20、4H DB 62H,62H,62H,62H DB 62H,72H,84H DB 82H,62H,64H DB 72H,52H,54H DB 42H,62H,82H,82H DB 44H,04H DB 00H;GQ4: MOV SP,#30H MOV TMOD,#10H;设T1工作方式1 MOV IE,#88H;允许中断LOOP14:MOV 40H,#00H;简谱码指针清0LOOP24:MOV A, 40H;简谱码指针放入A MOV DPTR, #TAB4 MOVC A,A+DPTR;到表格TAB4中取简谱码 MOV R1,A;取到的简谱码暂存于R1 JZ FINISH4;简谱码是00H(完毕码

21、),转移 ANL A,#0FH;不是00H,取低4位(节拍码) MOV R2,A;将节拍码存入R2中 MOV A,R1;将取到的简谱码再放入A SWAP A;上下4位交换 ANL A,#0FH;取低4位(唱名码) JNZ SING4;唱名码不是00H,转移 CLR TR1;唱名码是00H,那么不发音 SJMP WY4;转移至WY4SING4:DEC A;唱名码减1MOV 50H,A;唱名码存入50HRL A;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR;到表格TABLE2取计数值高8位MOV TH1, A;计数值高8位存入TH1MOV 51H, A;计数值高8位存入51HM

22、OV A, 50H;将取到的唱名码再放入ARL A;乘2INC A;唱名码加1MOVC A,A+DPTR;到表格TABLE2取计数值低8位MOV TL1, A;计数值低8位存入TL1MOV 52H, A;计数值低8位存入52HSETB TR1;启动T1WY4:LCALL DELAY;调用根本单位时间(1/4拍)INC 40H;简谱码指针加1SJMP LOOP24;取下一个简谱码FINISH4:CLR TR1;停顿T1LJMP MAINTAB4:DB 42H,42H,44H,14H;简谱码表 DB 62H,62H,64H,44H DB 42H,62H,84H,84H DB 72H,62H,54H

23、,04H DB 52H,62H,74H,74H DB 62H,52H,64H,44H DB 42H,62H,54H,14H DB 32H,52H,44H,04H DB DB DB DB DB DB DB DB DB 00HTABLE2:DW 0FD82H,0FDC8H,0FE06H ;唱名码表 DW 0FE22H,0FE56H,0FE85H DW 0FE9AH,0FEB2H,0FEE4H DW 0FF03H,0FF11H,0FF2BH DW 0FF42H,0FF4DH,0FF61HDELAY:MOV R4,#250;延时187ms的循环次数LP1:MOV R5,#0;延时0.935ms的循环次数DJNZ R5,$DJNZ R4,LP1DJNZ R2,DELAY;节拍数未到,转移RET END;程序完毕- word.zl

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服