电子音调发生器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1单片机课程设计报告电子音调发生器21课程设计总体目标1.1总体结构图1总体结构1.2设计要求利用JD51开发板上的按键S1~S4和蜂鸣器设计电子音调发生器,要求:(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。(2)编写2支歌曲,并可进行选择播放。1.3设计目的(1)了解计算机发声原理。(2)熟悉定时器和键盘扫描电路的工作原理及编程方法。1.4设计原理(1)音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在JD513单片机上,产生方波的I/O脚选用P2.4,通过跳线选择器将单片机的P2.4与蜂鸣器的驱动电路相连。这样P2.4输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。每个音节相应的定时器初值X可按下法计算:x)-(2*fosc)/12()f/1(*2/116)((1)即)f24/fosc(2x16(2)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。表一曲调值DELAY调4/4125ms调3/4187ms调2/4250ms表二(2)音乐程序查表原理:乐谱格式:每字节的高字节为音符代码,低字节为节拍代码音符代码123456789ABCDEF0音节.5.6.712345671`2`3`4`5`休止节拍代码1234568ACF节拍1/42/43/411(1/4)1(1/2)22(1/2)33(3/4)(3)定时器的使用及时间延迟,首先对定时器进行初始化音调低音频率(Hz)低音计数初值X(HEX)中音频率(Hz)中音计数初值X(HEX)高音频率(Hz)高音计数初值X(HEX)1131F242262F921522FC8F2147F3C1294F9E1587FCEF3165F517330FA8C659FD454175F5B7349FAD8700FD6E5196F6D1392FB68784FDB26220F7D1440FBE9880FDEA7247F8B6494FC5B988FE2Ei//523FC8F//4图2门控位: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只能工作为定时方式。图3TR0/TR1:启动计数。为1启动计数;为0停止计数。TF0/TF1:计数溢出。当加”1”计数结束时为1。本实验采用定时器T0,工作在方式1(16位计数),无自动装入功能。2硬件设计2.1总体框图图4硬件图52.2蜂鸣电路模块鸣器驱动电路和89C51组成。选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100MA驱动电流。当89C51输出为低电平时蜂鸣器产生蜂鸣音,89C51输出为高电平时,蜂鸣器不发声。2.3硬件电路图5电路图3软件设计3.1软件设计流程及描述根据要实现的功能,流程图如下:熟悉定时器和键盘扫描电路的工作原理及编程方法。6图6流程图图73.2软件设计思路电子音调发生器主要的工作是将按键的信息读取,然后根据按键的数字,用计数器输出相对应的频率,实现电子音调发生器的音调。程序主要为5部分,键盘扫描、中断计时、数码显示、音乐播放、主程序,他们分别执行不同的功能。3.3各部分功能介绍(1)键盘键值读取程序键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主要有两种方法:行反转法和行扫描法。因为键盘为机械开关,容易引入抖动。为了消除抖动干扰,在程序中要加入消除抖动的部分。(2)中断计时中断部分,中断定时器1主要负责输出不同频率的方波,产生声音,中断定时器1主要是计时按键时间及按键间隔时间的功能,在播放音乐的时候,还担任着播放音乐的节拍的任务。(3)音乐播放音乐播放部分主要是播放音乐,实现按键重播和播放程序里面的音乐的功能。(4)主程序主程序主要是随时发出按键的声音功能,并且通过不同P口的扫描,判断是否是播放按键声音还是播放音乐,还是继续发出按键声音。73.4实验程序/*SB11音SB22音SB33音SB44音SB1SB25音SB2SB36音SB3SB47音SB1SB4i音SB1SB3第一首歌SB2SB4第二首歌*/ORG0000HLJMPKEYP0KEYP0:MOVR0,#00HCLRTR0SETBP2.4;关蜂鸣器SETBP2.3;关数码管WU:MOVR0,P3;扫描键盘输入CJNER0,#0FFH,KEYPO1;有输入时跳转JMPWUKEYPO1:CJNER0,#0FBH,KEYPO2;输入1音,非1音跳转SETBP2.4;蜂鸣器置于高电平MOVR3,#200MAIN01:MOVTMOD,#01H;初始化,工作方式1MOVTL0,#21H;写入计数初值MOVTH0,#0F9HSETBTR0;启动计数WAIT1:JNBTF0,WAIT1CLRTF0CPLP2.4;蜂鸣器响CLRP2.3;数码管显示1MOVA,#11111001BMOVP0,ADJNZR3,MAIN01LJMPKEYP0;返回程序KEYP0KEYPO2:CJNER0,#0F7H,KEYPO3;输入2音,非2音跳转SETBP2.4;蜂鸣器置于高电平MOVR3,#200MAIN02:MOVTMOD,#01HMOVTL0,#0E1H;写入计数初值MOVTH0,#0F9HSETBTR0WAIT2:JNBTF0,WAIT2CLRTF0CPLP2.4;蜂鸣器响CLRP2.3;数码管显示28MOVA,#10100100BMOVP0,ADJNZR3,MAIN02LJMPKEYP0KEYPO3:CJNER0,#0EFH,KEYPO4;输入3音,非3音跳转SETBP2.4;蜂鸣器置于高电平MOVR3,#200MAIN03:MOVTMOD,#01HMOVTL0,#08CHMOVTH0,#0FAHSETBTR0WAIT3:JNBTF0,WAIT3CLRTF0CPLP2.4CLRP2.3MOVA,#10110000BMOVP0,ADJNZR3,MAIN03LJMPKEYP0KEYPO4:CJNER0,#0DFH,KEYPO5;输入4音,非4音跳转SETBP2.4MOVR3,#200MAIN04:MOVTMOD,#01HMOVTL0,#0D8HMOVTH0,#0FAHSETBTR0WAIT4:JNBTF0,WAIT4CLRTF0CPLP2.4CLRP2.3MOVA,#10011001BMOVP0,ADJNZR3,MAIN04LJMPKEYP0KEYPO5:CJNER0,#0F3H,KEYPO6;输入5音,非5音跳转SETBP2.4MOVR3,#200MAIN05:MOVTMOD,#01H9MOVTL0,#068HMOVTH0,#0FBHSETBTR0WAIT5:JNBTF0,WAIT5CLRTF0CPLP2.4CLRP2.3MOVA,#10010010BMOVP0,ADJNZR3,MAIN05LJMPKEYP0KEYPO6:CJNER0,#0E7H,KEYPO7;输入6音,非6音跳转SETBP2.4MOVR3,#200MAIN06:MOVTMOD,#01HMOVTL0,#0E9HMOVTH0,#0FBHSETBTR0WAIT6:JNBTF0,WAIT6CLRTF0CPLP2.4CLRP2.3MOVA,#10000010BMOVP0,ADJNZR3,MAIN06LJMPKEYP0KEYPO7:CJNER0,#0CFH,KEYPO8;输入7音,非7音跳转SETBP2.4MOVR3,#200MAIN07:MOVTMOD,#01HMOVTL0,#05BHMOVTH0,#0FCHSETBTR0WAIT7:JNBTF0,WAIT7CLRTF0CPLP2.4CLRP2.3MOVA,#11111000BMOVP0,ADJNZR3,MAIN0710LJMPKEYP0KEYPO8:CJNER0,#0DBH,KEYPO9;输入i音,非i音跳转SETBP2.4MOVR3,#200MAIN08:MOVTMOD,#01HMOVTL0,#08FHMOVTH0,#0FCHSETBTR0WAIT8:JNBTF0,WAIT8CLRTF0CPLP2.4CLRP2.3MOVA,#10000000BMOVP0,ADJNZR3,MAIN08LJMPKEYP0KEYPO9:CJNER0,#0EBH,KEYPO10;跳转到第一首歌程序LJMPMUSTART1KEYPO10:CJNER0,#0D7H,JIELI;跳转到第二首歌程序LJMPMUSTART2JIELI:JMPKEYP0;返回主程序MUSTART1:;歌曲1的播放程序MOVR0,#00H;节拍表指针置零MOVR1,#00H;音符表指针置零RTAB:MOVA,R0MOVDPTR,#RYTHMOVCA,@A+DPTR;查表法将一个节拍数据取出放R2计数器中MOVR2,ATTAB:MOVA,R1MOVDPTR,#TONEMOVCA,@A+DPTRMOVR3,A;取出音符表高8位INCR1;指针加1MOVA,R1MOVDPTR,#TONEMOVCA,@A+DPTRMOVR4,A;取出低8位SETBP2.4;输出相应音调的方波LOOP:MOVR5,#3BHMAIN:MOVTMOD,#01H11MOVTL0,R4MOVTH0,R3SETBTR0WAIT:JNBTF0,WAITCLRTF0CPLP2.4MAYA:JBP3.2,MAYB;判断P3.2口是否有为1JBP3.4,MAYB;判断P3.4口是否有为1LJMPRA;P3.4口为0则跳转到程序RAMAYB:JBP3.3,JIELI;判断P3.3口是否有为1JBP3.5,JIELI;判断P3.5口是否有为1LJMPMUSTART2;P3.5口为0则放第二首歌RA:DJNZR5,MAIN;无打断则继续放第一首歌DJNZR2,LOOPINCR0;两个表的指针都加1INCR1CJNER1,#88,RTAB;判断是否取完LJMPKEYP0TONE:DB0FBH,68H,0FAH,8CH,0FBH,68H,0F9H,0E1H,0FAH,8CH,0F9H,0E1H,0F9H,21HDB0F9H,21H,0F8H,0B6H,0F7H,0D1H,0F8H,0B6H,0F9H,21H,0F8H,0B6H,0F9H,21H,0F9H,0E1H,0FAH,8CHDB0FBH,68H,0FAH,8CH,0FBH,68H,0F9H,0E1H,0FAH,8CH,0F9H,0E1H,0F9H,21HDB0F9H,21H,0F8H,0B6H,0F7H,0D1H,0F8H,0B6H,0F9H,21H,0F8H,0B6H,0F9H,21H,0F9H,0E1H,0F9H,21HDB0FBH,68H,0FBH,0E9H,0FCH,5BH,0FCH,8FH,0FCH,5BH,0FCH,8FH,0FCH,0EFH,0FCH,8FH,0FCH,0EFH,0FDH,45H,0FBH,68HDB0F9H,21H,0F9H,0E1H,0FAH,8CH,0FAH,0D8H,

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功