C51课程设计电子琴_第1页
C51课程设计电子琴_第2页
C51课程设计电子琴_第3页
C51课程设计电子琴_第4页
C51课程设计电子琴_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、 . . . C51程序设计课程报告电子琴学 院:班 级:学 号:19 / 21摘要:随着电子产业的发展和人民生活水平的提高,电子琴在人们生活中将扮演着越来越重要的角色,它改善人们的生活,给人们带来快乐和冶人的情操。电子琴,它是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,电子琴采用控制功能强大的微处理技术和电子技术,使它融入现代人的生活中,成为不可或缺的一部分。本设计在充分了解音乐音阶基础上,以AT89S51单片机作为核心控制器件而设计的,以这款单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等电路组成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本

2、功能。可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放置音乐。本设计给出了电子琴的详细设计方案,电路组成与程序流程并对电子琴可行性模拟仿真,Proteus试验仿真表明本文设计的电子琴运行稳定,电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。在本文设计的基础上,功能可以延伸和拓展,由于是程序控制,电子琴升级方便,具有很强的市场推广价值。关键词:AT89S51,电子琴,Proteus仿真,音阶目录一 设计背景2二 设计目的和要求21设计目的22.设计要求3三 设计原理31. 定时/计数器原理32.中断控制33.七段数码管44.矩阵式键盘的识别和

3、显示6四 设计组成71.设计的模块组成72.设计的软件实现流程7五 设计的电路原理图8六 本实验的C语言程序9七 仿真和调试141.仿真结果142.调试过程15八 实验成果和心得151.实验成果152.心得体会15参考文献:17一 设计背景随着人们生活水平的提高和电子产业的高速发展,越来越多的电子产品融入到人们的生活当中,电子琴也不例外,它作为一种冶人们情操,给人们生活增添乐趣的一种乐器,在生活中扮演比较重要的角色,逐步成为人们生活当中的一部分。电子琴本身是一种敲击乐器,通过敲击不同按键,由于音阶不同而发出不同声响,给人们的带来快乐,音阶的控制和声音大小是通过微控制器和电子电路实现的。简易电子

4、琴结构组成: 电子乐器的结构较为复杂, 音源是由晶体管产生电振动,并通过音色回路而产生各种音色;同时由周波数调制产生颤音效果,由振 幅调制产生各种乐器的音效。 乐器特色:属于电子乐器,发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。它还可模仿多种音色,甚至可以奏出常规乐器所无法发出的声音(如人声,风雨声等)。另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。另外,电子琴还安装有混响、回声、延长音、震 音和颤音等多项功能装置,表达各种情绪时运用自如。简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和

5、声。 还常作为独奏乐器出现,具有鲜明时代特色。但电子琴的局限性也十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类管、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。本设计在充分了解音乐音阶基础上,AT89C51单片机作为核心控制器件而设计的,以这款单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等电路组成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本功能。可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放置音乐。二 设计目的和要求1设计目的(1)熟悉单片机的部结构。(2)掌握C51编程方法。(

6、3)掌握定时器与发声的关系。(4)掌握交流蜂鸣器的发声原理和程序控制方法。(5)掌握串行控制键盘键的识别方法。2 .设计要求 (1)使用AT89C51作为核心控制器件。(2)编写C语言程序。(3)利用定时器来控制频率。(4)要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。 (5)用键盘作出电子琴的按键,每键代表一个音符。 (6)各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。 三 设计原理1. 定时/计数器原理MCS-51单片机部有2个16位的可编程定时/计数器,定时/计数器0由计数器TH0和TL0组成,定时/计数器1由计数器TH1和TL1组成,THX和TLX(X=0,1)分别为两个8

7、位计数器,连接起来可组成16位计数器。定时/计数器的工作方式由方式控制字TMOD选择,定时/计数器的启停由控制寄存器TCON控制,这两个寄存器均属于特殊功能寄存器。定时/计数器的工作原理图如下:其核心是一个加1计数器,加1计数器的脉冲有两个来源:一个是外部脉冲源,另一个是系统的时钟振荡器。当脉冲源为时钟振荡器(等间隔脉冲序列)时,由于计数器脉冲周期一样,所以脉冲数乘以脉冲周期就是定时时间,此时为定时功能。当脉冲源为外部脉冲时,就是外部事件的计数器,此时为计数功能。2中断控制(1)TCON用于中断请求TF1TF0IE1IT1IE0IT0IT0:外部中断请求触发方式。当IT0=0时,低电平触发;当

