片单机课程设计电子音调发生器_第1页
片单机课程设计电子音调发生器_第2页
片单机课程设计电子音调发生器_第3页
片单机课程设计电子音调发生器_第4页
片单机课程设计电子音调发生器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-16-单片机课程设计设计报告电子音调发生器2016年4月29日目录1课程设计总体目标 -2-1.1课题的意义 -2-1.2系统的主要功能 -2-1.3本人所做的工作 -2-2实验原理及设计思路 -3-2.1乐曲的音调与节拍 -3-2.2红外检测原理 -3-3硬件电路设计及描述 -4-3.1硬件连接图 -4-3.2单片机系统 -5-3.3数码管显示电路 -6-3.4蜂鸣器电路 -6-4软件设计流程及描述 -7-4.1蜂鸣器发单音 -7-4.2蜂鸣器唱歌 -7-4.3数码管动态显示 -7-4.4程序框图 -8-4.5源程序代码及注释 -9-5实验结果 -26-1总体设计1.1课题的意义通过这个实际的课题,熟悉51单片机的开发环境,熟悉JD-51的硬件电路图,并能通过三种调试模式来调试程序,为日后进行一些基于单片机的系统开发打下基础;掌握使用常用的汇编指令进行51单片机的程序设计,建立严谨的逻辑思维来编写程序,学会画程序框图来帮助编程。通过使用蜂鸣器来产生相应音调的声音,进一步巩固课上学到的定时器初始化、赋初值、通过查询方式来产生一定频率方波的编程方法;掌握使数码管扫描显示数字的方法,并同时让LED灯亮或灭,学会如何让蜂鸣器发出不同频率的声音;了解NEC协议下的红外编码格式,能够使用单片机来解码收到的红外信号,并读取信号中相应的信息。1.2系统的主要功能电子音调发生器(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。(2)编写2支歌曲,并可进行选择播放。1.3本人所做的工作通过学习课程平台上给出的红外和电子音调发生器这两个程序,将电子音调发送器中关于按键扫描的部分换为对接收到的32位红外信号数据中数据码的反码进行按键判断跳转相应歌曲或音调子程序。2实验原理及设计思路2.1乐曲的音调与节拍①音调由不同频率的方波产生,音调与频率的关系如下表所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在JD-51单片机上,产生方波的I/O脚选用P2.4,P2.4口与蜂鸣器相连,这样通过P2.4口输出不同频率的方波就能控制蜂鸣器发出不同音调的声音。②音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。音调1234567I频率/Hz262294330349392440494523XF921F9E1FA8CFAD8FB68FBE9FC5BFC8F表1音调和发音频率及定时器初值X的对应在定时器工作在工作方式1时每个音节相应的定时器初值x可按下法计算(1/2)×(1/f)=(12/fosc)×(216-x)x=216-(fosc/24f)(1)其中,f是音调频率,JD-51单片机的晶振fosc=11.0592Mhz。曲调值DELAY调4/4125ms调3/4187ms调2/4250ms表2各节拍延时时间对应关系3硬件电路设计及描述3.1硬件连接图系统的硬件连接图包括,晶振电路,复位电路,数码管显示电路,红外发送和接收电路,蜂鸣器电路,硬件连接如下图所示:图4红外高级电子琴硬件连接图3.2单片机系统ATMEL公司生产的AT89S52单片机是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。具体连接如下:图5单片机系统的时钟电路图6单片机系统的复位电路3.3数码管显示电路显示电路采用4个共阳极数码管,P0口作为数码管的输入,P2.0、P2.1、P2.2、P2.3分别控制四个数码管的亮与不亮,P0口控制数码管亮的是数字几。图7数码管连接图3.4蜂鸣器电路我们用的蜂鸣器是直流蜂鸣器,驱动简单,一旦在引脚上加入直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的,它与单片机的连接方式如下图所示。Buzzer与P2.4相连,P2.4输出不同频率的方波信号,蜂鸣器就会发出不同的声音。如果控制输出信号的频率和音长,蜂鸣器则会发出音乐。图8蜂鸣器电路图4软件设计流程及描述4.1蜂鸣器发单音根据不同音调的频率值算出该给定时器赋的初值,利用定时溢出后P2.4口电平的翻转来产生和音调频率相同的方波,虽然不是正弦波,听起来有点不自然,但也能听出1234567i这8个音调。4.2蜂鸣器播放歌曲蜂鸣器播放歌曲是基于节拍表和音符表的基础上的,其基本原理与发出单个频率的声音类似,只不过确定了单个频率发声的时长即节拍长,和不同频率发声的顺序,可以通过查表的方式来使定时器产生不同频率的方波,加入设定好的节拍,就相当于延时,便可以听到音乐。4.3数码管动态显示所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调时间参数,可以既保证亮度,又保证显示。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的资源,而且功耗更低。开始4.4程序框图开始将开关状态送将开关状态送P3.2,P3.3,P3.4,P3.1,P3.6查询键盘按键状态查询键盘按键状态跳转到相应子程序跳转到相应子程序令令P3.5口发出相应频率的方波图9电子音调发生器流程图4.5源程序代码及注释/*==================================电子音调发生器==================================******************************程序功能说明***************************通过s1,s2,s3,s4四个按键组合,根据按键组合值让蜂鸣器播放1234567i相应的音调,以及两首歌********************************************************************/ORG0000H LJMPKEYP0KEYP0:MOVR0,#00H;CLRTR0;SETBP2.4 ;关蜂鸣器CLRP2.0CLRP2.1CLRP2.2CLRP2.3 ;关用于表示音调的数码管SETBP2.0 ;关用于表示模式的数码管WU:MOVR0,P3 ;扫描键盘输入CJNER0,#0FFH,KEYPO1 ;有输入时跳转JMPKEYP0KEYPO1:CJNER0,#0FBH,KEYPO2;SETBP2.4;蜂鸣器置于高电平MOVR3,#200MAIN01:MOVTMOD,#01H;初始化,工作方式1MOVTL0,#21H;写入计数初值MOVTH0,#0F9HSETBTR0;启动计数 WAIT1:JNBTF0,WAIT1CLRTF0CPLP2.4;蜂鸣器响 CLRP2.3;数码管显示1 MOVA,#11111001B MOVP0,ADJNZR3,MAIN01 LJMPKEYP0;返回程序KEYP0 KEYPO2:CJNER0,#0F7H,KEYPO3;SETBP2.4;蜂鸣器置于高电平 MOVR3,#200MAIN02:MOVTMOD,#01HMOVTL0,#0E1H;写入计数初值MOVTH0,#0F9HSETBTR0WAIT2:JNBTF0,WAIT2CLRTF0CPLP2.4;蜂鸣器响 CLRP2.3; MOVA,#10100100B MOVP0,ADJNZR3,MAIN02 LJMPKEYP0KEYPO3:CJNER0,#0EFH,KEYPO4;SETBP2.4;蜂鸣器置于高电平 MOVR3,#200MAIN03:MOVTMOD,#01HMOVTL0,#08CHMOVTH0,#0FAHSETBTR0WAIT3:JNBTF0,WAIT3CLRTF0CPLP2.4 CLRP2.3 MOVA,#10110000B MOVP0,ADJNZR3,MAIN03 LJMPKEYP0KEYPO4:CJNER0,#0DFH,KEYPO5;SETBP2.4 MOVR3,#200MAIN04:MOVTMOD,#01HMOVTL0,#0D8HMOVTH0,#0FAHSETBTR0WAIT4:JNBTF0,WAIT4CLRTF0CPLP2.4 CLRP2.3 MOVA,#10011001B MOVP0,ADJNZR3,MAIN04 LJMPKEYP0KEYPO5: CJNER0,#0F3H,KEYPO6;SETBP2.4 MOVR3,#200MAIN05:MOVTMOD,#01HMOVTL0,#068HMOVTH0,#0FBHSETBTR0WAIT5:JNBTF0,WAIT5CLRTF0CPLP2.4 CLRP2.3 MOVA,#10010010B MOVP0,ADJNZR3,MAIN05 LJMPKEYP0KEYPO6:CJNER0,#0E7H,KEYPO7;SETBP2.4 MOVR3,#200MAIN06:MOVTMOD,#01HMOVTL0,#0E9HMOVTH0,#0FBHSETBTR0WAIT6:JNBTF0,WAIT6CLRTF0CPLP2.4 CLRP2.3 MOVA,#10000010B MOVP0,ADJNZR3,MAIN06 LJMPKEYP0KEYPO7:CJNER0,#0CFH,KEYPO8;SETBP2.4 MOVR3,#200MAIN07:MOVTMOD,#01HMOVTL0,#05BHMOVTH0,#0FCHSETBTR0WAIT7:JNBTF0,WAIT7CLRTF0CPLP2.4 CLRP2.3 MOVA,#11111000B MOVP0,ADJNZR3,MAIN07 LJMPKEYP0KEYPO8:CJNER0,#0DBH,KEYPO9;SETBP2.4 MOVR3,#200MAIN08:MOVTMOD,#01HMOVTL0,#08FHMOVTH0,#0FCHSETBTR0WAIT8:JNBTF0,WAIT8CLRTF0CPLP2.4 CLRP2.3 MOVA,#10000000B MOVP0,ADJNZR3,MAIN08 LJMPKEYP0KEYPO9:CJNER0,#0EBH,KEYPO10;跳转到第一首歌程序LJMPMUSTART1KEYPO10:CJNER0,#0D7H,JIELI;跳转到第二首歌程序LJMPMUSTART2JIELI:JMPKEYP0;返回主程序MUSTART1:;播放第一首歌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,#01HMOVTL0,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,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHRYTH:DB04,04,04,04,04,04,04,04,04,04DB04,05,04,04,04,04,04,04,04,04DB04,04,04,06,04,04,04,07,04,04DB04,04,04,06,04,04,04,07,04,04DB04,04,04,04MUSTART2: MOVR0,#00HMOVR1,#00HRTAB2:MOVA,R1MOVDPTR,#TABLE1MOVCA,@A+DPTRMOVR2,ATTAB2:MOVA,R1MOVDPTR,#TONE2MOVCA,@A+DPTRMOVR3,AINCR1 MOVA,R1 MOVDPTR,#TONE2 MOVCA,@A+DPTR MOVR4,ASETBP2.4LOOP2:MOVR5,#9BHMAIN2:MOVTMOD,#01HMOVTL0,R4MOVTH0,R3SETBTR0WAITR:JNBTF0,WAITRCLRTF0CPLP2.4MAYA1:JBP3.3,MAYB1JBP3.5,MAYB1LJMPRBMAYB1:JBP3.2,BACKJBP3.4,BACKLJMPMUSTART1BACK:LJMPJIELIRB:DJNZR5,MAIN2DJNZR2,LOOP2INCR0INCR1CJNER1,#64,RTAB2LJMPKEYP0TONE2:DB0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHTABLE1:DB04,04,04,04,04,04,04,04,04,04DB04,05,04,04,04,04,04,04,04,04DB04,04,04,06,04,04,04,07,04,04DB04,04,04,06,04,04,04,07,04,04DB04,04,04,04END【电子音调发生的部分C语言程序】/******键盘输入函数******/ucharkeyscan(ucharkey){if(K1==1&&K2==1&&K3==1&&K4==1) { //初始化 delay(20); if(K1==1&&K2==1&&K3==1&&K4==1) { key=0; } } if(K1==0&&K2==1&&K3==1&&K4==1) { //1音,SB1按下 delay(20); if(K1==0&&K2==1&&K3==1&&K4==1) { key=1; } } if(K1==1&&K2==0&&K3==1&&K4==1){ //2音,SB2按下 delay(20); if(K1==1&&K2==0&&K3==1&&K4==1){ key=2; } } if(K1==1&&K2==1&&K3==0&&K4==1){ //3音,SB3按下 delay(20); if(K1==1&&K2==1&&K3==0&&K4==1){ key=3; } } if(K1==1&&K2==1&&K3==1&&K4==0){ //4音,SB4按下 delay(20); if(K1==1&&K2==1&&K3==1&&K4==0){ key=4; } } if(K1==0&&K2==0&&K3==1&&K4==1){ //5音,SB1和SB2按下 delay(20); if(K1==0&&K2==0&&K3==1&&K4==1){ key=5; } } if(K1==1&&K2==0&&K3==0&&K4==1){ //6音,SB2和SB3按下 delay(20); if(K1==1&&K2==0&&K3==0&&K4==1){ key=6; } } if(K1==1&&K2==1&&K3==0&&K4==0){ //7音,SB3和SB4按下 delay(20); if(K1==1&&K2==1&&K3==0&&K4==0){ key=7; } } if(K1==0&&K2==1&&K3==1&&K4==0){ //i音,SB1和SB4按下 delay(20); if(K1==0&&K2==1&&K3==1&&K4==0){ key=8; } } if(K1==0&&K2==1&&K3==0&&K4==1){ //第一首歌,SB1和SB3按下 delay(20); if(K1==0&&K2==1&&K3==0&&K4==1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论