您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 北京交通大学--单片机课程报告——电子音调发声器
单片机课程设计1单片机课程设计实验课程单片机原理与应用实验名称电子音调发声器姓名学号指导教师完成时间2011年12月单片机课程设计2一、实验目的1.了解计算机控制蜂鸣器发声原理(模拟电子琴)。2.熟悉定时器和键盘扫描电路的工作原理及编程方法。二、功能说明1.基本功能:拨动不同的开关产生不同的音调即依次波动K0~K7,发出1,2,3,4,5,6,7,i八个音调,播放两首乐曲2.扩展功能:实现不同曲子之间的打断播放功能;实现单个拨动开关时,数码管同步显示正在发音的音符的数码。三、实验原理及设计思路1.实验原理1.1乐曲的音调与节拍①音调由不同频率的方波产生,音调与频率的关系如下表所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。②音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。音调1234567I频率262294330349392440494523XF921F9E1FA8CFAD8FB68FBE9FC5BFC8F注:频率以HZ为单位单片机课程设计3表1音调和发音频率及定时器初值X的对应每个音节相应的定时器初值x可按下法计算。161112()()()(2)2xffosc162()24foscxf其中,f是音调频率,晶振fosc=11.0592Mhz。1.2定时器的使用及时间延迟首先对定时器进行初始化图1TMOD控制寄存器各控制位说明如下:GATE:门控位GATE=0,TR=1启动计数(软件启动);GATE=1,TR=1且INT=1启动计数(硬件启动)。C/T:定时或计数方式选择位。C/T=0,定时工作方式;C/T=1,计数工作方式。M1M0:工作方式选择位。M1M0=00,方式0:13位计数(TL0-4、TH0-7)M1M0=01,方式1:16位计数(TL0-7、TH0-7)M1M0=10,方式2:8位计数,有自动装入功能。M1M0=11,方式3:T0分为两个8位计数器,TL0可工作为定时或计数方式,TH0只能工作为定时方式。单片机课程设计4图2SCON控制寄存器SCON各控制位说明如下:TR0/TR1:启动计数。1启动计数;为0停止计数。TF0/TF1:计数溢出。计数结束时为1。曲调值DELAY调4/4125ms调3/4187ms调2/4250ms表2各节拍延时时间对应关系1.3蜂鸣器电路蜂鸣器有交流和直流两种。直流蜂鸣器驱动简单,一旦在引脚上加入直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的;而交流蜂鸣器在这方面则显得较灵活,输入声音信号的频率和音长是可控的,因此输出的声响将更逼真、更悦耳。本实验仪有一个交流蜂鸣器,由于一般I/O口的驱动能力有限,因此不用它直接驱动蜂鸣器,它与P87C52X2的连接方式如下图所示。Buzzer通过一个跳线与P1.7相连,P1.7输出不同频率的方波信号,蜂鸣器就会发出不同的声音。如果控制输出信号的频率和音长,蜂鸣器则会发出悦耳的音乐。图3(交流)蜂鸣器驱动电路单片机课程设计52.设计思路可将功能实现分如下模块:四、实验软件实现流程图五、实验源程序开始顺序读取八个开关状态为高电平为低电平判断与其一起控制乐曲播放的开关是否为低电平否,则发判断为低电平的开关对应音调发音是,则相应的音乐播放程序执行音乐播放两位开关为有状态变化则停止播放有其他乐曲打断播放相应歌曲MCU控制模块开关控制模块蜂鸣器发生模块电源模块数码管显示模块单片机课程设计6五.实验源程序ORG0000HKEYPRO:JBP1.2,GO1;P1.2口为1时跳转LJMPGOMUS1;P1.2口为0时判断P1.4是否也为0,P1.4为0时长转移GO0:LJMPKEYP01;P1.4口不为0,P1.2口为0时发1音GO1:JBP1.4,GO2LJMPGOMUS6G10:LJMPKEYP02;检查P1.2不为0后,P1.4口为0发“2”音GO2:JBP1.5,GO3LJMPGOMUS3GO21:LJMPKEYP03GO3:JBP1.6,GO4LJMPGOMUS7GO31:LJMPKEYP04GO4:JBP3.2,GO5LJMPGOMUS4GO41:LJMPKEYP05GO5:JBP3.3,GO6LJMPGOMUS8GO51:LJMPKEYP06GO6:JBP3.4,GO8LJMPGOMUS2GO7:LJMPKEYP07;p3.4口为0发“7”音GO8:JBP3.5,KEYPRO;都为1则重新扫描LJMPGOMUS5;跳到再次判定k6GO9:LJMPKEYP08;判定k6不为0,则p3.5口为0发“I”音GOMUS1:JBP1.4,GO0LJMPMUSTART1;k0,k1同为0播歌1,k1不为0,返回1.2发“1”音GOMUS2:JBP3.5,GO7LJMPMUSTART2;k6,k7同为0播歌2,k7不为0,返回3.4发“7”音GOMUS3:JBP1.6,GO21LJMPMUSTART3GOMUS4:JBP3.3,GO41LJMPMUSTART4GOMUS5:JBP3.4,GO9;k7为0,再检查k6是否为0LJMPMUSTART2GOMUS6:JBP1.2,G10LJMPMUSTART1;k1为0,再检查k0是否为0单片机课程设计7GOMUS7:JBP1.5,GO31LJMPMUSTART3GOMUS8:JBP3.2,GO51LJMPMUSTART4KEYP01:SETBP1.7;音调1的方波发生MOVR3,#100;设循环初值,使开关在0时播放一段时间MAIN01:MOVTMOD,#01H;设置定时器t0工作方式1MOVTL0,#21HMOVTH0,#0F9H;音调1对应初值f921hSETBTR0;启动t0工作WAIT1:JNBTF0,WAIT1;定时未到,循环等待CLRTF0;定时到,清tf0CPLP1.7;由p1.7输出,信号取反DJNZR3,MAIN01MOVA,#0F9HACALLSHOWLJMPKEYPROKEYP02:SETBP1.7;音调2的方波发生MOVR3,#100MAIN02:MOVTMOD,#01HMOVTL0,#0E1HMOVTH0,#0F9HSETBTR0WAIT2:JNBTF0,WAIT2CLRTF0CPLP1.7DJNZR3,MAIN02MOVA,#0A4HACALLSHOWLJMPKEYPROKEYP03:SETBP1.7;音调3的方波发生MOVR3,#100MAIN03:MOVTMOD,#01HMOVTL0,#8CHMOVTH0,#0FAHSETBTR0WAIT3:JNBTF0,WAIT3CLRTF0CPLP1.7DJNZR3,MAIN03单片机课程设计8MOVA,#0B0HACALLSHOWLJMPKEYPROKEYP04:SETBP1.7;音调4的方波发生MOVR3,#100SETBP1.6MAIN04:MOVTMOD,#01HMOVTL0,#0D8HMOVTH0,#0FAHSETBTR0WAIT4:JNBTF0,WAIT4CLRTF0CPLP1.7DJNZR3,MAIN04MOVA,#99HACALLSHOWLJMPKEYPROKEYP05:SETBP1.7;音调5的方波发生MOVR3,#100MAIN05:MOVTMOD,#01HMOVTL0,#68HMOVTH0,#0FBHSETBTR0WAIT5:JNBTF0,WAIT5CLRTF0CPLP1.7DJNZR3,MAIN05MOVA,#92HACALLSHOWLJMPKEYPROKEYP06:SETBP1.7;音调6的方波发生MOVR3,#100MAIN06:MOVTMOD,#01HMOVTL0,#0E9HMOVTH0,#0FBHSETBTR0WAIT6:JNBTF0,WAIT6CLRTF0CPLP1.7DJNZR3,MAIN06单片机课程设计9ACALLSHOWMOVA,#82HLJMPKEYPROKEYP07:SETBP1.7;音调7的方波发生MOVR3,#100MAIN07:MOVTMOD,#01HMOVTL0,#5BHMOVTH0,#0FCHSETBTR0WAIT7:JNBTF0,WAIT7CLRTF0CPLP1.7DJNZR3,MAIN07MOVA,#0F8HACALLSHOWLJMPKEYPROKEYP08:SETBP1.7;音调I的方波发生MOVR3,#100MAIN08:MOVTMOD,#01HMOVTL0,#8FHMOVTH0,#0FCHSETBTR0WAIT8:JNBTF0,WAIT8CLRTF0CPLP1.7DJNZR3,MAIN08MOVA,#80HACALLSHOWLJMPKEYPROJIELI:JMPKEYPROMUSTART1:;歌曲1的播放程序MOVR0,#00H;节拍表指针置零MOVR1,#00H;音符表指针置零RTAB:MOVA,R0MOVDPTR,#RYTHMOVCA,@A+DPTRMOVR2,A;查表法将一个节拍数据取出放R2计数器中TTAB:MOVA,R1MOVDPTR,#TONE单片机课程设计10MOVCA,@A+DPTRMOVR3,A;取出音符表高8位INCR1;指针加1MOVA,R1MOVDPTR,#TONEMOVCA,@A+DPTRMOVR4,A;取出低8位SETBP1.7;输出相应音调的方波LOOP:MOVR5,#3BHMAIN:MOVTMOD,#01HMOVTL0,R4MOVTH0,R3SETBTR0WAIT:JNBTF0,WAITCLRTF0CPLP1.7MAYA:JBP1.2,MAYB;判断1.2,1.4口是否有为1JBP1.4,MAYBLJMPRAMAYB:JBP3.4,JIELI;判断3.4,3.5口是否有为1JBP3.5,JIELILJMPMUSTART2;3.4,3.5口皆为0则放第二首歌RA:MOVA,#86H;显示EACALLSHOWDJNZR5,MAIN;无打断则继续放第一首歌DJNZR2,LOOPINCR0INCR1;两个表的指针都加1CJNER1,#166,RTAB;判断是否取完LJMPKEYPRO;《欢乐颂》(慢速)音符表TONE:;33455432DB0FAH,8CH,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FAH,0D8H,0FAH,8CH,0F9H,0E1H;112332.2单片机课程设计11DB0F9H,21H,0F9H,21H,0F9H,0E1H,0FAH,8CH,0FAH,8CH,0F9H,0E1H,0F9H,0E1H;33455432DB0FAH,8CH,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FAH,0D8H,0FAH,8CH,0F9H,0E1H;112321.1DB0F9H,21H,0F9H,21H,0F9H,0E1H,0FAH,8CH,0F9H,0E1H,0F9H,021H,0F9H,021H;223123431DB0F9H,0E1H,0F9H,0E1H,0FAH,8CH,0F9H,21H,0F9H,0E1H,0FAH,8CH,0FAH,0D8H,0FAH,8CH,0F9H,21H;23432125DB0F9H,0E1H,0FAH,8CH,0FAH,0D8H,0FAH,8CH,0F9H,0E1H,0F9H,21H,0F9H,0E1H,0F6H,0D4H;33455432DB0FAH,8CH,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FAH,0D8H,0
本文标题:北京交通大学--单片机课程报告——电子音调发声器
链接地址:https://www.777doc.com/doc-6280653 .html