8、IT0=1时,下降沿触发。IT1外部中断请求触发方式。作用同IT0。IE0:外部中断请求标志位。当发中断请求时,置1,否则置0。IE1:外部中断请求标志位。作用同IE0。TF0:片定时/计数器0的溢出请求标志位,定时/计数器0溢出时,置1,否则置0.TF1:片定时/计数器1的溢出中断请求标志位,作用同TF0.(2)中断允许寄存器IEEAESET1EX1ET0EX0EA:开中断标志位。当EA=1时,CPU开中断;EA=0时,CPU关中断。ES:串行口的中断允许位。当ES=1时,串行口允许中断;ES=0时,则不允许中断。ET0(ET1):定时/计数器0(1)的中断允许位。当ET0=1,定时/计数器

9、0(1)溢出,允许中断,否则不允许。EX0(EX1):INTO的中断允许位,当EX0=1时,允许中断,否则,不允许。3.七段数码管(1)七段数码管简介数码管使用条件:七段数码管a、段与小数点上加限流电阻b、使用电压:段:根据发光颜色决定;   小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA     峰值电流 100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。(共阳管与共阴管的判断方法:在公共端加高电平,段码端加低电平,看是否点亮二极管,若亮则为

10、共阳管,不亮则为共阴管)数码管使用条件:(2)数码管的分类数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极CO

11、M接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。外观图 共阳极 共阴极数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出想要的数字,因此根据数码管的驱动方式不同,可以分为静态式和动态式两类。(3)数码管的驱动方式静态显示驱动静态显示驱动也称直流驱动。静态显示驱动是指每个数码管的每一个段码都由一个单片机的I0端口进行驱动,或者使用如BCD码二十进制译码器译码进行驱动。静态显示驱动的优点是编程简单、显示亮度高,缺点是占用I0端口多,如驱动5个数码管静态显示时需要40(5×8)根I0端口,要知道一个895

12、51单片机可用的I0端口才32个,所以实际应用时必须增加译码驱动器进行驱动,从而增加了硬件电路的复杂性。动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态显示驱动是将所有数码管的8个显示笔画“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I0线控制。当单片机输出字形码时,所有数码管都接收到一样的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM

13、端,使各个数码管轮流受控显示,这就是动态显示驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象与发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但能够节省大量的I0端口,而且功耗更低。4.矩阵式键盘的识别和显示(1)矩阵式键盘的结构与工作原理矩阵式键盘的结构在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16

14、个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。(2)的按键识别方法 行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种

15、最常用的按键识别方法.判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。四 设计组成1.设计的模块组成。2.设计的软件实现流程五 设计的电路原理图六 本实验的C语言程序#i

16、nclude <AT89C51.H> unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp; unsigned char key; unsigned char i,j; unsigned char STH0; unsigned char STL0; unsigned int code tab=64021,64103,64260,64400, 64524,64580,64684,647

17、77, 64820,64898,64968,65030, 65058,65110,65157,65178; void main(void) TMOD=0x01; ET0=1; EA=1; while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp)

18、case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; temp=P3; /P1_0=P1_0; P2=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff;P3_5=0; temp=P3; temp=temp & 0x0f;

19、if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; temp=P3; /P1_0=P1_0; P2=tablekey; STH0=tabkey/256;

20、STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_6=0; temp=P3;temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) ca

21、se 0x0e: key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; temp=P3; /P1_0=P1_0; P2=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f;

22、 if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; temp=P3; /P1_0=P1_0; P2=tablekey; STH0=tabkey/

23、256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; void t0(void) interrupt 1 using 0 TH0=STH0; TL0=STL0; P1_0=P1_0;七 仿真和调试1.仿真结果2.调试过程为了检验本文设计的电子琴的软、硬件能否达到设计要求,本文对电路进行了仿真操作,仿真在Proteus软件中进行,首先在Proteus软件中虚拟制作出电路图, 然后导入事先编制好的软件程序,就可以进行动态仿真了,与在真实电路

24、板上进行调试的过程基本一样。这样,如果在仿真过程中发现软、硬件不能正常工作,那么就能与时查找原因并做出相应修改,直到仿真的结果与实际相符为止。(1)出现的问题仿真时发现按下相应按键时,相应功能没能实现。(2)解决办法经分析得知是标志量没有设置好,进而改正了程序,使之实现了相应的功能。通过各方面努力,本次单片机课程设计任务完成,系统大部分功能已实现。可以随意演奏一首喜欢的曲子,并可以显示在数码管上,可以通过功能切换进行自动播放歌曲,基本达到预定的效果。通过这次的设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我查阅各种文献资料、设计手册、设计规以与软件编程排版的水平。対单片机课程设计的整个流程和设计要求都有了深刻的认识,对以后

温馨提示

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

评论

0/150

提交评论