电子琴设计.docx
《电子琴设计.docx》由会员分享,可在线阅读,更多相关《电子琴设计.docx(21页珍藏版)》请在冰点文库上搜索。
电子琴设计
摘要
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
该设计主要由键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
本设计采用AT89S51单片机为核心控制元件,利用定时器,发出不同频率的脉冲,脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,可构成我们想要的音乐。
该系统通过调试运行、仿真验证,基本实现了设计目标。
关键词:
单片机;按键;电子琴;音阶
1课题描述
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们所想要的音乐了,对于单片机,可以利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
本次设计主要应用AT89C51单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴,通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现用户自编歌曲。
开发环境:
DICE-51仿真开发系统,Proteus仿真软件,Keil环境
2问题分析和任务定义
2.1问题分析
本次设计主要通过对AT89C51的基本认识,利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
在设计时应用4*4行列式键盘扫描,由P3口实现,其中P3.0-P3.3接C0-C3,P3.4-P3.7接L0-L3。
如图2.1所示:
图2.14*4行列式键盘扫描
利用AT89S51的内部定时器使其工作在计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,计数脉冲值与频率的关系式是:
N=fi÷2÷fr。
关系式中N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr。
单片机12MHZ晶振高、中、低音符与单片机计数T0相关的计数值如表2.2所示:
音符
频率(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之间
TABLE:
DW0,63628,63835,64021,64103,64260,64400,64524,0,0
DW0,63731,63928,0,64185,64331,64463,0,0,0
DW0,64580,64684,64777,64820,64898,64968,65030,0,0
DW0,64633,64732,0,64860,64934,64994,0,0,0
DW0,65058,65110,65157,65178,65217,65252,65283,0,0
DW0,65085,65134,0,65198,65235,65268,0,0,0
DW0
2.2任务定义
(1)在操作过程中应满足以下要求:
①电子琴设有16个按键,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴;
②利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,可以发出不同的音调;
③使数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调,PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。
④通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现用户自编歌曲;
(2)该系统在使用过程中,应该实现以下基本功能:
①按要求连接电路图,当按下数字键1、2、3、4、5、6、7时可以发出相应的音调;
②通过不同的数字键组合,可以自编曲目;
③利用protues仿真软件,装载程序,实现对电子琴的仿真。
3概要设计
本次课程设计主要采用AT89C51单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,利用定时器可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,可以发出不同的音调。
在操作过程中,通过选择不同的按键,来发出不同的音调,从而实现用户自编曲目。
设计中主要包含以下几个模块:
(1)键盘扫描程序实现
主要采用4*4行列式键盘进行扫描,选择不同的按键,可以发出不同的音调。
实现过程中主要应用下列代码:
MOVR4,#00H;初值赋给R4
ANLA,#0FH;屏蔽行信号
XRLA,#0FH;取出列信号
JZNOKEY2;判断有无按键
LCALLDELY10MS;有按键延时后再扫描
MOVA,P3;读取扫描结果
CPLP1.0;找到按键,计算键值
(2)定时器1中断服务程序实现
定时器主要将从码表中取得的高位和低位字节值分别赋给TH0、TH1,然后通过P1.0口实现输出频率。
实现过程中主要应用以下代码:
MOVDPTR,#TABLE;从TABLE处取相对高位字节值
MOVCA,@A+DPTR;
MOVP0,A
MOVA,KEYBUF;*2操作
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1;从TABLE处取相对低位字节值
MOVCA,@A+DPTR;
MOVSTH0,A;将高位字节值赋给STH0和TH0
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A;将低位字节值赋给STH0和TH0
MOVTL0,A
SETBTR0;启动TR0
4硬件电路设计
电子琴设计硬件电路图,如图4.1所示:
图4.1电子琴设计硬件电路图
5程序设计
5.1主程序流程图
本次课程设计实现了一个以AT89C51单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过按键,实现用户自编曲目的简易电子琴。
主程序流程图如图5.1所示:
图5.1电子琴设计主程序流程图
5.2子程序流程图
(1)键盘扫描程序流程图
本次设计采用4*4行列式键盘扫描,通过按下不同按键,产生不同的音调,实现用户编曲。
键盘扫描程序流程图如图5.2所示:
图5.2键盘扫描流程图
(2)音频脉冲产生程序流程图
要产生音频脉冲,只要算出某一音频半周期的时间然后利用T0定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相,就可在P1.0引脚上得到此频率的脉冲。
音频脉冲产生程序流程图如图5.3所示:
图5.3音频脉冲产生程序流程图
5.3程序代码
CODE SEGMENT;DZQ.ASM
ASSUMECS:
CODE,DS:
CODE
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
TEMPEQU33H
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVTMOD,#01H
SETBET0
SETBEA
WAIT:
MOVP3,#0FFH
CLRP3.4
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:
CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:
CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:
CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1
NK4:
NOP
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
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,P3
ANLA,#0FH
XRLA,#0FH
JNZDK1A
CLRTR0
NOKEY1:
MOVP3,#0FFH
CLRP3.5
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:
CJNEA,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:
CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:
CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:
NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
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
DK2A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK2A
CLRTR0
NOKEY2:
MOVP3,#0FFH
CLRP3.6
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:
CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10:
CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK3
NK11:
CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:
NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
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
DK3A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK3A
CLRTR0
NOKEY3:
MOVP3,#0FFH
CLRP3.7
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:
CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:
CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:
CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:
NOP
DK4:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
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
DK4A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK4A
CLRTR0
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
MOVTH0,STH0
MOVTL0,STL0
CPLP1.0
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE1:
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030
DW65058,65110,65157,65178
END
6电路仿真
6.1仿真软件
电路仿真中采用Ptotues仿真软件,该软件元器件较为齐全,仿真稳定,功能强大,故采用了此仿真软件。
6.2仿真电路
本次设计中主要采用了Protues仿真软件和Keil软件,在仿真过程中,由于Protues与Keil的连接出现一些问题,导致仿真无法实现。
仿真电路图如图6.1所示:
图6.1电子琴设计仿真电路图
7调试、测试与结果分析
7.1调试
根据电子琴设计原理,可以按照以下步骤完成仿真,但由于Protues与Keil在连接时出现问题,导致仿真无法实现:
(1)根据要求在Proteus中选取元器件,设计电路图;
(2)编写代码,实现软件设计;
(3)使用Kiel编译程序,产生相应的Hex文件;
(4)将Hex文件装入Proteus仿真软件中,实现仿真。
7.2测试
测试时可以按照以下步骤完成,但由于在连接Protues与Keil时出现问题,导致无法仿真,测试无法完成:
(1)根据要求选取元器件。
(2)根据所设计电路图连接电路:
(3)编写代码,实现软件设计。
(4)使用Kiel编译程序,产生相应的Hex文件。
(5)将Hex文件装入DICE中,下载到AT89C51中,运行系统。
7.3结果分析
通过按照设计的电路图连接电路,装载、编译并运行程序,可以实现通过键盘,选择不同的按键组合,实现电子琴的基本功能,用户可自编曲目,但是在应用Protues软件与Keil软件实现仿真,连接不上,无法实现对系统的仿真。
8总结
微型计算机的出现和大量使用将人类社会带入一个新的时代,单片微型计算机(简称单片机)在其中扮演着十分重要的角色。
虽然它没有常见的PC那样大的体积和重量,不会在办公桌或控制台上占据一个显要的位置,但它就像小小的螺丝钉一样,镶嵌在人们工作、生活中需要计算、控制、测量等智能活动的各个角落。
单片机以其体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点,在智能仪表、机电一体化、实时控制、分布式多机系统、家用电器等各个领域得到了广泛应用,对各个行业的技术改造和产品的更新换代起着重要的推动作用,对人们生活质量的提高产生了深刻的影响。
这次课程设计主要通过对AT89C51的基本认识,利用定时器发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
在这次课程设计过程中,不仅将以前学习到的微机原理和单片机相关知识得到了巩固和进一步的提高,而且对汇编语言有了更好的理解和掌握,虽然过程中碰到了很多的问题,但是通过查阅相关书籍、资料,特别是老师的细心教导,不仅给了我思路上的开阔,而且使我认识到自己的不足之处,最终完成了本次课程设计。
通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习过程中,我会不断的完善自我,勤动手,多思考,不断进取,为自己在专业上的深入发展构筑一个好的平台。