模拟电子琴发声控制系统_第1页
模拟电子琴发声控制系统_第2页
模拟电子琴发声控制系统_第3页
模拟电子琴发声控制系统_第4页
模拟电子琴发声控制系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、河南理工大学单片机应用与仿真训练设计报告模拟电子琴发声控制系统姓 名: 郭胜 专业班级: 自动化10-6 指导老师: 胡治国 所在学院: 电气工程与自动化学院 2013年 1 月16 日摘要本设计是基于AT89C51单片机的电子琴制作。该设计利用单片机定时器0来产生可变频率的方波信号用以推动喇叭发出不同频率的声音。并使用LED数码管显示相关信息,用于选择电子琴的不同功能,同时采用7个发光二极管作为各音级的同步显示信号。板子共有10个按键,其中7个用于音级的输入,另外三个在不同阶段分别作为控制信号和低中高音选择信号输入端。通过按按键向单片机输入音级信息,单片机根据音级信号对定时器0产生的方波信号

2、进行分频,从而产生具有一定频率的方波信号,驱动喇叭发出对应音级的声音。本电子琴可实现三种功能:弹奏,播放和游戏。其中弹奏时按键17用于音级的输入,按键810作为低中高音的选择信号,7位发光二级管作为按键的指示信息;播放功能可以播放一首预先植入的歌曲,7位发光二级管作为音级同步显示信号,根据播放音乐的旋律对应点亮;游戏功能时,7位发光二级管作为指示信号,分别显示本次应键入的音级和发声的长度,从而实现在单片机的引导下正确弹奏一首曲子。在设计过程中,先根据预想到的电子琴的功能,选择所需要的元件,然后利用proteus画原理图,并仿真检验其电气性能是否满足硬件要求,然后根据原理图焊板子,并编写检验程序

3、检测硬件是否有问题,没有问题后再编写电子琴程序,经反复调试后得到自重的程序,经检验本电子琴完全更够实现预期的功能。关键词:单片机、电子琴、音级、分频,节拍目录1 概述11.1 电子琴概述11.2 电子琴系统原理11.3 设计任务及要求12 系统总体方案及硬件设计22.1硬件组成22.1.1 AT89S52简介22.1.2 音乐播放部分32.1.3电子琴弹奏部分32.2 具体发音原理32.3各部分电路42.3.1晶振42.3.2复位电路42.3.3按键53 软件设计63.1流程图63.2 主程序代码74、Proteus软件仿真75 课程设计体会7单片机课程设计1 概述1.1 电子琴概述电子琴又称

4、作电子键盘,属于电子乐器(区别于电声乐器),发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。它还可模仿多种音色,甚至可以奏出常规乐器所无法发出的声音(如合唱声,风雨声,宇宙声等)。另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片

5、机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。本文利用AT89C51 单片机的强大功能,通过软件产生不同频率的声音信号,在扬声器中发出7个音级。可以弹奏出不同的曲子。1.2 电子琴系统原理由于一首音乐是许多不同的音级组成的,而每个音级对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方

6、波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。不同的音级与一定的节拍组合在一起形成一定的曲调,因此只要用单片机I0口,通过软件,控制其输出信号的频率,就能控制器输出音级,通过不同音级和节拍的组合就可以产生曲调。乐曲中每一音符对应着确定的频率。如果单片机某个口线输出“高低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音。1.3 设计任务及要求本系统分为三个部分,一个是音乐播放,另一个是电子琴弹奏,还有游戏功能。通过上电功能选择操作后,就能实现各个功能。本系统利用喇叭作为发声部件,播放功能可以播放一首预先植入的歌曲,7位发光二级管作为音级同步显示信号,根据播

7、放音乐的旋律对应点亮;当进行弹奏时,按键17用于音级的输入,按键810作为低中高音的选择信号,7位发光二级管作为按键的指示信息;游戏功能时,7位发光二级管作为指示信号,分别显示本次应键入的音级和发声的长度,从而实现在单片机的引导下正确弹奏一首曲子。2 系统总体方案及硬件设计2.1硬件组成2.1.1 AT89S52简介1.概述AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单

8、片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。2.主要性能与MCS-51 兼容,4K字节可编程FLASH存储器,寿命:1000写/擦循环数据保留时间:10年,全静态工作:0Hz-24MHz,三级程序存储器锁定·128×8位内部RAM32,可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。3.管脚说明 VCC

