单片机课程设计简易电子琴.docx
- 文档编号:6060487
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:17
- 大小:219.68KB
单片机课程设计简易电子琴.docx
《单片机课程设计简易电子琴.docx》由会员分享,可在线阅读,更多相关《单片机课程设计简易电子琴.docx(17页珍藏版)》请在冰豆网上搜索。
单片机课程设计简易电子琴
课程设计
课程设计名称:
单片机课程设计
专业年级:
电子信息科学与技术
学生姓名:
冯利
学号:
200938930638
指导教师:
王彩虹
课程设计时间:
2011.6.20—2011.6.26
09级国电专专业课程设计任务书
学生姓名
冯利
专业班级
国电专0906
学号
200938930638
题目
51单片机的简易电子琴设计
课题性质
工程设计
题目来源
自拟
指导教师
王彩虹
同组姓名
范继超
主要内容
设计一个51单片机系统,实现简易电子琴操作的电路。
要求:
1设计51单片机最小系统;
2.设置至少10个按键,能发出doremifasollaSIDO;
能播放示范曲;
3.能够调节低音、高音和中音。
任务要求
1.根据功能要求选择设计方案,并进行论证。
2.画出电路的总体方框图和电路原理图。
3.说明系统工作原理,对系统进行调试。
4.写出课程设计报告。
参考文献
1.单片机技术有关教材
2.电路设计手册
3.其他资料
审查意见
指导教师签字:
王彩虹
教研室主任签字:
焦素敏年月日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
1.任务及要求
设计一个51单片机系统,实现简易电子琴操作的电路。
要求:
1.设计51单片机最小系统;
2.设置至少10个按键,能发出doremifasollasido;
能播放示范曲;
3.能够调节低音、高音和中音。
2.设计方案
1.定时/计数器的设计和状态字定义:
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。
就可在P1.0引脚上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式是:
N=fi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:
设K=65536,fi=1MHz,求中音DO(261Hz)。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。
单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1 DO
262
63628
#4FA#
740
64860
#1 DO#
277
63731
中5SO
784
64898
低2 RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
低音0-19之间,中音在20-39之间,高音在40-59之间
用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。
为了输出合适的方波,首先应该知道音符与频率的关系。
2.音名
从常见的电子琴的键盘谈起。
主要分成低音、中音和高音三个区域,每个区域都有12个琴键。
其中的白键,简谱音符标为1、2、3、4、5、6、7,大家一般都读成哆、来、咪、发、嗦、拉、西。
按键
1
3
4
5
6
7
8
音符
1
3
4
5
6
7
I
频率值
524
660
698
784
880
988
1048
3.音调数据表
单片机发出不同频率的方波,人听起来,就是不同的音调。
上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。
定义音调数据表的程序如下:
DW63628,63835,64021,64103,64260,64400,64524;64580,低音区:
1234567
DW64580,64671,64777,64820,64898,64968,6503065058中音区:
1234567
DW65058,65110,65157,65178,65217,65252,6528365312高音区:
1234567
把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。
音乐的音拍,一个节拍为单位(C调)
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
三.设计电路图
1.晶振部分
本次采用12MHZ晶振,机器周期为1us,连接两个30pF的电容,连接到AT89C51的XATL1,XATL2 上面,连接电路图如下:
2.音频输出 本次只是简单的使用一个蜂鸣器连接到AT89C51的p1.0口上
3.高。
中。
低及音乐播放键:
检测高中低是否按下,来跳转到音阶键上输出不同频率的音阶音,检测播放是否按下,跳转到示范曲目播放
4.AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
5.音阶键部分
6.设计电路总体图样
4、设计流程图
1.音阶键识别
5、程序如下:
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
DELYEQU33H
NUMEQU34H
ORG0000H
AJMPMAIN;跳转到主函数
ORG000BH
LJMPINT_T0;音乐输出口
ORG0040H
MAIN:
MOVTMOD,#01H;写出计时器控制字,T0方式计时
SETBEA;开中断总开关
SETBET0;允许T0中断
MOVNUM,#01H;;num置1
MOVR1,#00H
TEST:
;低音检测
ANLTH0,#00H;高位清零
ANLTL0,#00H;低位清零
MOVA,P2;P2进入
CJNEA,#0FEH,TEST1;检测P2.0口低音键是否按下
MOVDPTR,#TABLE1;低音键按下,进入低音表地址
AJMPWAIT;跳转到音阶检测
TEST1:
;中音检测
CJNEA,#0FDH,TEST2;检测P2.0中音键是否按下
MOVDPTR,#TABLE2;中音键按下,进入中音表地址
AJMPWAIT
TEST2:
;高音检测
CJNEA,#0FBH,TEST3;检测P2.0口高音键是否按下
MOVDPTR,#TABLE3;高音键按下,进入高音表地址
AJMPWAIT
TEST3:
;音乐播放检测
CJNEA,#0F7H,TEST4;检测音乐播放键是否按下若有按下则转至EXIT
LCALLDELAY10MS;软件延时消抖
MOVA,P2
CJNEA,#0F7H,TEST4;检测播放键是否再次按下
MOVA,NUM
CJNEA,#01H,EXIT;检测高低中是否再次按下
MOVNUM,#00H
MOVDPTR,#TABLE4;进入音乐播放表
AJMPWAIT1;跳转至音乐播放入口
EXIT:
CLRTR0;计数器停止,音乐播放结束
MOVR1,#00H;清零
MOVNUM,#01H
TEST4:
MOVA,NUM
CJNEA,#01H,WAIT2
LJMPTEST;跳转至TEST重新检测
WAIT2:
LJMPWAIT1;跳转至音乐播放入口
WAIT:
CLRTR0
MOVNUM,#01H
SCAN1:
MOVP3,#0F0H;音阶按键检测程序入口
CLRTR0
MOVA,P3;
ANLA,#0F0H
CJNEA,#0F0H,TEE1
AJMPTEST;跳转至TEST重新检测
TEE1:
LCALLDELAY10MS;软件延时消抖
CJNEA,#0F0H,TEE2
AJMPTEST
TEE2:
MOVA,#0FEH
SCAN2:
MOVP3,A
MOVA,P3
MOVB,A
ANLA,#0F0H
CJNEA,#0F0H,CARRY
MOVA,B
RLA
CJNEA,#0BFH,SCAN2
LJMPSCAN1
CARRY:
ANLB,#0FH;键值处理
ORLA,B
CJNEA,#0EEH,KEY1;检测音符键1是否按下
MOVKEYBUF,#00H;赋予键值
LJMPWAI;调至按键处理程序
KEY1:
CJNEA,#0EDH,KEY2;检测音符键2是否按下
MOVKEYBUF,#02H;赋予键值
LJMPWAI;调至按键处理程序
KEY2:
CJNEA,#0EBH,KEY3;检测音符键3是否按下
MOVKEYBUF,#04H;赋予键值
LJMPWAI;调至按键处理程序
KEY3:
CJNEA,#0E7H,KEY4;检测音符键4是否按下
MOVKEYBUF,#06H;赋予键值
LJMPWAI;调至按键处理程序
KEY4:
CJNEA,#0DEH,KEY5;检测音符键5是否按下
MOVKEYBUF,#08H;赋予键值
LJMPWAI;调至按键处理程序
KEY5:
CJNEA,#0DDH,KEY6;检测音符键5是否按下
MOVKEYBUF,#0AH;赋予键值
LJMPWAI;调至按键处理程序
KEY6:
CJNEA,#0DBH,KEY7;检测音符键6是否按下
MOVKEYBUF,#0CH;赋予键值
LJMPWAI;调至按键处理程序
KEY7:
CJNEA,#0D7H,SCAN1
MOVKEYBUF,#0EH;赋予键值
LJMPWAI;调至按键处理程序
WAI:
MOVA,KEYBUF;按键处理程序入口
MOVCA,@A+DPTR
MOVSTH0,A
INCKEYBUF
MOVA,KEYBUF
MOVCA,@A+DPTR
MOVSTL0,A
MOVTH0,STH0
MOVTL0,STL0
SETBTR0
LCALLDELAY100MS
LJMPSCAN1
WAIT1:
CJNER1,#00H,LOOP;播放音乐程序入口
LOOP:
MOVA,R1
MOVCA,@A+DPTR
MOVSTH0,A
INCR1
MOVA,R1
MOVCA,@A+DPTR
CJNEA,#0FEH,NEXT1
MOVR1,#00H
LJMPLOOP
NEXT1:
MOVSTL0,A
INCR1
MOVA,R1
MOVCA,@A+DPTR
MOVDELY,A
MOVTH0,STH0
MOVTL0,STL0
SETBTR0
NEXT2:
LJMPDELAY187MS;节拍延时控制
NEXT3:
DJNZDELY,NEXT2
INCR1
LJMPTEST
NOKEY:
LJMPTEST;重新检测
DELAY10MS:
MOVR6,#10;10ms延时
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET;子程序返回
DELAY100MS:
MOVR5,#06EH;100ms延时
DL0:
MOVR4,#0CFH
DJNZR4,$
DJNZR5,DL0
RET;子程序返回
DELAY187MS:
MOVR3,#187;187ms延时,用于节拍控制
DL1:
MOVR2,#248
DJNZR2,$
DJNZR3,DL1
LJMPNEXT3
INT_T0:
MOVTH0,STH0;高8为输入
MOVTL0,STL0;低8位输入
CPLP1.0;音乐输出口启用
RETI;中断返回
TABLE1:
DB0f8h,094h,0f9h,05ch,0fah,01Ah,0FAH,06AH;低音调表值
DB0FBH,00H,0FBH,08CH,0FCH,0EH,0FCH,044H;
TABLE2:
DB0FCH,04AH,0FCH,0AEH,0FDH,008H,0FDH,030H;中音调表值
DB0FDH,080H,0FDH,0C6H,0FEH,02H,0FEH,022H;
TABLE3:
DB0FEH,02AH,0FEH,05CH,0FEH,084H,0FEH,098H;高音调表值
DB0FEH,0C0H,0FEH,0E8H,0FFH,006H,0FFH,029H;
•SONG1:
;化蝶
•.DB-3,04H,-5,03H,-6,01H,1,03H,2,01H,-6,01H,1,01H,-5,02H
•.DB5,03H,+1,01H,6,01H,5,01H,3,01H,5,01H,2,08H
•.DB2,02H,2,01H,3,01H,-7,02H,-6,02H,-5,03H,-6,01H,1,02H,2,02H
•.DB-3,02H,1,02H,-6,01H,-5,01H,-6,01H,1,01H,-5,08H
•.DB3,03H,5,01H,-7,03H,2,01H,-6,01H,1,01H,5,05H
•.DB-3,02H,-5,01H,-3,01H,-5,01H,-6,01H,-7,01H,2,01H,-6,06H,-5,01H,-6,01H
•.DB1,03H,2,01H,5,02H,3,02H,2,02H,3,01H,2,01H,1,02H,-6,01H,-5,01H
•.DB-3,04H,1,04H,-6,01H,1,01H,-6,01H,-5,01H,-3,01H,-5,01H,-6,01H,1,01H
•.DB-5,08H,FFH,08H
6、心得体会
本次单片机课程设计,本身题目并没有多大难度,但对初学者得我来说还是有些小困难,但经过理论知识的进一步学习,查阅了大量资料之后,了解了设计思路,在参考了网上的一些程序及类似作品之后,仍将它安老师要求做了出来,中间花费了很大功夫,对程序及电路图做了多次修改,终于,一份还算令自己满意的完成品诞生了!
本次简易单片机设计,要求是能发出八个音阶声音,并能控制低,中,高三音变换,还能播放示范曲目。
我利用AT89C51单片机
这次我主要的设计是一个游戏型的电子琴,采用16个键分别代表16个音,通过对按键的随意按击从而产生不同的音乐,主要是通过每个按键所产生的频率不同来使得发出的各个音不同,从而产一音乐,虽然显得单一,但是至少很简单。
这次主要参考了网上的一个实例,再加上了一些自己的补充。
我主要针对了这个设计的原理和程序的编写,从而来更好的会习设计的方法和创新。
最后,通过这次的自主完成单片机的应用系统设计,虽说不完全是自己完成,但是至少有一点,让我们学会了如何去完成一个设计报告,让我更进一步了解了单片机,也让我感受到做出一个设计的开心,喜悦与担心。
相信这对以后的毕业设计也会有很大的帮助。
参与本次设计,我也有不少收获:
第一、系统而比较全面地检查了我所学的专业知识,补充了我未学的专业知识,对一个产品的开发的步骤有一定的认识。
“查漏补缺”的同时进一步巩固了专业知识,锻炼了自己。
第二、训练了我的动手能力。
电路板得读取,程序得编制等实际操作让我真正地理解了“学以致用”的含义。
第三、在学习怎样开发SPCE061A板的同时也使我们对相应的软件环境有了更进一步的认识和了解。
比如:
Protel99SE电路板的设计环境,IDE单片机的开发环境等。
第四、使我真正意识到团队合作的重要性。
一个产品的诞生,离不开设计参与者的文化素质,更离不开他们的团队精神。
所有的参与者都是优秀的,但谁都不是最优秀的。
第五、发掘自我潜能,重视能力,注重培养自己的兴趣与爱好。
学习分析和解决问题,不要因为困难而害怕困难,只有坚持才能够取得最后的成功。
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 简易 电子琴