基于单片机的简易电子琴设计(共30页).doc
精选优质文档-倾情为你奉上专心-专注-专业摘要随着科学技术的不断发展,单片机的应用日益成熟。单片机集成度高、处理功能强大、价格低廉使其在各个领域得到广泛应用。同时电子琴作科学技术与音乐共同发展的产物,在这个电子信息化的时代,为音乐的大众化做出了不可代替的贡献。本文主要介绍一种基于51单片机的简易电子琴设计方案。它采用了STC公司出品的一款低功耗、高性能单片机STC89C52芯片作为主控单元,与4*4矩阵键盘、复位电路、LED双位数码显示器、扬声器等组成主控核心模块。文章详细论述了电子琴硬件设计和软件结构设计流程,采用了Altium Designer 09画出原理图、PCB图,通过Keil编程软件对电子琴进行软件编程,然后进行软硬件的调试运行并将程序烧录到STC89C52芯片中。此系统运行比较稳定,具有硬件设计电路简单、清晰,成本低,软件功能完善,控制系统牢靠,性价比高等优点,具有一定的实用和参考价值。关键词:STC89C52;电子琴;矩阵键盘AbstractAlong with the development of science and technology, the application of SCM increasingly mature. Single chip microcomputer high level of integration, processing powerful, low prices make it is widely used in various fields. At the same time the keyboards for science and technology and music common development of the product, in the electronic information era, for music's popular do can't replace contribution. This paper mainly introduces a kind of simple keyboard based on 51 SCM design scheme. It USES the STC product of our company a low power consumption, high performance microprocessor STC89C52 chips as the master unit, and 4 * 4 matrix keyboard and reset circuit, LED digital display, a double master core module and other components of the speaker. This paper discusses the design of hardware and software structure keyboard design process, the use of a Altium Designer 09 draw a diagram, PCB figure, through the Keil software keyboard to software programming, then the software and hardware debugging run and will burn to STC89C52 chip program. Operation of the system is stable and has the hardware circuit design simple, clear, and the cost is low, the software perfect function, control system firm, price higher advantages, has certain practical and reference value.Key words : stc89c52; keyboard; matrix keyboard目录1 绪论1.1 设计的目的和意义单片机又称单片微型计算机,英文字母的缩写MCU。自上世纪70年代问世以来,因其较高的性价比备受人们的亲睐,单片机广泛应用于工业自动化,自动检测系统、汽车电子设备、家用电器和各种终端及计算机外部设备等等。单片机芯片具有体积小、携带方便、低功耗、速度快、可靠性能高、抗干扰能力强和价格低廉等等等优点,通常在其外部配置一些外围电路就可构成一整套完整的控制系统。单片机(Microcontroller,又嵌入式微控制器),就是在一块硅片上集成了各种部件的微型计算机。这些部件包括中央处理单元 (CPU),数据存储器(RAM),程序存储器(ROM), 定时器/计数器,多种I/O接口电路和中断系统等等。本文设计是以STC89C52单片机为核心的简易电子琴,重点用到了单片机定时器可以产生不同的脉冲,不同的脉冲经驱动电路放大后可以产生不同频率音阶,从而可以弹出美妙的音乐。本系统是简易的电子琴,运用4*4矩阵键盘充当电子琴的按键,一个按键代表一个音阶,并采用矩阵键盘行扫描法,通过程序来控制音阶的发生。1.2 设计的主要内容本文介绍了简易电子琴的设计和制作方案的确定以及设计流程,详细阐述了简易电子琴的硬件设计和软件设计。本设计主要包括:电源电路、复位电路、显示单元和4*4矩阵键盘。该系统具有运行稳定性好、可靠度高等优点,具有一定的参考价值。2 系统概述2.1 系统工作原理根据方案的要求,将程序写入STC89C52单片机芯片。利用不同的音阶的频率不一样,用单片机来模拟电子琴,可以使单片机的定时器工作在计数器模式下,工作方式设为方式1,改变TH0和TH1来产生不同的频率,从而产生不同的音阶。 P1口接4*4矩阵键盘行和列,用行扫描法读取P1口外接的键盘,若有键按下:双位数码显示管显示0116;若没有键按下则显示00,当按下复位键的开关后,双位数码显示管显示00。单片机P3.7作为音频放大电路的输入。2.2 系统结构组成如图1所示该系统主要包括电源电路、控制部分、显示部分和发声部分电源电路STC89C52单片机复位电路发声模块4*4矩阵键盘显示模块时钟电路图1 系统结构组成2.2.1 电源电路由于电子制作一般都是用直流电源,故做此电源将220V的市交流电转为所需要的直流电压。220V市电先经变压器降压,然后经过二极管桥式整流,电容滤波后送入LM317的输入端,在LM317的输出端直流电压,当调节滑动变阻器的时候可以调节输出的直流电压的大小。2.2.2 控制部分控制部分主要由4*4矩阵键盘组成。电子琴需要16个键,为了减少占用I/O端口,通常采用矩阵型键盘。将按键排成行和列,按键位于行和列的交叉点上。这样一个端口就可以连接4*4的矩阵键盘了。2.2.3 显示部分显示部分是一个双位数码显示管,可以显示0016。当有按键按下的时候,数码显示管就会显示相应的数字。复位时为00。2.2.4 发声部分用喇叭来作为发声元件,用8550三极管来驱动喇叭发声。2.3 主要芯片及元件的介绍2.3.1 STC89C52单片机简介STC89C52是由STC公司生产一款功耗低、性能高的8位微控制器,兼容MSC51指令系统,8K可反复擦写Flash ROM。在单块芯片上,具有8位CPU和可编程的Flash,使得STC89C52能为大多数嵌入式控制体统提供灵活度且有效的解决方案。STC89C52具有以下功能部件和特征:(1)8位微处理器(CPU)。 (2)数据存储器(512B RAM)。 (3)程序存储器(4K EEPROM)。 (4)4个可编程并行I/O口,256*8bit内部RAM。 (5)一个全双工串行口。 (6)三个16位定时器/计数器,时钟频率为024MHZ。 (7)MAX810复位电路。 (8)两个串行中断,可编程UART串行通道。 (9)两个外部中断,共有6个中断源。 (10)两个读写中断串口,3级加密位。 (11)一个看门狗定时器。(12)低功耗空闲和掉电模式,可以软件设置睡眠和唤醒功能。(13)工作电压为5.5V3.3V(5V单片机)。(14)工作频率040MHz,相当于普通8051的080MHZ,实际的频率可以达到48MHZ。(15)工作温度为:-4085(工业级),075(商业级)。(16)封装:LQFP-44,PDIP-40,PQFP-44。图2 SCT89C52双列直插式引脚图2.3.2 芯片引脚介绍(1)电源引脚 电源引脚用于是接入单片机的工作电源。Vcc(pin 40):电源接入,接+5V电源。Vss(pin 20):接数字地。(2)时钟引脚XTAL1(pin 19):片内振荡电路的输入端。当使用片内振荡器时,此引脚接微调电容和石英晶体;当采用外接时钟源时,引脚接振荡器信号。XTAL2(pin 20):片内振荡电路的输出端。当使用片内振荡器时,和pin 19的接法一样;当采用外部时钟源时,此引脚悬空。(3)控制引脚RST (pin 9):复位信号输入端,引脚上出现2个机器周期的高电平时单片机复位。Vpp具有第二引脚功能,当对片内Flash进行编程时,此引脚接入编程电压。ALE/PROG(pin 30):用于地址锁存。若访问外部程序存储器(ROM)和数据存储器(RAM),ALE将用于锁存低8位的地址。此时,ALE仍会以时钟振荡频率的1/6输出一个固定的脉冲信号,因此它可用于对外输出时钟或定时。但是要注意:每次访问外部数据存储器(RAM)时需要跳过一个ALE脉冲。 进行Flash存储器编程时,此引脚还可用于输入编程脉冲(PROG)。此外,还可通过对特殊功能寄存器(SFR)中的8EH单元的D0位置位,可以禁止ALE操作。该位置位后,只有MOVX和MOVC指令才能把ALE激活。此外,该引脚将会被拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN(pin 29):片外存储器读选通信号,低电平有效。EA/Vpp(pin 31):程序存储器的内部读选通。接低电平从外部存储器读取指令,若接高电平从内部程序存储器读取指令。(4)并行I/O口引脚(32根)STC89C52有4组8位可编程的I/O口,分别为P0、P1、P2、P3口,共32根。P0口(pin 39pin 32):8位双向I/O口线,分别为P0.0P0.7。P0口是一个漏极开路的I/O口。作为输出口,每一位均可以驱动8个TTL负载。当对P0端口写入“1”的时侯,该引脚可以用作高阻抗输入。当访问外部程序存储器或者数据存储器时,P0口也被作为地址总线(低8位)和数据分时复用。在这种模式下,P0不需要外加上拉电阻。P0口也可以作为I/O口使用,也可以用来接收指令字节;在程序校验时,输出指令字节,此时需要加10K4.7K的外部上拉电阻。P1口(pin 1pin 8):8位准双向I/O口线,分别为P1.0P1.7。P1 口内部具有上拉电阻,P1口输出缓冲器能够驱动4个TTL逻辑电平。若对P1 口写入“1”的时候,内部上拉电阻就会把端口拉高,此时可以用作输入口。当作为输入口使用时,被外部拉低的引脚因为其内部电阻,将输出电流。此外,P1.0和P1.2分别可以作定时器/计数器2的外部计数输入和定时器/计数器2 的触发输入。具体如下表1所示。 在Flash编程和校验时,P1口用于接收低8位地址。表1 P1口引脚第二功能引脚 第二功能 说明P1.0 T2 计数输入,时钟输出P1.1 T2EX 捕捉/重载触发信号P1.5 MOSI 在线系统编程用P1.6 MISO 在线系统编程用P1.7 SCK 在线系统编程用P2 口(pin 21pin 28):8位双向I/O口线,分别为P2.0P2.7。P2 输出缓冲器能够驱动4个TTL逻辑电平。当对P2 端口写入“1”的时候,内部上拉电阻就会把端口拉高,此时就可以作为输入口使用。当作为输入使用时,被外部拉低的引脚因为其内部电阻, 就会输出电流。在访问其外部ROM或用16位地址读取外部RAM时,P2 口就会送出高八位地址。此时,P2 口利用内部上拉发送“1”。当使用 8位地址,访问其外部数据存储器(RAM)时,P2口将会输出P2锁存器的内容。在Flash编程或者校验时,P2口也用于接收高8位地址和某些控制信号。P3口(pin 10pin 17): 8位双向I/O口线,分别为P3.0P3.7。P3口其内部具有上拉电阻,P2口输出缓冲器能够驱动4 个 TTL 逻辑电平。当对P3 口写入“1”的时候,内部上拉电阻就会把端口拉高,此时就可以作为输入口使用。当作为输入使用时,被外部拉低的引脚因为其内部电阻,将会输出电流。P3口也作为STC8C52具有第二功能的引脚使用,如下表2所示。当然,在Flash编程和校验时,P3口也接收某些控制信号。表2 P3口引脚第二功能P3.0RXD串行输入口P3.1TXD串行输出口P3.2INT0外中断0P3.3INT1外中断1P3.4T0定时/计数器0P3.5T1定时/计数器1P3.6WR外部数据存储器写选通P3.7RD外部数据存储器读选通2.3.3 STC89C52时钟介绍STC89C52内部有一个高增益的反相放大器,此放大器用于构成振荡器,其引脚TXD和RXD分别是这个放大器的输出端和输入端。STC89C52的时钟可以由内部方式产生,也可以由外部方式产生。其内部方式的时钟电路如图3(a)所示,在TXD和RXD引脚上接定时元件,其内部振荡器就会产生自激振荡。定时元器件一般采用石英晶体和电容组成并联谐振回路。晶体振荡频率选择范围为:1.212MHz,电容值范围为:530pF,电容频率起到微调的作用。时钟采用外部方式连接的电路如图3(b)所示,TXD接外部振荡器,RXD接地。对外部振荡信号没有特殊要求,只需要保证脉冲的宽度,所以一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供STC89C52单片机使用。(a)内部方式时钟电路 (b)外部方式时钟电路图3 时钟电路2.3.4 双位LED数码显示器简介数码管能在低电压、小电流驱动下发光,能够与CMOS、TTL电路兼容。它的发光响应时间非常短,通常小于0.1s,其高频特性好,单色性好,亮度比较高。LED使用寿命很长,通常在10万小时以上,甚至可以达到100万小时以上,且其成本很低。LED数码管已被广泛运用于计算机的数显器件、数控装置等等。根据LED数码管显示位数的多少,可以把数码管划分为一位、双位、多位LED数码管显示器。一位的LED我们通常称为LED数码管,两位以上(包括两位)我们一般称为显示器。双位LED显示器是把两只数码管封装成一体,它亮度均匀,一致性好,光衰低,可靠性高而且结构紧凑、成本比较低(与两只一位的数码管相比较)。本系统采用的是七段双位的数码显示器,7段数码显示器由7段发光二极管的线段组成,并且按照“日”字形排列。管脚排列如图4所示。若将7个LED的阳极连在一起,称之为共阳极接法,反之为共阴极接法。双位数码显示器将共阳极用作片选,而在ag各段上加上不同的电压,各段的发光情况将会不同,从而会形成不同的发光字符。加在引脚上的电压可以用数字量来表示,若某一段的阳极为数字量为“1”,则这个段就会发光;若为0,就不会发光。数字量与段的对应关系如表3所示。表3 七段共阳LED字形码显示字符共阳极字符码03FH106H25BH34FH466H56DH67DH707H87FH96FH图 4 七段结构及外形图3 硬件电路的设计3.1 电源电路的设计本系统采用的是小功率可调直流稳压电源。这种电源是用稳压器件LM317制作成的直流稳压电源,它的效果很好,而且输出的是可调的电压,故它的适应范围也很广。如图5所示,它是由电源变压器T1,二极管桥式整流电路,滤波电容和一个LM317组成的。220V交流市电经过电源变压器T1降压,变成电压较低的交流电,再经过二极管桥式整流电路,电容滤波后送入LM317的输入端,则LM317的输出端将输出稳定的直流电压。LM317还有一个脚是调整端,通常情况下,为了保证稳压器的输出性能,的阻值一般应小于240。此电源为可调电源,故我们在调整端和地之间接一个可调电阻,当我们改变的电阻阻值时就可以改变输出电压的值了。输出电压的计算公式如下:U0=1.25(1+R3/R2)C1是用于滤除由市交流电引入的高频干扰,通常选用的是瓷片电容。C2是一个电容滤波电路,C3则用于旁路基准电压的纹波电压,它主要用于提高稳压电源的纹波抑制性能。在使用的过程当中,如果负载是500500pF的容性负载,稳压器的输出端就会发生自激现象,电解电容C4就是用来进一步改善输出电压的波纹而设置的。D3D4都是保护二极管,当输入电路发生短路的时候,C4会放电电流反向流经LM317,有可能会被冲击损坏,D3可以旁路反向电流,从而保护了LM317。同样的道理,如果输出端短路的话,C3上的放电电流就会被D4短路,从而起到保护的作用。图5中的R2与D2是用来指示工作的,当插上220V的交流电时,经过变压 、整流、滤波、稳压等正常工作时,发光二级管D2就会发光,而R1用来为D2限流。图5 电源电路图3.2 复位电路的设计3.2.1 复位操作复位是单片机初始化的操作。它的主要功能就是把PC初始为0000H,从而使单片机从0000H单元开始执行程序。除此之外,当由于程序运行出现出错或操作错误致使系统处于死锁状态时,为了摆脱困境,可以按复位键重新启动。复位操作除PC有影响外,还对其他一些寄存器存在影响,它们的复位状态如表4所示。表4 些寄存器的复位状态寄存器复位状态寄存器复位状态PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00HIPXXBSBUF不定IE0XBPCON0XXX0000BTMOD00H3.2.2 复位信号及其产生RST(pin 9)引脚是复位信号的输入端。此引脚高电平有效,其有效时间应为二个机器周期(即24个振荡周期)以上。如果使用颇率为6MHz的晶振,那么复位信号需要持续时间超过4us才能完成复位操作。产生复位信号的电路逻辑图如图6所示:图6 复位信号的电路逻辑图单片机的整个复位电路包括芯片内、外两个部分。RST通过一个施密特触发器与复位电路连接在一起,而片内复位电路则在每个机器周期的S5P2时对施密特触发器的输出进行采样,这样才能得到内部复位操作所需要的信号。复位操作一般有上电自动复位和按键手动复位两种。将外部复位电路的电容充电就可以实现上电自动复位了,如图7(a)所示。因此,接通电源就可以实现系统的复位初始化了。按键手动复位有电平方式和脉冲两种方式。其中,按键电平复位是通过RST端经电阻与电源Vcc接通而实现的,其电路如图7(b)所示;利用RC微分电路产生的正脉冲来实现按键脉冲复位,如图7(c)所示: (a)上电复位 (b)按键电平复位 (c)按键脉冲复位图7 复位电路上述电路图中的电阻、电容参数适用于6MHz的晶振,能够保证复位信号的高电平持续时间在2个机器周期以上。本系统的复位电路采用的是图7(b)上电复位方式。电阻为2.2K,电容为10uF、晶振为12MHz。3.3 键盘控制电路3.3.1 矩阵式键盘的概述本系统采用的是非编码键盘中的矩阵键盘。矩阵键盘也称为行列式键盘,一般用于按键数目较多的场合。它是由行和列组合而成,一组是行线,另一组是列线,按键就位于行和列的交叉点。如图8所示,一个4*4的矩阵键盘,有16个按键,我们分别用着16个键来模拟电子琴的按键:低音 3、 4、 5、 6、 7;中音 1、 2、 3、 4、 5、 6、 7 ;高音 1、 2、 3、 4 。可以很明显地看出,较独立键盘而言,矩阵式键盘节省了I/O口线。 图8 4*4矩阵式键盘接口3.3.2 矩阵式键盘按键识别原理及方法若矩阵键盘中没有按键按下,那么键盘的行线就会处于高电平;若有键按下时,行线电平的状态由和它相连的列线的电平决定。假设列线电平为低电平那么行线电平则为低电平;反之,同理。这一点就是识别矩阵式键盘哪个按键按下的关键所在。由于矩阵式键盘的行线和列线被多键共用,所以各按键会相互影响,因此必须将行线和列线的信号配合,才能确定闭合键的位置所在。矩阵式键盘一般有两种识别方法,它们分别是扫描法和线反转法。首先,我们来介绍一下扫描法。它识别按键可以分为两步:第一步,识别有没有按键按下;第二步,若有键按下,确定按下键的具体位置。举个简单的例子来说明这个过程。第一步,识别有没有按键按下。先将所有的列线都置为0电平,接着检查各行线是不是都是高电平,若不全是高电平,说明有按键按下,否则就没有。例如,当按键2被按下,第一行的行线为低电平,但是我们不能确定是哪个键被按下了,若是同一行的1、3、4键被按下,第一行也会呈现低电平,因此我们只能得出第一行有键被按下。第二步,确定哪个键被按下。采用扫描法,在某个时刻只让一条列线处于低电平,其他所有列线都处于高电平。当第1列为低电平的时候,其他各列均处于高电平时,因为是2键被按下,所以第1行仍高电平。而当第二列为低电平的时候,其他各列均为高电平,第1行的行处于低电平,故可以判断第1行第二列的交叉处有键被按下,即2号键被按下。综上所述,扫描法的思想就是,先把某一列置为低电平,其他的各列均为高电平,然后检查各行线的变化,若某行线为低电平,则可以确定被按下的键处于此行此列的交叉点上。本系统采用的就是扫描法。其次,我们再简单的介绍一下线反转法。扫描法要一列一列的去扫描查询,若被按下的键处于最后一列时,需要经过多次才能获得正确的行列值。而线反转法则很简练,不论是哪个键被按下,均只需要两步就可以知道是哪个键被按下了。具体操作步骤如下:第一步,让行线编程为输入线,列线均为输出线,并使输出线全部为低电平,那么行线中电平由高变为低的行,就是按键所在的行。第二部,把行线全部变成为输出线,列线编程为输入线,并使输出线全部为低电平,则列线中由高电平变为低电平的列,就是按键所在的列。综上所述,可以确定按键所在的行和列,从而得出按键所在位置。因此,线反转法非常的简单适用,但是在实际的编程中不要忘记还要进行按键去抖动处理。3.4 显示电路本系统采用的显示电路是LED数码显示器,由于LED属于电流控制器件,使用时需要加限流电阻,本次设计中只用了一个双位数码显示器,外加两个9012三极管驱动数码管,此电路比较简单不于详细阐,具体电路图如图9所示。图9 显示电路4 系统软件设计本系统主要是要实现由单片机控制的简单的音乐发生器,矩阵键盘代表16个不同的音阶,用户可以根据乐谱在键盘上弹奏出音乐,通过喇叭将音乐播放出来。4.1 如何利用单片机实现音乐节拍物体规则震动发出的声音称为乐音,音乐听起来有高、有低,这就是音高,发声物体的振动频率决定着音高。频率低声音就会低,频率高声音就会高。不同的音高的乐音分别用1、2、3、4、5、6、7来表示,这七个乐音名分别念成:DO、RE、ME、FA、SO、LA、SI,这就是唱曲时乐音的发音,我们把它称作唱名。音持续的时间长短,通常用节拍来表示。一首歌通常有不同的音符表示,不同的音符对应着不同的频率,不同频率的组合加上节拍就构成了音乐。除了音符以外,节拍也是音乐中非常重要的一部分。节拍实际上就是音持续时间的长短,在单片机中我们可以利用延时来实现。如果是四分之一节拍就延时0.4s,那么一拍就延时1.6s。只需要知道四分之一节拍需要延时多久,其他的节拍就是它延时的倍数了。如果要单片机自己放音乐就要在程序中设置节拍的延时时间,但是此系统是简易的电子琴,只需要用户自己弹奏时把握节拍就可以了,不需要程序设置。对于不同的曲调我们可以由单片机的定时器/计数器来实现音乐,一个节拍为单位(C调),如表5所示:表5 音乐节拍表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms4.2 如何用单片机产生音频脉冲4.2.1 音符和频率的关系用单片机播放音乐亦或是弹奏电子琴,实际上就是按照一定的频率,输出一连串的方波。为了输出适合的方波,首先我们应该知道音符与频率之间的关系。注意观察一下几个6(LA)的频率,它们都是整数,很容易看出成2倍的关系。其它的音符也是一样的。如220、440等这些频率,它们在琴键上的位置是统一的,不论是电子琴、钢琴还是手风琴,都是一样的。包含黑键和白键在内的所有音符的频率数值都是成“等比数列”的关系,因此它们之间有一个公比q,可以按照“2倍”的规律推算出来。例如:已知最低音的6(LA)的频率是220Hz,我们设它的公比为q,则可以推出7(SI)的频率为220*q*q 。因为6(LA)、7(SI)之间隔了一个黑键,所以要乘以两个q。以此类推,两个6之间,一共有12个琴键,可以得出:220*q*q*q*q*q*q*q*q*q*q*q*q = 440。马上就可以得出,12个q相乘,等于: 440 ÷ 220 = 2。可以求出q = 2,q的12次方根 为:1.。用这个公比q,和已知的220进行计算,我们就可以得出全部琴键所对应的频率,如表6所示表6 音符和频率的关系音符 频率(HZ) 简谱码(T值) 音符 频率(HZ) 简谱码(T值) 低1DO 262 63628 # 4 FA# 740 64860 #1DO# 277 63731 中 5 SO 784 64898 低2RE 294 63835 # 5 SO# 831 64934 #2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65283 4.2.2 定义初值用单片机来模拟产生音符,只需要计算出音频的周期T=1/f,利用音频的变化来产生不同的电平,从而驱动喇叭发声。利用STC89C52的内部定时器使它工作在计数器的模式下,工作方式设为“1”,改变TH0和TH1来产生不同的频率,从而产生不同的音阶。比如:频率为中音DO(532Hz),它的周期为:T=1/532=1912us,所以计数器只需要计数:956us/1us=956次,每一次计数956次时将I/O口反向,我们就可以得到我们所需要的音阶中音(DO)了。计数脉冲和频率的关系式:N=fi÷2÷fr上式中的N为计数值,fi为机器频率,fr为想要产生的频率。计数的初值T求法如下:T=65536-N=65536-fi÷2÷fr例如:K=65536,fi=1MHz,求低音DO(261Hz),中音DO(523Hz),高音DO(1046Hz)的计数值。T=65536-N=65536-fi÷2÷fr=65536-÷2÷fr=65536-50000/fr 低音DO(261Hz)的T=65536-50000/261=63627 中音DO(523Hz)的T=65536-50000/523=64580 高音DO(1046Hz)的T=65536-50000/1046=65059采用12MHz的晶振,音符与计数值T0的关系如表6所示。本系统主要用到的音符为低音:3、4、5、6、7,中音:1、2、3、4、5、6、7,高音1、2、3、4;用到频率分别为:64021,64103,64260,64400, 64524, 64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178。 4.3 音乐发声程序流程图 主程序流程图和T0中断服务程序流程图如图10所示开始T0初始化并开T0中断N按键按下成功否? Y识别按键功能根据按键功能装入音符T值到T0中T0中断入口启动T0工作P1.0取反显示按键重装T0初值N按键释放成功否?中断返回Y停止T0工作(b)T0中断服务程序流程图(a)主程序流程图图10 主程序和T0中断服务程序流程图结 论经过这几个月的努力,终于按照毕业设计进度要求如期完成了基于单片机的简易电子琴制作的硬件设计和软件编写任务。在整个毕业设计完成的过程当中,碰到了不少的困难,但在老师的细心指导以及自己的不懈努力下,最终还是取得了一定的成果。这段时间制作这个毕业设计,首先使我对STC89C52单片机有更深入的了解,一开始设计整个系统的时候没有具体的思路,就上网找了好多关于电子琴设计的资料,查阅后开始自己设计。电路图设计完成后,就是焊电路板了,在焊接的时候遇到了好多的困难,总是把有些线搞混,错综复杂的导线使我晕头转向,从而增加我焊接的难度。 焊完之后发现自己元器件的排布的不是很合适,使电路板上有许多的飞线。最后就是编写程序调试了,本来还以为编程会很简单的,等到实际操作起来才知道很复杂,没有想像中的那么得心应手,理解流程是有思维的前提.不过经过自己的不懈努力,老师的精心指导下和同学的悉心帮助,花费的时间与精力终于没有白费,效果渐渐地出现了。程序编完之后并不意味着可以实现系统的功能,还要继续调试。在这个过程中遇到了一个非常棘手的问题,一开始数码显示管的驱动三极管用的是8550,怎么都不能使数码显示管显示数值,测试它的引脚全部正常。最后没办法了就一个一个元件测试,都没问题,就一个一个元件替换,最终发现是三极管的问题,最后把8550换成了9012。经过这次的毕业设计,我在理论的基础上更深刻的掌握了单片机的深层内容和单片机在实际生活中的应用,加强了自己的动手能力和思维能力,还有在软件方面的编程能力,也让我受益匪浅。这些问题的发现将为我以后的工作找明道路,经过这次的毕业设计,使我对本专业的学习更加充满了信心。参考文献1 张毅刚.单片机原理及应用M.北京:高等教育出版社,2009.2 王港元.电子电工实践指导M.江西:科学技术出版社,2005.3 何立民.MCS-51单片机应用系统设计M.北京:航空航天大学出版社,1998.4 曹玲芝.电子信息工程专业英语M.武汉:华中科技大学出版社,2007.5 王俊峰.理工科学生怎样搞毕业设计M.北京:电子工业出版社,2004.6 史久规.基于Altium Designer 的原理图与PCB设计M.北京:机械工业出版社,2011.7 高锋编.单片微机应用系统设计及使用技术M.北京:机械工业出版社,2004.8 胡汉才单片机原理及系统设计M北京:清华大学出版社,2002.9 胡汉才.单片机原理及其接口技术M.北京:清华大学出版社, 2004.10 马忠