如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验二十一电子琴模拟实验一、实验目的1、了解单片机系统发声原理2、进一步熟悉定时器编程方法3、进一步熟悉键盘扫描电路工作原理及编程方法二、实验说明1.利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。2.定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲.本实验中当有键按下,会发出连续脉冲,直到按键松开,才停止发音。发完后继续检测键盘,如果键还按下,继续发音。各音阶标称频率值:音阶1234567频率(HZ)261.1293.7329.6349.2392.0440.0493.9三、实验步骤利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。用P3.2口发出音频脉冲,驱动喇叭。1、用8P数据线连接单片机最小应用系统1模块的P1口到查询式键盘模块KEY1-KEY8口,用二号导线连接单片机最小应用系统1模块INT0(P3.2)口到扬声器模块的输入口。2、用串行数据通信线连接计算机与仿真器,把仿真器插到单片机最小应用系统1模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“TH21_电子琴.ASM”源程序,进行编译,直到编译无误。4、打开模块电源和总电源开关,点击开始调试按钮,点击RUN按钮运行程序。5、实验现象:按查询式键盘的1~7键,扬声器发出高低不同的声音。四、实验流程图及源程序1、源程序:PulseEQU10h;脉冲PulseCNTEQU50h;脉冲计数ToneHighEQU40h;高音调ToneLowEQU41h;低音调ToneEQU42h;音调KeyBufEQU54hSpeakerBITP3.2ORG0000HljmpStartORG000bhLJMPTimer0IntORG0030HTimer0Int:pushPSW;定时中断clrTR0MOVTH0,ToneHighMOVTL0,ToneLowsetbTR0MOVC,PulseMOVSpeaker,CCPLPulsepopPSWretiToneTable:DW64578,64686,64778,64821DW64898,64968,65029TestKey:MOVP1,#0FFHMOVA,P1CPLA;读入键状态retKeyTable:DB0FEH,0FDH,0FBH,0F7HDB0EFH,0DFH,0BFH,07FH;键码定义GETKEY:MOVR6,#10ACALLDELAYMOVA,P1CJNEA,#0FFH,K01;确有键按下LJMPMLOOPK01:MOVR3,#8;8个键MOVR2,#0;键码MOVB,A;暂存键值MOVDPTR,#KeyTableK02:MOVA,R2MOVCA,@A+DPTR;从键值表中取键值CJNEA,B,K04;键值比较MOVA,R2;得键码INCARETK04:INCR2;不相等,到继续访问键值表DJNZR3,K02MOVA,#0FFH;键值不在键值中,即多键同时按下LJMPMLOOPDelay:MOVr7,#0DelayLoop:dJNZr7,DelayLoopdJNZr6,DelayretStart:MOVsp,#70hMOVTMOD,#01;TimerMOVIE,#82h;EA=1,IT0=1MOVTone,#0MLoop:callTestKeyjzMLoopcallGetKeyMOVb,ajzMLoop;=0,<1anla,#8JNZMLoop;>8decbMOVa,brla;a=a*2MOVb,aMOVdptr,#ToneTableMOVca,@a+dptrMOVToneHigh,aMOVTH0,aMOVa,bincaMOVca,@a+dptrMOVToneLow,aMOVTL0,aSETBTR0MOVP1,#0FFHWAIT:MOVA,P1CJNEA,#0FFH,WAITMOVR6,#10ACALLDELAYCLRTR0LJMPMLOOPEND2.流程图否主程序框图否是是是否开始读入键值用键值查表得到音频相关数据启动定时开始发声1<键值<7按键已松开检测键输入按音频数据设置定时器关闭定时停止发声定时中断停止计时输出音频脉冲电平(高或低)音频脉冲电平反转保护现场恢复现场中断返回