单片机音乐盒课程设计.docx
- 文档编号:9803431
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:17
- 大小:100.84KB
单片机音乐盒课程设计.docx
《单片机音乐盒课程设计.docx》由会员分享,可在线阅读,更多相关《单片机音乐盒课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
单片机音乐盒课程设计
课程设计报告书
课程名称:
单片机
课题名称:
电子音乐盒
2013年01月01日
目录
1.设计目的…………………………………………..1
2.设计要求和设计指标1
3.设计内容1
3.1硬件部分1
3.1.1…1
3.2软件部分1
4.本设计改进建议3
5.总结(感想和心得等)3
6.主要参考文献3
附录4
1.设计目的
通过学习单片机课程,对单片机的硬件设计,软件设计掌握有了不少了解,学习了protel99SE和keil软件,锻炼了自己的编程能力,对单片机硬件和软件的设计都有了进一步的认识和提高。
为以后的学习也打下了很好的基础。
2.设计要求和设计指标
(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲(内存两首乐曲)。
(2)可通过功能键选择乐曲,播放不同音乐。
(3)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲
(4)利用8051的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。
例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。
记数脉冲值与频率的关系公式如下:
N=Fi/2/FrN:
记数值
Fi:
内部计时一次为1微秒.故其频率为1MHZ
Fr;要产生的频率
(5):
起记数值的求法如下:
T=65536-N=65536-Fi/2/Fr
例如:
设K=65536,F=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr
低音D0的T=65536-500000/262=63627
中音D0的T=65536-500000/523=64580
低音D0的T=65536-500000/1047=65059
3.设计内容
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.软件部分
本程序可以实现课程设计的基本要求,并可以通过按键播放两首歌曲,程序流程图如下:
4.本设计改进建议
(1)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。
(2)程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。
当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。
(3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
(4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
5.收获与体会
(1)学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
(3)通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。
这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。
我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。
6.主要参考文献
[1]单片机原理及应用清华大学出版社
[2]Protel99SE印刷电路板设计教程机械工业出版社
[3]王为青,程国钢.单片机KeilCx51应用开发技术[M].北京:
人民邮电出版社,2007.02
[4]阎石.数字电子技术基础[M].北京:
高等教育出版社,1998.12,第4版
[5]邓元庆.数字电路与逻辑设计[M].北京:
电子工业出版社,2001
附件1:
元件清单
名称
数量(个)
型号
备注
电阻
1
开关
1
单片机
1
AT89C51
蜂鸣器
1
电源
1
5V
晶振
1
12Hz
附件2:
音乐程序
K1EQUP0.0;定义引脚
K2EQUP0.1
K3EQUP0.2
K4EQUP0.3
SPKEQUP1.0;定义蜂鸣器引脚
ORG0000H
LJMPMAIN
ORG001BH
LJMPT1SER
ORG0030H
MAIN:
JNBK1,G1
JNBK2,G2
JNBK3,G3
JNBK4,G4
LJMPMAIN
G1:
LCALLGQ1
G2:
LCALLGQ2
G3:
LCALLGQ3
G4:
LCALLGQ4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GQ1:
MOVSP,#30H
MOVTMOD,#10H;设T1工作方式1
MOVIE,#88H;允许中断
LOOP1:
MOV40H,#00H;简谱码指针清0
LOOP2:
MOVA,40H;简谱码指针放入A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR;到表格TABLE1中取简谱码
MOVR1,A;取到的简谱码暂存于R1
JZFINISH;简谱码是00H(结束码),转移
ANLA,#0FH;不是00H,取低4位(节拍码)
MOVR2,A;将节拍码存入R2中
MOVA,R1;将取到的简谱码再放入A
SWAPA;高低4位交换
ANLA,#0FH;取低4位(唱名码)
JNZSING;唱名码不是00H,转移
CLRTR1;唱名码是00H,则不发音
SJMPWY;转移至WY
SING:
DECA;唱名码减1
MOV50H,A;唱名码存入50H
RLA;乘2
MOVDPTR,#TABLE2
MOVCA,@A+DPTR;到表格TABLE2取计数值高8位
MOVTH1,A;计数值高8位存入TH1
MOV51H,A;计数值高8位存入51H
MOVA,50H;将取到的唱名码再放入A
RLA;乘2
INCA;唱名码加1
MOVCA,@A+DPTR;到表格TABLE2取计数值低8位
MOVTL1,A;计数值低8位存入TL1
MOV52H,A;计数值低8位存入52H
SETBTR1;启动T1
WY:
LCALLDELAY;调用基本单位时间(1/4拍)
INC40H;简谱码指针加1
SJMPLOOP2;取下一个简谱码
FINISH:
CLRTR1;停止T1
LJMPMAIN;重复播放
T1SER:
PUSHACC;将A的值暂存于堆栈
PUSHPSW;将PSW的值暂存于堆栈
MOVTL1,52H;重置定时器初值
MOVTH1,51H
CPLSPK;将SPK取反
POPPSW;至堆栈取回PSW值
POPACC;至堆栈取回A值
RETI;返回主程序
TABLE1:
DB84H,62H,82H,0B6H,02H;简谱码表
DB94H,0B4H,86H,02H
DB84H,42H,52H,64H,52H,42H
DB58H,04H,04H
DB84H,62H,82H,0B6H,0A2H
DB94H,0B4H,86H,02H
DB84H,52H,62H,76H,32H
DB48H,04H,04H
DB94H,0B4H,0B6H,02H
DB0A4H,92H,0A2H,0B6H,02H
DB92H,0A2H,0B2H,92H,92H,82H,62H,42H
DB58H,04H,04H
DB84H,62H,82H,0B6H,0A2H
DB94H,0B4H,86H,02H
DB84H,52H,62H,76H,32H
DB48H,04H,04H
DB00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GQ2:
MOVSP,#30H
MOVTMOD,#10H;设T1工作方式1
MOVIE,#88H;允许中断
LOOP12:
MOV40H,#00H;简谱码指针清0
LOOP22:
MOVA,40H;简谱码指针放入A
MOVDPTR,#TAB2
MOVCA,@A+DPTR;到表格TAB2中取简谱码
MOVR1,A;取到的简谱码暂存于R1
JZFINISH2;简谱码是00H(结束码),转移
ANLA,#0FH;不是00H,取低4位(节拍码)
MOVR2,A;将节拍码存入R2中
MOVA,R1;将取到的简谱码再放入A
SWAPA;高低4位交换
ANLA,#0FH;取低4位(唱名码)
JNZSING2;唱名码不是00H,转移
CLRTR1;唱名码是00H,则不发音
SJMPWY2;转移至WY2
SING2:
DECA;唱名码减1
MOV50H,A;唱名码存入50H
RLA;乘2
MOVDPTR,#TABLE2
MOVCA,@A+DPTR;到表格TABLE2取计数值高8位
MOVTH1,A;计数值高8位存入TH1
MOV51H,A;计数值高8位存入51H
MOVA,50H;将取到的唱名码再放入A
RLA;乘2
INCA;唱名码加1
MOVCA,@A+DPTR;到表格TABLE2取计数值低8位
MOVTL1,A;计数值低8位存入TL1
MOV52H,A;计数值低8位存入52H
SETBTR1;启动T1
WY2:
LCALLDELAY;调用基本单位时间(1/4拍)
INC40H;简谱码指针加1
SJMPLOOP22;取下一个简谱码
FINISH2:
CLRTR1;停止T1
LJMPMAIN
TAB2:
DB64H,62H,52H,64H,04H;简谱码表
DB62H,82H,62H,52H,64H,04H
DB44H,42H,52H,62H,82H,64H
DB54H,52H,42H,54H,04H
DB66H,81H,61H,92H,86H
DB92H,82H,82H,62H,86H,12H
DB64H,52H,52H,84H,62H,52H
DB54H,52H,42H,54H,04H
DB64H,62H,52H,64H,04H
DB62H,82H,62H,52H,64H,04H
DB44H,42H,52H,62H,82H,64H
DB54H,52H,42H,54H,04H
DB66H,81H,61H,92H,86H
DB92H,82H,82H,62H,84H,04H
DB02H,62H,52H,62H,84H,62H,52H
DB52H,46H,44H,04H
DB42H,52H
DB64H,62H,82H,94H,92H,0D2H
DB0D2H,0C2H,0B2H,92H,84H,04H
DB92H,82H,62H,52H,44H,22H,42H
DB54H,52H,42H,54H,42H,52H
DB64H,62H,82H,94H,92H,0D2H
DB0C2H,0B2H,0B2H,0C2H,0B4H,04H
DB84H,82H,62H,0A2H,0B2H,42H,52H
DB64H,04H,54H,04H
DB44H,04H,04H,04H
DB00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GQ3:
MOVSP,#30H
MOVTMOD,#10H;设T1工作方式1
MOVIE,#88H;允许中断
LOOP13:
MOV40H,#00H;简谱码指针清0
LOOP23:
MOVA,40H;简谱码指针放入A
MOVDPTR,#TAB3
MOVCA,@A+DPTR;到表格TAB3中取简谱码
MOVR1,A;取到的简谱码暂存于R1
JZFINISH3;简谱码是00H(结束码),转移
ANLA,#0FH;不是00H,取低4位(节拍码)
MOVR2,A;将节拍码存入R2中
MOVA,R1;将取到的简谱码再放入A
SWAPA;高低4位交换
ANLA,#0FH;取低4位(唱名码)
JNZSING3;唱名码不是00H,转移
CLRTR1;唱名码是00H,则不发音
SJMPWY3;转移至WY3
SING3:
DECA;唱名码减1
MOV50H,A;唱名码存入50H
RLA;乘2
MOVDPTR,#TABLE2
MOVCA,@A+DPTR;到表格TABLE2取计数值高8位
MOVTH1,A;计数值高8位存入TH1
MOV51H,A;计数值高8位存入51H
MOVA,50H;将取到的唱名码再放入A
RLA;乘2
INCA;唱名码加1
MOVCA,@A+DPTR;到表格TABLE2取计数值低8位
MOVTL1,A;计数值低8位存入TL1
MOV52H,A;计数值低8位存入52H
SETBTR1;启动T1
WY3:
LCALLDELAY;调用基本单位时间(1/4拍)
INC40H;简谱码指针加1
SJMPLOOP23;取下一个简谱码
FINISH3:
CLRTR1;停止T1
LJMPMAIN
TAB3:
DB82H,62H,64H;简谱码表
DB72H,52H,54H
DB42H,52H,62H,72H
DB82H,82H,84H
DB82H,62H,64H
DB72H,52H,54H
DB42H,62H,82H,82H
DB64H,04H
DB52H,52H,52H,52H
DB52H,62H,74H
DB62H,62H,62H,62H
DB62H,72H,84H
DB82H,62H,64H
DB72H,52H,54H
DB42H,62H,82H,82H
DB44H,04H
DB00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GQ4:
MOVSP,#30H
MOVTMOD,#10H;设T1工作方式1
MOVIE,#88H;允许中断
LOOP14:
MOV40H,#00H;简谱码指针清0
LOOP24:
MOVA,40H;简谱码指针放入A
MOVDPTR,#TAB4
MOVCA,@A+DPTR;到表格TAB4中取简谱码
MOVR1,A;取到的简谱码暂存于R1
JZFINISH4;简谱码是00H(结束码),转移
ANLA,#0FH;不是00H,取低4位(节拍码)
MOVR2,A;将节拍码存入R2中
MOVA,R1;将取到的简谱码再放入A
SWAPA;高低4位交换
ANLA,#0FH;取低4位(唱名码)
JNZSING4;唱名码不是00H,转移
CLRTR1;唱名码是00H,则不发音
SJMPWY4;转移至WY4
SING4:
DECA;唱名码减1
MOV50H,A;唱名码存入50H
RLA;乘2
MOVDPTR,#TABLE2
MOVCA,@A+DPTR;到表格TABLE2取计数值高8位
MOVTH1,A;计数值高8位存入TH1
MOV51H,A;计数值高8位存入51H
MOVA,50H;将取到的唱名码再放入A
RLA;乘2
INCA;唱名码加1
MOVCA,@A+DPTR;到表格TABLE2取计数值低8位
MOVTL1,A;计数值低8位存入TL1
MOV52H,A;计数值低8位存入52H
SETBTR1;启动T1
WY4:
LCALLDELAY;调用基本单位时间(1/4拍)
INC40H;简谱码指针加1
SJMPLOOP24;取下一个简谱码
FINISH4:
CLRTR1;停止T1
LJMPMAIN
TAB4:
DB42H,42H,44H,14H;简谱码表
DB62H,62H,64H,44H
DB42H,62H,84H,84H
DB72H,62H,54H,04H
DB52H,62H,74H,74H
DB62H,52H,64H,44H
DB42H,62H,54H,14H
DB32H,52H,44H,04H
DB
DB
DB
DB
DB
DB
DB
DB
DB00H
TABLE2:
DW0FD82H,0FDC8H,0FE06H;唱名码表
DW0FE22H,0FE56H,0FE85H
DW0FE9AH,0FEB2H,0FEE4H
DW0FF03H,0FF11H,0FF2BH
DW0FF42H,0FF4DH,0FF61H
DELAY:
MOVR4,#250;延时187ms的循环次数
LP1:
MOVR5,#0;延时0.935ms的循环次数
DJNZR5,$
DJNZR4,LP1
DJNZR2,DELAY;节拍数未到,转移
RET
END;程序结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 音乐盒 课程设计