模拟电子琴设计仿真.docx
《模拟电子琴设计仿真.docx》由会员分享,可在线阅读,更多相关《模拟电子琴设计仿真.docx(12页珍藏版)》请在冰豆网上搜索。
模拟电子琴设计仿真
摘要
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。
本次设计的主要内容是用AT89S51单片机为核心控制元件,利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,可构成我们想要的音乐,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
本系统运行稳定,硬件电路简单,软件功能完善,控制系统可靠,所开发的程序通过调试运行、仿真验证,实现了设计目标,具有一定的实用和参考价值。
关键词:
单片机、按键、扬声器、音阶
目录
1课题描述1
2问题分析和任务定义2
3硬件电路设计3
4程序设计4
4.1程序流程图4
4.2程序代码5
5电路仿真与分析10
5.1仿真软件10
5.2仿真过程10
6调试、测试与结果分析11
6.1调试与测试11
6.2结果分析11
7总结12
参考文献13
1课题描述
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们所想要的音乐了,对于单片机,可以利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
本次设计主要应用AT89C51单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴,通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现用户自编歌曲。
开发环境:
微机WINdowsXP系统VisuALBaSIc6.0环境
2问题分析和任务定义
本次设计主要通过对AT89C51的基本认识,利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调,利用不同的频率的组合,从而设计成一个与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器的简易电子琴。
在操作过程中应满足以下要求:
(1)电子琴设有16个按键,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴;
(2)利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,可以发出不同的音调;
(3)使数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调,PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。
(4)通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现用户自编歌曲;
该系统在使用过程中,应该实现以下基本功能:
(1)按要求连接电路图,当按下数字键1、2、3、4、5、6、7时可以发出相应的音调;
(2)通过不同的数字键组合,可以自编曲目;
(3)利用protues仿真软件,装载程序,实现对电子琴的仿真。
3硬件电路设计
电子琴设计硬件电路图,如图3.1所示:
图3.1电子琴设计硬件电路图
4程序设计
4.1程序流程图
(1)主程序流程图
本次课程设计实现了一个以AT89C51单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过按键,实现用户自编曲目的简易电子琴。
主程序流程图如图4.1所示:
图4.1电子琴设计主程序流程图
(2)音频脉冲产生程序流程图
要产生音频脉冲,只要算出某一音频半周期的时间然后利用T0定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相,就可在P1.0引脚上得到此频率的脉冲。
音频脉冲产生程序流程图如图4.2所示:
图4.2音频脉冲产生程序流程图
4.2程序代码
CODE SEGMENT;DZQ.ASM
ASSUMECS:
CODE,DS:
CODE
CONTROL EQU43h
COUNT0 EQU40h
COUNT1 EQU41h
COUNT2 EQU42h
IOCONPT EQU0FF2BH
IOBPT EQU0FF29H
IOAPT EQU0FF28H
PA EQU0FF21H;字位口
PB EQU0FF22H;字形口
PC EQU0FF23H;键入口
ORG18F0H
START:
JMPSTART0
BUF DB?
?
?
?
?
?
KZ DB?
LTIME DB?
LKEY DB?
ZP DW?
DATA1:
DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h
DB86h,8eh,0FFH,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F1H
DATA3:
DW2273,2024,1805,1704
DW1517,1353,1205,1136
START0:
MOVAX,CS
MOVDS,AX
CALLBUF1
MOVAL,88H
MOVDX,IOCONPT
OUTDX,AL
MOVDX,IOBPT
MOVAL,00
OUTDX,AL
MOVZP,OFFSETBUF
REDIKEY:
CALLDISPKEY
CMPKZ,09h
JNCREDIKEY
CMPKZ,01h
JCREDIKEY
MOVBX,ZP
MOVAL,KZ
MOV[BX],AL
CMPBX,OFFSETBUF+5
JZZP1
INCBX
MOVZP,BX
JMPOUTTONE
ZP1:
MOVZP,OFFSETBUF
OUTTONE:
MOVDX,IOBPT
MOVAL,0FFH
OUTDX,AL
MOVAL,KZ
MOVAH,00h
DECAX
SHLAX,1
MOVBX,OFFSETDATA3
ADDBX,AX
MOVAX,[BX]
CALLT8253
MOVCX,20h
CON1:
PUSHCX
CALLDISP
POPCX
LOOPCON1
MOVDX,IOBPT
MOVAL,00
OUTDX,AL
JMPREDIKEY
T8253:
PUSHAX
MOVAL,76h;计数器1,16位二进制,方式3。
MOVDX,CONTROL
OUTDX,AL
POPAX
MOVDX,COUNT1
OUTDX,AL
MOVAL,AH
OUTDX,AL
RET
;-------------------------
DISPKEY:
CALLDISP
CALLKEY
MOVAH,AL;NEWKEY
MOVBL,LTIME;LTIME
MOVBH,lKEY;lKEY
MOVAL,01h
MOVDX,0FF21H
OUTDX,AL
CMPAH,BH
MOVBH,AH;BH=NEWKEY
MOVAH,BL;AL=TIME
JZDISK4
MOVBL,88h
MOVAH,88h
DISK4:
DECAH
CMPAH,82h
JZDISK6
CMPAH,0eh
JZDISK6
CMPAH,00h
JZDISK4