单片机电子琴设计.docx
- 文档编号:10661404
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:37
- 大小:239.85KB
单片机电子琴设计.docx
《单片机电子琴设计.docx》由会员分享,可在线阅读,更多相关《单片机电子琴设计.docx(37页珍藏版)》请在冰点文库上搜索。
单片机电子琴设计
第1章设计要求及目的1
1.1设计要求1
第2章系统总体方案及说明3
2.1系统总体方案选择3
2.2系统总体方案说明4
第3章系统方框图与工作原理5
3.1系统方框图5
3.2系统工作原理5
第4章各单元硬件设计及说明8
4.1单元硬件设计及说明8
附录2:
系统程序清单30
第1章设计要求及目的
1.1设计要求
本课题设计要求为以单片机为核心设计一个电子琴,具有自动播放乐曲和弹奏乐曲的功能。
设计任务包括控制系统硬件设计和应用程序设计。
本课题设计条件设定开关或按钮K1、K2和K3。
开关或按钮K1关闭自动播放乐曲;开关或按钮K2打开自动播放乐曲;开关或按钮K3为手动弹奏乐曲。
用21个按键开关来分别控制产生低音“1、2、3、4、5、6、7”、中音“1、2、3、4、5、6、7”和高音“1、2、3、4、5、6、7”。
利用单片机端口I/O口线或扩展I/O口线形成3×8矩阵式键盘完成上述按键的分配。
1.2设计目的
1、能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
2、熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
3、为实现预期功能,能够对系统进行快速的调试,并能够对
现的功能故障进行分析,及时修改相关软硬件。
4、对软件编程、排错调试、相关软件的使用技能等方面得到
全面的锻炼和提高。
5、理解音乐产生的原理、数码动态显示方法和编码键盘扫描方法以及单片机内部定时器的溢出中断编程方法。
6、本次课程设计从硬件和软件两个方面入手,全面具体地掌握设计思路、方法和过程,使理论与实际相结合,充分地锻炼了动手能力和思维扩展能力。
第2章系统总体方案及说明
2.1系统总体方案选择
2.1.1电子琴原理
在介绍总体方案之前,先简单介绍一下电子琴的发生原理以及如何改变音色的基本原理:
声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线不断输出“高”“低”电平,则在该口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音,若再利用程序控制“高”“低”电平的持续时间,就能改变输出波形的频率从而改变音调。
乐曲中,每一音符对应着确定的频率,下表给出各音符频率。
如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。
2.1.2系统方案选择
1、本次设计的电子琴主要由两部分组成:
自动播放音乐和手动弹奏乐曲。
以及两者之间的功能转换;而自动播放音乐则是由单片机的存储器中的软件编程放置音乐代码和相关播放程序来实现,手动弹奏乐曲则是由3x8的矩阵键盘通过音符不同频率来设置的功能键去实现高、中、低音。
2、在其功能模块的划分上来看,其主要由主程序模块、自动音乐播放模块、功能转换模块、手动弹奏音乐模块组成。
而在手动弹奏模块中又可以由键盘扫描模块、数码显示模块组成;在功能转换模块也可以分为键盘扫描模块。
复位模块;且在其单片机上采用程序,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲和自动播放音乐两部分的切换和启动。
3、在音乐自动播放里面,其发声原理即通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音节的声音。
用软件延时来控制发音时间的长短,控制节拍。
把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间。
4、而方案中具体所用到的硬件设施即为:
51系列单片机AT89C51、矩阵3x8键盘输入电路、时钟电路、复位电路、八段显示数码管电路、蜂鸣器等。
2.2系统总体方案说明
1、首先从整个大的设计思路去思考:
电子琴设计主要是有由两部分组成:
自动播放音乐和手动弹奏乐曲,在两者之间有着功能转换程序,对其不同的功能方式进行着转换控制。
2、对电子琴两大组成部分的设计可有四部分软件的设计组成:
音乐自动播放程序;矩形键盘键值的读取;手动弹奏乐曲程序;LED动态扫描输出程序。
3、自动播放音乐和手动弹奏乐曲是用非编码的3x8的矩阵键盘来实现的,主要包括数字键和功能键,功能键包括切换键和暂停键。
手动弹奏乐曲中矩阵键盘的21个键分别设置不同的音符,同时用一个键作为进入转换控制程序的控制键,然后通过其它功能键可实现手动弹奏乐曲与播放音乐之间的切换。
并对自动播放的音乐进行暂停及重新播放的控制。
第3章系统方框图与工作原理
3.1系统方框图
基于单片机的电子琴的基本结构如下图1所示:
、
图1
3.2系统工作原理
3.2.1键盘扫描原理
先将3×8矩阵键盘的行和列全部置为高电平,然后再逐行置为低电平,当有键按下时P1口的值会发生相应的改变,通过与给定数的比较,判定是否有键按下和是否键已松开。
并给定列号,根据所给的列号的值,一方面给LED送入确定好的数值,另一方面从TABLE表中取出相应的值,送入单片机转换成声音播出。
3.2.2音乐播放原理
通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音节的声音。
用软件延时来控制发音时间的长短,控制节拍。
把乐谱的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序到这量常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间。
单片机晶振频率为12MHZ时,乐曲中的音符、频率及定时常数之间的对应关系可制成如下表1-1所示:
表1-1C调各音符频率与计数值T的关系
音符
频率(Hz)
半周期(ms)
简谱码T值
定时值(H)
简谱码T值
定时值(D)
低1Do
262
1.90
F894H
62628
低2Re
294
1.70
F95CH
63835
低3Mi
330
1.51
FA1AH
64021
低4Fa
349
1.43
FA6AH
64103
低5So
392
1.28
FB00H
64260
低6La
440
1.14
FB8CH
64400
低7Si
494
1.01
FC0EH
64524
中1Do
523
0.95
FC4AH
64580
中2Re
587
0.85
FCAEH
64684
中3Mi
659
0.76
FD08H
64777
中4Fa
698
0.72
FD30H
64820
中5So
784
0.64
FD80H
64896
中6La
880
0.57
FDC6H
64966
中7Si
988
0.51
FE02H
65030
高1Do
1046
0.47
FE2AH
65058
高2Re
1175
0.42
FE5CH
65110
高3Mi
1318
0.38
FE84H
65157
高4Fa
1397
0.36
FE98H
65178
高5So
1568
0.32
FEC0H
65217
高6La
1760
0.28
FEE8H
65252
高7Si
1967
0.25
FF06H
65283
音乐的音拍,一个节拍为单位(C调)如下表1-2所示:
表1-2曲调值表
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
第4章各单元硬件设计及说明
4.1单元硬件设计及说明
4.1.1单片机AT89C52接口(如下图2所示)
图2
由于对电子琴设计的思考,则可以选择带有EPROM(可擦写可编程只读存储器)的单片机,应用程序直接存储在片内,不用外部扩展程序存储器,以便可以简化电路。
而且AT89CXX系列(如AT89C52)单片机与MCS-51系列单片机相比,有两大优点:
第一点即为片内程序存储器采用闪速存储器,使程序的写入更方便;第二点即为提供了更小尺寸的芯片,使整个硬件电路的体积更小。
它以较小的体积、良好的性价比而受到极大的欢迎。
而单片机AT89c52的P0口的P0.0-P0.7作为显示的段码;P1口的P1.0-P1,7作为3×8矩阵键盘的8个列的扫描端口;P2口的P2.0-P2.2作为3×8矩阵键盘的3个行的扫描端口;P3口的P3.7作为蜂鸣器接口。
4.1.2蜂鸣器模块(如下图3所示)
图3
电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
本系统设计的蜂鸣器通过驱动电路与单片机的P3.7连接,单片机就可以通过P3.7的输出信号频率就行控制。
4.1.3LED数码管显示模块(如下图4所示)
图4
本次设计由于只需要显示其手动演奏乐曲的音符、切换至自动播放音乐的倒计时以及复位功能的显示,所以只需要一位八段数码管即可,且是为共阴极数码显示管。
本设计的LED显示器采用动态扫描的方法进行显示,即循环地点亮各位显示器,由此可以采用单片机的P0口来控制LED显示器的字形输入(段控)。
4.1.4复位电路(如下图5所示)
图5
复位是单片机的初始化操作,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。
本系统采用上电与按键复位电路,为了防止干扰串扰复位端,所以再接一个去耦电容;通过按键的按下去实现复位动作,此次设计除一般的复位形式外,也将按键的锁定通过复位去实现解锁动作。
4.1.5时钟电路(如下图6所示)
图6
单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30pF。
4.1.6矩阵键盘电路(如下图7所示)
图7
本次设计由于要体现出高、中、低音的完整性,所以各都有完整的七个音,所以采用了3x8的矩阵键盘去实现。
矩阵键盘又称为行列式键盘,它是用3条I/O线作为行线,8条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是3×8个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
此次设计的矩阵式键盘的行线连接到P2.0-P2.2口上,列线连接到P1.0-P1.7口上,单片机通过对键盘的每一行进行扫描,读取判断有无按键被按下及其所对应的按键位置。
为了判断有无按键被按下,可以先经由输出口向所有列线输出高电平然后在输出各行状态。
如果行线状态都为高电平就表示无按键被按下;如果行线状态中有低电平则表示有按键被按下;而后再根据接通的行线和列线去判断按键的位置。
经过键盘扫描有按键被按下后,接下来就是去抖动的处理,抖动时间的长短和按键的机械特性有关,一般为10-20ms。
第5章器件说明
AT89C52单片机1片
按键开关25个
电容(30pF)2片
电容(10uF)1片
晶振(12MHz)1片
电阻(1KΩ)2个
电阻(200Ω)2个
蜂鸣器1个
八段数码显示管1个
第6章系统软件设计
6.1系统软件的设计
当系统硬件电路设计定型后,软件设计的任务也就明确了。
具体设计时最好采用模块化设计方法,根据相应的模块,然后分头进行,提高软件设计的工作效率。
软件设计时应从以下几个方面加以考虑:
(1)根据软件功能要求,将系统软件分成若干个相对独立的部分,使系统软件总体结构清晰、简介、流程合理。
(2)各功能程序实行模块化、子程序化,这样便于调试、修改和扩展。
(3)建立正确的的数学模型,它是关系到系统性能好坏的重要因素。
(4)为提高软件设计的总体效率,在编写应用软件之前,应绘制出程序流程图。
这是程序设计的的一个重要组成部分,也是决定成败的关键部分。
(5)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。
其中最关键的是片内RAM分配。
分配时应充分发挥其特长,做到物尽其用。
(6)注意在程序的相关位置处写上功能注释,提高程序的可读性。
(7)加强软件抗干扰设计,它是提高计算机应用系统可靠性的有力措施。
经过对软件设计的考虑后,则可以简单的将一个完整的程序设计方案分为几大块的功能模块,不过,其模块的设计应该遵循以下原则:
(1)每个模块应具备独立的功能,能产生一个明确的结果。
(2)模块之间的控制参数应尽量简单,数据参数应尽量少。
控制参数是指模块进入和退出的条件及方式,数据参数是指模块间信息的交换方式、交换量的多少及交换的频繁程度。
(3)模块的长度适中。
模块语句的长度要始终,模块太长,调试和分析会有难度;模块太短,信息交换太过频繁,不利于模块功能的体现。
则本次电子琴的设计模块图如下图8所示
图8
6.2系统应用程序的设计
6.2.1主程序的设计
主程序的内容一般包括:
主程序的起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序调用等。
如在此则先调用显示子程序,而后再是手动弹奏和音乐自动播放的程序。
主程序的源程序如下所示:
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
TEMPEQU33H
SPKEQUP3.7
ORG0000H
LJMPSTART
ORG000BH
LJMPINT_T0
ORG001BH
LJMPTIME0
START:
MOVTMOD,#11H
SETBET0
SETBET1
SETBEA
ACALLSAOMIAO
SJMPSTART
主程序流程图如下图9所示:
图9
6.2.2手动弹奏乐曲程序的设计
手动弹奏程序的功能是通过对键盘的扫描,将每一个键设置为一个音符,每按下一个键就能蜂鸣器就能产生相应的音符。
这里,系统设计了第一行为高音部分的音符,第二行为中音部分的音符,第三行为低音部分的音符。
手动弹奏乐曲流程图如下图10所示:
图10
手动弹奏子程序程序如下:
SAOMIAO:
MOVP2,#0FFH
MOVP1,#0FFH
CLRP2.2
MOVA,P1
CJNEA,#0FFH,NEQ
EQ:
LJMPNOKEY1
NEQ:
LCALLDELY10MS
MOVA,P1
CJNEA,#0FFH,NEQ1
EQ1:
LJMPNOKEY1
NEQ1:
MOVA,P1
CJNEA,#0FEH,NK1
MOVKEYBUF,#0
MOVP0,#79H
LJMPDK1
NK1:
CJNEA,#0FDH,NK2
MOVKEYBUF,#1
MOVP0,#24H
LJMPDK1
NK2:
CJNEA,#0FBH,NK3
MOVKEYBUF,#2
MOVP0,#30H
LJMPDK1
NK3:
CJNEA,#0F7H,NK4
MOVKEYBUF,#3
MOVP0,#19H
LJMPDK1
NK4:
CJNEA,#0EFH,NK5
MOVKEYBUF,#4
MOVP0,#12H
LJMPDK1
NK5:
CJNEA,#0DFH,NK6
MOVKEYBUF,#5
MOVP0,#02H
LJMPDK1
NK6:
CJNEA,#0BFH,NK7
MOVKEYBUF,#6
MOVP0,#78H
LJMPDK1
NK7:
CJNEA,#7FH,NOKEY1
NK8:
LJMPNEXT111
DK1:
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK1A:
MOVA,P1
XRLA,#0FFH
JNZDK1A
MOVA,P2
ANlA,#0f0H
MOVP2,A
CLRTR0
6.2.3功能转换程序的设计
功能转换模块是个一个独立的模块,它的作用是将手动弹奏乐曲和自动播放音乐两个模块联合起来,能够实现动态转换及锁定等功能。
功能转换子程序程序如下:
NEXT111:
ACALLDELY10MS
MOVP2,#0FFH
MOVP1,#0FFH
CLRP2.2
MOVA,P1
CJNEA,#7FH,NOKEY3
ACALLDISPLAY
ACALLMUSIC
LJMPSTART
NEXT112:
ACALLDELY10MS
MOVP2,#0FFH
MOVP1,#0FFH
CLRP2.1
MOVA,P1
CJNEA,#7FH,NOKEY3
LJMPSTART
NEXT113:
ACALLDELY10MS
MOVP2,#0FFH
MOVP1,#0FFH
CLRP2.0
MOVA,P1
CJNEA,#7FH,NOKEY3
SJMP$
功能转换子程序流程图如下图11所示:
图11
6.2.4自动播放音乐程序的设计
自动播放音乐程序的功能是按照音乐代码表中去的节拍通过定时器T1向蜂鸣器送出音乐频率,当取出的代码为00H时音乐结束播放,自动播放程序调用结束,当取出的代码为0FFH时音乐休止0.1S。
此外,在音乐播放的过程中,我们通过设定若干位寻址区的内存单元(这里取位存储区21H单元作音乐1的返回标志位,取位存储区22H单元作音乐2的返回标志位)作查询暂停和断点再次播放的功能。
自动播放音乐子程序流程图如下图12所示:
图12
自动播放音乐子程序程序如下:
MUSIC:
MOVSP,#60H
MOVDPTR,#TABLE
LOOP:
CLRA
MOVCA,@A+DPTR
MOVR1,A
INCDPTR
CLRA
MOVCA,@A+DPTR
MOVR0,A
ORLA,R1
JZNEXT1
MOVA,R0
ANLA,R1
CJNEA,#0FFH,NEXT
SJMPMUSIC
第7章调试步骤、结果、使用说明
7.1调试步骤
1、手动弹奏乐曲程序的调试:
手动弹奏是通过我们所设计的3x8矩阵式键盘对按键进行扫描,且实行判别定位,将每一个键设置为一个音符,每按下一个键就能蜂鸣器就能产生相应的音符。
由于对书上的矩阵键盘研究了一下,所以这一个很快就调试成功了,能发出我们所需要的音以及显示对应的简谱。
2、功能转换程序的调试:
我们是将其做成了一个独立的模块,以3x8矩阵键盘的最后一列的按键作为功能转换的按键,第一行和第三行的按键我们将其设置为由手动弹奏乐曲和自动播放音乐之间的相互转换,一个调用程序就能实现其转换功能;第二行的按键我们将其设置为中断键,即为锁定键,当按下它后,矩阵键盘的任意按键都无效,需要用复位按键去继续按键的动作。
3、自动播放音乐程序的调试:
我们选用了12MHZ的晶振频率,主要是为了保证其频率能使播放的音乐不走调,而且结合了所了解的其音调和节拍的定时常数等去做了一首简单的歌《欢乐颂》,而且是在延时3秒后进行播放。
7.2完整系统的运行
我们将在PROTEUS环境下进行调试,首先将系统电路原理图绘制完成,然后双击单片机AT89C52,在programfile点击文件将我们在WAVE6000里编译成功而保存的带有后缀的.HEX文件放进去,点击确定后即可进行调试。
然后点击整个环境下的开始按键,即可仿真,先开始手动弹奏乐曲模块的调试,在高、中、低音三行21键的矩阵键盘中任意按下几个按键,能听到设计的音符所对应的音且能在一位数码显示管中显示对应的音符的简谱;接着按下矩阵键盘的最后一列的功能转换键,第一行和第三行的按键能由手动弹奏乐曲和自动播放音乐之间的相互转换,第二行的按键能使其余按键功能无效,即为中断整个程序;然后为自动播放音乐,按下功能转换键的第三行的键即可实现音乐的自动播放;最后是复位键,按下后即可对整个电路进行复位。
第8章设计总结
时光荏苒,岁月如梭,两周的单片机课程设计就这样结束了,但是我却从中学到了很多,也掌握了很多。
两周的时间,既漫长又让人怀念,我常常会被程序弄得烦不胜烦,但是也有以为程序调试后能正常运行时那无法抑制的喜悦;这其中,有不解,但更多的是思考和收获。
第一周,从老师那儿得到任务书和老师对整个课题设计的一个大概的讲解,让我处于似懂非懂的状态下,于是带着疑问,带着不解回来把书给看了一遍,接着结合自己所做的课题设计,再对应着网上的一些资料,大概有了个初步认识,紧接着就和小组成员一起讨论这个设计,理清整个设计的总体思路,写出整个设计的总体方案,便开始了我们的设计。
刚开始的时候还是不知道从哪儿下手,是从硬件原理图开始还是从程序着手,我们都迷茫了,于是去实验室询问老师,老师再一次的帮我们理清了思路,讲解了一些我们还没搞清楚的问题,例如功能转换键的作用,清楚后再去考虑怎样去做对应的程序,还有对于我们都很陌生的矩阵式键盘,我们应该花更多的时间去认识了解它。
而且老师还帮我们找到了下手点:
从画系统硬件原理图开始,有了具体的图形在眼前,去汇编相应的程序就会比较清晰明白。
于是我们回来后,就先对我们所需要的3x8矩阵键盘做了个具体仔细的研究,也对功能转换键的功能做了个具体的方案。
而后,我们就开始了分工合作的画出系统硬件原理图,各自把各自的理解画了进去,然后在综合的看看有何不对的地方,在商量着去修改。
第二周,有了前面基础的工作,紧接着我们就开始了应用软件的设计,我们把整个课题设计分成了几大模块,这样每个模块的程序结构简单,任务明确,易于编写、调试和修改;程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,便于功能的扩充和版本的升级;而且对于使用频繁的子程序可以建立子程序库,便于多个模块调用;并且也便于分工合作,我们可以同时进行程序的编写和修改调试工作,也加快了我们的进度。
很快,一个大概的程序就成型了,于是我们进入了调试阶段,可是我们遇到了很多问题:
复位按键有时候会按了无效,于是我们又调节相应的电阻的大小,电容的大小,最后是成功了;而后,在蜂鸣器我也遇到了同样的问题,蜂鸣器发不出声音,于是按照同样的方法,我把电阻值给改了一下,也能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子琴 设计