9、:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内

10、部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并

11、用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。4振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.1.2 音乐播放部分乐音实际上是变动周期的信号。

12、本设计用AT89C51 的定时器控制,在P3.4引脚上输出方波周期信号,驱动喇叭发出声音。乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数放在数组里,然后访问数组依次取出,产生音符并控制节奏,就可以实现演奏效果。2.1.3电子琴弹奏部分本系统设置了10个按键,其中三个按键为高音、中音、低音的选择按键,其余为发音按键,按下不同的按键产生不同的音符,通过按键时间的长短控制发音的长短,这样弹奏人员可以随心所欲的弹奏自己所喜爱的乐曲。电子琴弹奏实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。我

13、们用的矩阵键盘作为输入端,键盘矩阵的7个引脚分别于P0口的低七位引脚相接。2.2 具体发音原理一首音乐是许多不同的音级组成的,而每个音级对应着不同的频率,单片机产生不同频率的信号是非常方便的,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号;同时一个音级对应一个时长即音符,音符可分为:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符。全音符的时长最长,本设计定一拍为两秒,则一个全音符的长度是一秒,为实现音级的长短,我们采用定时/计数器T1,作为定时器。我们首先设置定时器0的工作方式,让其工作在方式2下,即8位自重装。设定它的初值,使其每100产生一次中断,在中断函数中设

14、置分频参数,通过改变该参数实现分频,从而产生不同频频率的信号。同时我们设置定时器1的工作方式为8位自重装,设定他的初值使其每100产生一次中断,在中断函数中设置参数作为音符,通过改变此参数就可以实现一定能视察过的音符。通过图()(见附录一)可知不同频率的音级本电子琴高音频段音级对应的频率为:1047 1175 1319 1397 1568 1760 1976(HZ);本电子琴中音频段音级对应的频率为:523 587 659 698 784 880 988(HZ);本电子琴低音频段音级对应的频率为:262 294 330 349 392 440 494(HZ)。对高频音级,定时器0中断函数的参数

15、分别为:38,34,30,28,26,23,20;对中频音级,定时器0中断函数的参数分别为:19,17,15,14,13,11,10;对低频音级,定时器0中断函数的参数分别为:9,8,7,6,5,4,3;对于全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符的时长,定时器1的参数分别为:1、2、4、8、16、32;2.3各部分电路2.3.1晶振其中X1为晶体振荡器,其晶振频率为11.0592MHZ,电容C2,C3起着稳定震荡频率,快速其真的作用。2.3.2复位电路51单片机的复位引脚RST出现两个机器周期以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循

16、环复位状态,而无法执行程序。因此要求单片机复位后能够脱离复位状态。本电路采用复位上电,电路图如下,刚上电时,由于电容两端电压不能突变,则RST引脚承受5V电压,一段时间后电容会充电升压,RST引脚电压逐渐降低,能够满足单片机复位后脱离复位状态的要求。2.3.3按键本设计采用的矩阵键盘,输出引脚分别和P00P04和P06、P07。183 软件设计3.1流程图3.2 主程序代码见附录三 源程序代码。4、Proteus软件仿真见附录二 仿真图。5 课程设计体会通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了

17、原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不

18、可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了PROTUES、WAVE6000等软件,用WAVE6000进行程序的编译,用PROTUES进行软硬件系统的仿真。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是

19、很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。参考文献1 单丹,马淑云,基于AT89C51单片机电子琴设计,中国高新技术企业,2010年第36期,总第171期2 盛青松,基于AT89C51单片机可弹奏电子琴设计,计算机与网络,科技信息3微机原理与单片机借口技术,河南理工大学4李林涛,陈明,梁宜勇,王笑萍,基于单片机的建议电子琴录/放音系统,数字技术与运用5 朱清慧,Proteus教程,北京:清华大学出版社附录一附录

20、二:附录三:#include<reg51.h>sbit a1=P00;sbit a2=P01;sbit a3=P02;sbit a4=P03;sbit a5=P04;sbit a6=P05;sbit a7=P06;sbit a8=P07;sbit b1=P10;sbit b2=P11;sbit b3=P12;sbit b4=P13;sbit b5=P14;sbit b6=P15;sbit b7=P16;sbit k=P34;sfr P0M1=0x93;sfr P0M0=0x94;sfr P3M1=0xb1;sfr P3M0=0xb2;void Delay20ms();void De

