程煜钧 通信1001 基于stc89c52单片机的16音阶电子琴设计Word格式.docx
- 文档编号:4790859
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:15
- 大小:220.15KB
程煜钧 通信1001 基于stc89c52单片机的16音阶电子琴设计Word格式.docx
《程煜钧 通信1001 基于stc89c52单片机的16音阶电子琴设计Word格式.docx》由会员分享,可在线阅读,更多相关《程煜钧 通信1001 基于stc89c52单片机的16音阶电子琴设计Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
三、软件设计
1.音调发生
了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:
音符
频率(HZ)
计数值(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63737
中5SO
784
64898
低2RE
294
63835
#5SO#
831
94934
#2RE#
311
63928
中6LA
880
64968
低3MI
330
64021
#6LA#
932
64994
低4FA
349
64103
中7SI
968
65030
370
64185
1046
65058
低SO
392
64260
1109
65085
415
64331
高2RE
1175
65110
低6LA
440
64400
1245
65134
466
64463
高3MI
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
1490
65198
554
64633
高5SO
1568
65217
中2RE
587
1661
65235
622
64884
高6LA
1760
65252
中3MI
659
64732
1865
65268
中4FA
698
64820
高7SI
1967
65283
通过该表,就可以通过编程实现按键发声的功能。
2.4×
4矩阵键盘识别处理
键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖等功能均由软件完成。
每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线通过P3口和单片机相连。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么,还要消除按键在闭合或断开时的抖动。
通过行线输出扫描码,使按键逐行动态接地,列线输入按键状态,无键按下,列线输入1,有键按下,列线输入0,由行扫描值和列线的回馈信号共同形成键编码而识别按键,通过软件查表,查出该键功能。
3.程序流程图
图-5主程序和T0中断服务程序流程图
四、硬件连接图
系统硬件连接如下图所示,单片机P1.0的输出作为音频放大电路的输入,P3口分别作为4×
4矩阵键盘的行和列。
五、课程设计总结
从大一到现在,做过了很多的课程设计也焊过很多的电路板,但是这是第一次接触单片机,也是第一次接触软件和硬件同时开工的课程设计。
因为以前的课程设计都是要么纯硬件的焊接,要么就是仅仅只是编程序。
而这次把这二者结合了起来对我来说确实是有一定的难度。
首先是焊接的方面,虽然这次的电路较为简单,但是16个按钮的连接方式也着实让我为难了一番。
其次就是如何将程序烧到芯片里面,这也是一个问题,还好有同学的帮助,用它的实验平台帮我将程序烧了进去。
而这次实验最大的体会便是仔细和认真的态度才能让你成功,所谓慢工出细活,只有一步一步把该做好的东西都做好了,该实现的功能才会实现,实验才会成功。
我想这也是电信所有的课程设计想要教会我们的东西吧。
附表:
实验所用程序
KEYBUFEQU30H;
KEYBUF定义为30H
STH0EQU31H;
STH0定义为,31H
STL0EQU32H;
STL0定义为,32H
TEMPEQU33H;
TEMP定义为,33H
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVTMOD,#01H;
设置定时器0的工作方式
SETBET0;
设置定时器中断
SETBEA;
开总中断
WAIT:
MOVP3,#0FFH;
设置P3口为输入模式
CLRP3.4;
P3.4清0,按键的第一行扫描
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELY10MS;
延时10ms
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:
CJNEA,#0DH,NK2;
K1键按下
MOVKEYBUF,#1
LJMPDK1
NK2:
CJNEA,#0BH,NK3;
K2键按下
MOVKEYBUF,#2
NK3:
CJNEA,#07H,NK4;
K3键按下
MOVKEYBUF,#3
NK4:
NOP;
K4键按下
DK1:
MOVA,KEYBUF
MOVB,#2
MULAB;
因为查表里都是字,所以乘2的查表数据
MOVTEMP,A
MOVDPTR,#TABLE;
指向表头
MOVCA,@A+DPTR;
查表
MOVSTH0,A
MOVTH0,A;
将数据高位送TH0
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A;
将数据低位送TH0
SETBTR0;
启动定时器T0
DK1A:
MOVA,P3
XRLA,#0FH
JNZDK1A
CLRTR0;
关闭定时器T0
NOKEY1:
CLRP3.5;
清0P3.5,按键的第二行扫描
JZNOKEY2
延时10ms
JZNOKEY2
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:
CJNEA,#0DH,NK6;
K5键按下
MOVKEYBUF,#5
NK6:
CJNEA,#0BH,NK7;
K6键按下
MOVKEYBUF,#6
NK7:
CJNEA,#07H,NK8;
K7键按下
MOVKEYBUF,#7
NK8:
NOP;
K8键按下
DK2:
MOVA,KEYBUF
MOVB,#2
指向表头
MOVSTH0,A;
将数据高位送TH0
启动定时器T0
DK2A:
JNZDK2A
关闭定时器T0
NOKEY2:
设置P3口为输入模式
CLRP3.6;
清0P3.6,按键的第三行扫描
JZNOKEY3
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:
CJNEA,#0DH,NK10;
K9键按下
MOVKEYBUF,#9
NK10:
CJNEA,#0BH,NK11;
K10键按下
MOVKEYBUF,#10
NK11:
CJNEA,#07H,NK12;
K11键按下
MOVKEYBUF,#11
NK12:
K12键按下
DK3:
MOVB,#2
MULAB;
指向表头
查表
启动定时器T0
DK3A:
JNZDK3A
NOKEY3:
CLRP3.7;
清0P3.7,按键的第四行扫描
JZNOKEY4
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:
CJNEA,#0DH,NK14;
K13键按下
MOVKEYBUF,#13
NK14:
CJNEA,#0BH,NK15;
K14键按下
MOVKEYBUF,#14
NK15:
CJNEA,#07H,NK16;
K15键按下
MOVKEYBUF,#15
NK16:
K16键按下
DK4:
MULAB;
因为查表里都是字,所以乘2的查表数据
DK4A:
JNZDK4A
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10;
10ms延时子程序
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
CPLP1.0;
T0中断服务程序,输出方波
MOVTH0,STH0
MOVTL0,STL0
RETI
TABLE:
DW64021,64103,64260,64400;
低3,低4,低5,低6
DW64524,64580,64684,64777;
低7,中1,中2,中3
DW64820,64898,64968,65030;
中4,中5,中6,中7
DW65058,65110,65157,65178;
高1,高2,高3,高4
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程煜钧 通信1001 基于stc89c52单片机的16音阶电子琴设计 通信 1001 基于 stc89c52 单片机 16 音阶 电子琴 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)