1、 C51 程序设计课程报告 电子琴 学 院: 电气信息工程学院 班 级: 自动化 (3) 学 号: 1114210114 姓 名 : 雷星星 摘要 : 随着电子产业的发展和人民生活水平的提高,电子琴在人们生活中将扮演着越来越重要的角色,它改善人们的生活,给人们带来快乐和陶冶人的情操。 电子琴 ,它 是现代电子科技与音乐结合的产物,是一种新型的键盘乐器 ,电子琴采用控制功能强大的微处理技术和电子技术,使它融入现代人的生活中,成为不可或缺的一部分。 本设计在充分了解音乐音阶基础上 ,以 AT89S51 单片机作为核心控制器件而设计的,以这款单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等
2、电路组成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本功能。可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。 本设计给出了电子琴的详细设计方案,电路组成及程序流程并对电子琴可行性模拟仿真, Proteus 试验仿真表明本文设计的电子琴 运行稳定, 电路简单 ,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 在本文设计的基础 上,功能可以延伸和拓展,由于是程序控制,电子琴升级方便,具有很强的市场推广价值。 关键词: AT89S51,电子琴, Proteus 仿真,音阶 目录 一 设计背景 . 2 二 设计目的和
3、要求 . 2 1设计目的 . 2 2.设计要求 . 3 三 设计原理 . 3 1. 定时 /计数器原理 . 3 2.中断控制 . 3 3.七段数码管 . 4 4.矩阵式键盘的识别和显示 . 6 四 设计组成 . 7 1.设计的模块组成 . 7 2.设计的软件实现流程 . 7 五 设计的电路原理图 . 8 六 本实验的 C 语言程序 . 9 七 仿真和调试 . 12 1.仿真结果 . 12 2.调试过程 . 13 八 实验成果和心得 . 13 1.实验成果 . 13 2.心得体会 . 13 参考文献: . 15 2 一 设计背景 随着人们生活水平的提高和电子产业的高速发展,越来越多的电子产品融入
4、到人们的生活当中,电子琴也不例外,它作为一种陶冶人们情操,给人们生活增天 乐趣的一种乐器,在生活中扮演比较重要的角色,逐步成为人们生活当中的一部分。电子琴本身是一种敲击乐器,通过敲击不同按键,由于音阶不同而发出不同声响,给人们的带来 快乐,音阶的控制和声音大小是通过微控制器和电子电路实现的。 简易电子琴结构组成: 电子乐器的结构较为复杂, 音源是由晶体管产生电振动,并通过音色回路而产生各种音色;同时由周波数调制产生颤音效果,由振 幅调制产生各种乐器的音效。 乐器特色:属于电子乐器,发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。它还可模仿多种音色,甚
5、至可以奏出常规乐器所无法发出的声音(如人声,风雨声等)。另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐 。另外,电子琴还安装有混响、回声、延长音、震 音和颤音等多项功能装置,表达各种情绪时运用自如。简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。 还常作为独奏乐器出现,具有鲜明时代特色。但电子琴的局限性也十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类管、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。 本设计在充分了解音乐音阶基础上, AT89C51 单片机作为核心控制器件而设计的,以这款
6、单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等电路组 成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本功能。可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。 二 设计目的和要求 1设计目的 ( 1)熟悉单片机的内部结构。 ( 2)掌握 C51 编程方法。 ( 3)掌握定时器与发声的关系。 ( 4)掌握交流蜂鸣器的发声原理和程序控制方法。 ( 5)掌握串行控制键盘键的识别方法。 3 2 .设计要求 (1)使用 AT89C51 作为核心控制器件。 ( 2)编写 C语言程序。 ( 3)利用定时器来控制频率。 ( 4)要求达到
7、电 子琴的基本功能,可以用弹奏出简单的乐曲。 ( 5)用键盘作出电子琴的按键,每键代表一个音符。 ( 6)各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。 三 设计原理 1. 定时 /计数器原理 MCS-51 单片机内部有 2 个 16 位的可编程定时 /计数器,定时 /计数器 0 由计数器 TH0 和 TL0 组成,定时 /计数器 1 由计数器 TH1 和 TL1 组成, THX 和 TLX( X=0,1)分别为两个 8 位计数器,连接起来可组成 16 位计数器。定时 /计数器的工作方式由方式控制字 TMOD 选择 ,定时 /计数器的启停由控制寄存 器 TCON控制,这两个寄存器均属于
8、特殊功能寄存器。定时 /计数器的工作原理图如下:其核心是一个加 1 计数器,加 1 计数器的脉冲有两个来源:一个是外部脉冲源,另一个是系统的时钟振荡器。当脉冲源为时钟振荡器(等间隔脉冲序列)时,由于计数器脉冲周期相同,所以脉冲数乘以脉冲周期就是定时时间,此时为定时功能。当脉冲源为外部脉冲时,就是外部事件的计数器,此时为计数功能。 2 中断控制 ( 1) TCON 用于中断请求 TF1 TF0 IE1 IT1 IE0 IT0 IT0:外部中断请求触发方式。当 IT0=0 时,低电平触发; 当 IT0=1 时,下降沿触发。 IT1 外部中断请求触发方式。作用同 IT0。 IE0:外部中断请求标志位
9、。当发中断请求时,置 1,否则置 0。 IE1:外部中断请求标志位。作用同 IE0。 4 TF0:片内定时 /计数器 0 的溢出请求标志位,定时 /计数器 0 溢出时,置 1,否则置 0. TF1:片内定时 /计数器 1 的溢出中断请求标志位,作用同 TF0. ( 2)中断允许寄存器 IE EA ES ET1 EX1 ET0 EX0 EA:开中断标志位。当 EA=1 时, CPU 开中断; EA=0 时, CPU 关中断。 ES:串行口的中断允许位。当 ES=1 时,串行口允许中断; ES=0 时,则不允许中断。 ET0(ET1):定时 /计数器 0( 1)的中断允许位。当 ET0=1,定时
10、/计数器 0( 1)溢出,允许中断,否则不允许。 EX0(EX1): INTO 的中断允许位,当 EX0=1 时,允许中断,否则,不允许。 3.七段数码管 ( 1) 七段数码管简介 数码管使用条件: a、段及小数点上加限流电阻 b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定 c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。(共阳管与共阴管的判断方法:在公共端加高电平,段码端加低电平,看是否点亮二极管,若亮则为共阳管,不亮则为共阴管) 数码管使用条件:
11、( 2)数码管的分类 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“ 8”可分为 1 位、 2位、 4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形 成公共阳极 (COM)的数码管。共阳数码管在应用时应将公共极 COM 接到 +5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极 (COM)的数码管。共阴数码管在应用时应将公共极 COM 接到地线
12、 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,七段数码管 5 相应字段就不亮。 外观图 共阳极 共阴极 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出想要的数字,因此根据数码管的驱动方式不同,可以分为静态式和动态式两类。 ( 3)数码管的驱动方式 静态显示驱动 静态显示驱动也称直流驱动。静态显示驱动是指每个数码管的每一个段码都由一个 单片机 的 I 0端口进行驱动,或者使用如 BCD 码二十进制 译码器 译码进行驱动。静态显示驱动的优点是编程简单、显示 亮度 高,缺点是占用 I 0 端口多,如驱动 5 个数码管静态显示时需要
13、 40( 5 8)根 I 0 端口,要知道一个89551 单片机 可用的 I 0端口才 32 个,所以实际应用时必须增加译码 驱动器 进行驱动,从而增加了硬件电路的复杂性。 动态显示驱动 数码管动态显示 接口 是单片机中应用最为广泛的一种显示方式之一,动态显示驱动是将所有数码管的 8 个显示笔画“ a、 b、 c、 d、 e、 f、 g、 dp”的同名端连在一起,另外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I 0 线控制。当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通 COM 端电路的控制,所以我们只要将
14、需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的 COM 端,使各个数码管轮流受控显示,这就是动态显示驱动。在轮流显示过程中,每位数码管的点亮时间为 1 2ms,由于人的视觉暂留现象及发光二极管的 余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但能够节省大量的 I 0 端口,而且功耗更低。 6 4.矩阵式键盘的识别和显示 ( 1)矩阵式键盘的结构与工作原理 在键盘中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式,在
15、矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口 (如 P1口 )就可以构成 4*4=16 个按键,比之直接将端口线 用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成 20 键的键盘,而直接用端口线则只能多出一键 (9 键 )。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的 I/O 口作为输出端,而列线所接的 I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一
16、旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 ( 2) 的按键识别方法 行扫描法行扫描法又称为逐行 (或列 )扫描查询法,是一种最常用的按键识别方法 .判断键盘中有无键按下将全部行线 Y0-Y3 置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4根行线相交叉的 4 个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平 状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 矩阵式键盘的结构 7 四 设计组成 1.设计的模块组成。 2.设计的软件实现流程 8 五 设计的电路原理图