21、lay300ms();void Delay20ms();void play(void);void listen(void);void sound1(unsigned char y2);void game(void);void sound (unsigned char y1,y2);unsigned int n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0;unsigned char table6=0xd0,0x89,0xcd,0xb7,0xc2,0xa2;unsigned char c=0,x=0,neng=0,fu=0,n8=0,n9=0,y=0,n10=0;unsign

22、edcharyinji37=38,34,30,28,26,23,20,19,17,15,14,13,11,10,9,8,7,6,5,4,3;unsigned char deng8=0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf;unsigned char tong124=1,6,7,6,5,4,5,6,5,4,3,5,6,3,5,4,6,7,6,5,4,5,6,5;unsigned char tong224=4,4,4,8,4,4,8,4,4,4,4,2,2,2,2,8,4,4,8,4,4,8,4,4;void main()P0M1=0x00; P0M0=0x2

23、0; P3M1=0x00; P3M0=0x10;TMOD= 0x22;/设置定时器模式TL1 = 0xA4;/设置定时初值TH1 = 0xA4;/设置定时重载值TL0 = 0xA4;/设置定时初值TH0 = 0xA4;/设置定时重载值TF0 = 0;/清除TF0标志EA=1;ET1=1;ET0=1;TF1 = 0;/清除TF1标志TR1 = 1;/定时器1开始计时k=0; while(1) P2=tablen3; a7=1; a3=a4=0; if(a7=0) Delay20ms(); if(a7=0) a3=1; if(a7!=0)n2=1;elsen2=2;Delay300ms(); sw

24、itch(n2) case 1:n3=(1+n3)%3;n2=0;break; case 2:goto out;break; default:break; out: a6=1; TR1=0; neng=1; if(n3=0) play(); neng=2; if(n3=2) listen(); if(n3=1) game(); void inte1(void) interrupt 1 n5+; if(n5=x) n5=0; c=(+c)%2; k=c; TF0=0;void inte(void) interrupt 3if(neng=0) n4+; if(n4=2000) n4=0; c=(+

25、c)%2; a6=c; if(neng=1) n4+; if(n4=625*tong2n8) n8+; n4=0; TR1=0; if(neng=2) n4+; if(n4=625*tong2n8) n8+; n4=0; TR1=0; TF1=0; void listen(void) x=tong10; P1=dengtong1n8; TR0=1; TR1=1; while(1) if(n8!=n9) TR0=0; x=yinji1tong1n8;n5=0;n9=n8;TR0=1; TR1=1;b1=0; P1=dengtong1n8; if(n8=25) TR0=0;P1=deng0; br

26、eak; void Delay20ms()/11.0592MHzunsigned char i, j, k;i = 1;j = 216;k = 35;dodowhile (-k); while (-j); while (-i); void Delay300ms()/11.0592MHzunsigned char i, j, k;i = 13;j = 156;k = 83;dodowhile (-k); while (-j); while (-i); void play(void)while(1) a1=a2=a3=a4=a5=0; a7=a8=1; if(a7&&a8)=0)

27、Delay20ms(); if(a7&&a8)=0) if(a8=0) a2=a3=a4=a5=1; a1=0; if(a8=0) n6=1; a5=a3=a4=a1=1; a2=0; if(a8=0) n6=2; a1=a2=a4=a5=1; a3=0; if(a8=0) n6=3; a1=a2=a3=a5=1; a4=0; if(a8=0) n6=4; a1=a2=a3=a4=1; a5=0; if(a8=0) n6=5; if(a7=0) a2=a3=a4=a5=1; a1=0; if(a7=0) n6=6; a5=a3=a4=a1=1; a2=0; if(a7=0) n

28、6=7; a1=a2=a4=a5=1; a3=0; if(a7=0) n7=0; a1=a2=a3=a5=1; a4=0; if(a7=0) n7=1; a1=a2=a3=a4=1; a5=0; if(a7=0) n7=2; switch(n6) case 1:sound(1,yinjin71);break; case 2: sound(2,yinjin72);break; case 3: sound(3,yinjin73);break; case 4: sound(4,yinjin74);break; case 5:sound(5,yinjin75);break; case 6:sound(6,yinjin76);break; case 7:sound(7,yinjin77);break; default:break; void sound (unsigned ch

温馨提示

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

评论

0/150

提交评论