[计算机硬件及网络]电子琴设计基于STC89C51单片机.doc_第1页
[计算机硬件及网络]电子琴设计基于STC89C51单片机.doc_第2页
[计算机硬件及网络]电子琴设计基于STC89C51单片机.doc_第3页
[计算机硬件及网络]电子琴设计基于STC89C51单片机.doc_第4页
[计算机硬件及网络]电子琴设计基于STC89C51单片机.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

摘要 随着科学技术的不断发展,单片机的应用日益成熟。单片机集成度高、处理功能 强大、价格低廉使其在各个领域得到广泛应用。同时电子琴作科学技术与音乐共同 发展的产物,在这个电子信息化的时代,为音乐的大众化做出了不可代替的贡献。 本文主要介绍一种基于 51 单片机的简易电子琴设计方案。它采用了STC 公 司出品的一款低功耗、高性能单片机STC89C52 芯片作为主控单元, 与 4*4 矩阵 键盘、复位电路、LED 双位数码显示器、扬声器等组成主控核心模块。文章详细论 述了电子琴硬件设计和软件结构设计流程,采用了Altium Designer 09 画出原理图、 PCB 图,通过 Keil 编程软件对电子琴进行软件编程,然后进行软硬件的调试运行并 将程序烧录到 STC89C52 芯片中。此系统运行比较稳定,具有硬件设计电路简单、清 晰,成本低,软件功能完善,控制系统牢靠,性价比高等优点,具有一定的实用和参 考价值。 关键词:STC89C52;电子琴;矩阵键盘 基于单片机的简易电子琴设计 II Abstract Along 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 musics popular do cant 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 基于单片机的简易电子琴设计 III 基于单片机的简易电子琴设计 目录 摘要 I Abstract .II 1 绪论1 1.1 设计的目的和意义.1 1.2 设计的主要内容.1 2 系统概述1 2.1 系统工作原理.1 2.2 系统结构组成.1 2.2.1 电源电路2 2.2.2 控制部分2 2.2.3 显示部分2 2.2.4 发声部分2 2.3 主要芯片及元件的介绍.2 2.3.1 STC89C52 单片机简介2 2.3.2 芯片引脚介绍4 2.3.3 STC89C52 时钟介绍7 2.3.4 双位 LED 数码显示器简介7 3 硬件电路的设计9 3.1 电源电路的设计.9 3.2 复位电路的设计.10 3.2.1 复位操作10 3.2.2 复位信号及其产生11 3.3 键盘控制电路.12 3.3.1 矩阵式键盘的概述12 3.3.2 矩阵式键盘按键识别原理及方法12 3.4 显示电路.13 4 系统软件设计14 4.1 如何利用单片机实现音乐节拍.14 4.2 如何用单片机产生音频脉冲.15 4.2.1 音符和频率的关系15 4.2.2 定义初值16 4.3 音乐发生程序流程图.18 结 论19 参考文献20 附录一 电子琴源程序21 附录二 原理图25 附录三 PCB 图.26 附录四 实物图27 致 谢28 基于单片机的简易电子琴设计 1 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.2 系统结构组成 如图 1 所示该系统主要包括电源电路、控制部分、显示部分和发声部分 图 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 单片机 复位电路 4*4 矩阵键盘 时钟电路 发声模块 显示模块 电源电路 基于单片机的简易电子琴设计 3 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。 基于单片机的简易电子琴设计 4 图 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) 。此外,还可通过对特殊功能寄存器 基于单片机的简易电子琴设计 5 (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.0-P1.7。 P1 口内部具 有上拉电阻,P1 口输出缓冲器能够驱动 4 个 TTL 逻辑电平。若对 P1 口写入“1”的时 候,内部上拉电阻就会把端口拉高,此时可以用作输入口。当作为输入口使用时,被 外部拉低的引脚因为其内部电阻,将输出电流。 此外,P1.0 和 P1.2 分别可以作定时器/计数器 2 的外部计数输入和定时器/计数器 2 的触发输入。具体如下表 1 所示。 在 Flash 编程和校验时,P1 口用于接收低 8 位 地址。 基于单片机的简易电子琴设计 6 表 1 P1 口引脚第二功能 引脚 第二功能 说明 P1.0 T2 定时器/计数器 t2 的 计数输入,时钟输出 P1.1 T2EX 定时器/计数器 t2 的捕 捉/重载触发信号 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 口也接收某 些控制信号。 基于单片机的简易电子琴设计 7 表 2 P3 口引脚第二功能 P3.0RXD 串行输入口 P3.1TXD 串行输出口 P3.2INT0 外中断 0 P3.3INT1 外中断 1 P3.4T0 定时/计数器 0 P3.5T1 定时/计数器 1 P3.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 万小时以上,且其成本很低。 基于单片机的简易电子琴设计 8 LED 数码管已被广泛运用于计算机的数显器件、数控装置等等。 根据 LED 数码管显示位数的多少,可以把数码管划分为一位、双位、多位 LED 数 码管显示器。一位的 LED 我们通常称为 LED 数码管,两位以上(包括两位)我们一般 称为显示器。双位 LED 显示器是把两只数码管封装成一体,它亮度均匀,一致性好, 光衰低,可靠性高而且结构紧凑、成本比较低(与两只一位的数码管相比较)。本系 统采用的是七段双位的数码显示器,7 段数码显示器由 7 段发光二极管的线段组成, 并且按照“日”字形排列。管脚排列如图 4 所示。若将 7 个 LED 的阳极连在一起,称 之为共阳极接法,反之为共阴极接法。双位数码显示器将共阳极用作片选,而在 ag 各段上加上不同的电压,各段的发光情况将会不同,从而会形成不同的发光字 符。加在引脚上的电压可以用数字量来表示,若某一段的阳极为数字量为“1” ,则这 个段就会发光;若为 0,就不会发光。数字量与段的对应关系如表 3 所示。 表 3 七段共阳 LED 字形码 显示字符共阳极 字符码 03FH 106H 25BH 34FH 466H 56DH 67DH 707H 87FH 96FH 图 4 七段结构及外形图 a 1 b 2 K1 3 K2 4 f 5 c 6 DP 7 e 8 d 9 g 10 基于单片机的简易电子琴设计 9 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限流。 基于单片机的简易电子琴设计 10 图5 电源电路图 3.2 复位电路的设计 3.2.1 复位操作 复位是单片机初始化的操作。它的主要功能就是把 PC 初始为 0000H,从而使单 片机从 0000H 单元开始执行程序。除此之外,当由于程序运行出现出错或操作错误 致使系统处于死锁状态时,为了摆脱困境,可以按复位键重新启动。 复位操作除 PC 有影响外,还对其他一些寄存器存在影响,它们的复位状态如表 4 所示。 表 4 些寄存器的复位状态 寄存器复位状态寄存器复位状态 PC0000HTCON00H ACC00HTL000H PSW00HTH000H SP07HTL100H DPTR0000HTH100H P0-P3FFHSCON00H IPXX000000BSBUF不定 基于单片机的简易电子琴设计 11 IE0X000000BPCON0XXX0000B TMOD00H 3.2.2 复位信号及其产生 RST(pin 9)引脚是复位信号的输入端。此引脚高电平有效,其有效时间应为二 个机器周期(即 24 个振荡周期)以上。如果使用颇率为 6MHz 的晶振,那么复位信号 需要持续时间超过 4us 才能完成复位操作。产生复位信号的电路逻辑图如图 6 所示: 图 6 复位信号的电路逻辑图 单片机的整个复位电路包括芯片内、外两个部分。RST 通过一个施密特触发器 与复位电路连接在一起,而片内复位电路则在每个机器周期的 S5P2 时对施密特触发 器的输出进行采样,这样才能得到内部复位操作所需要的信号。 复位操作一般有上电自动复位和按键手动复位两种。将外部复位电路的电容充电 就可以实现上电自动复位了,如图 7(a)所示。因此,接通电源就可以实现系统的 复位初始化了。 按键手动复位有电平方式和脉冲两种方式。其中,按键电平复位是通过 RST 端 经电阻与电源 Vcc 接通而实现的,其电路如图 7(b)所示;利用 RC 微分电路产生 的正脉冲来实现按键脉冲复位,如图 7(c)所示: (a)上电复位 (b)按键电平复位 (c)按键脉冲复位 基于单片机的简易电子琴设计 12 图 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 矩阵式键盘按键识别原理及方法 若矩阵键盘中没有按键按下,那么键盘的行线就会处于高电平;若有键按下时, 行线电平的状态由和它相连的列线的电平决定。假设列线电平为低电平那么行线电平 则为低电平;反之,同理。这一点就是识别矩阵式键盘哪个按键按下的关键所在。由 于矩阵式键盘的行线和列线被多键共用,所以各按键会相互影响,因此必须将行线和 列线的信号配合,才能确定闭合键的位置所在。矩阵式键盘一般有两种识别方法,它 们分别是扫描法和线反转法。 基于单片机的简易电子琴设计 13 首先,我们来介绍一下扫描法。它识别按键可以分为两步:第一步,识别有没有 按键按下;第二步,若有键按下,确定按下键的具体位置。举个简单的例子来说明这 个过程。 第一步,识别有没有按键按下。先将所有的列线都置为 0 电平,接着检查各行线 是不是都是高电平,若不全是高电平,说明有按键按下,否则就没有。例如,当按键 2 被按下,第一行的行线为低电平,但是我们不能确定是哪个键被按下了,若是同一 行的 1、3、4 键被按下,第一行也会呈现低电平,因此我们只能得出第一行有键被按 下。 第二步,确定哪个键被按下。采用扫描法,在某个时刻只让一条列线处于低电平, 其他所有列线都处于高电平。当第 1 列为低电平的时候,其他各列均处于高电平时, 因为是 2 键被按下,所以第 1 行仍高电平。而当第二列为低电平的时候,其他各列均 为高电平,第 1 行的行处于低电平,故可以判断第 1 行第二列的交叉处有键被按下, 即 2 号键被按下。 综上所述,扫描法的思想就是,先把某一列置为低电平,其他的各列均为高电平, 然后检查各行线的变化,若某行线为低电平,则可以确定被按下的键处于此行此列的 交叉点上。本系统采用的就是扫描法。 其次,我们再简单的介绍一下线反转法。扫描法要一列一列的去扫描查询,若被 按下的键处于最后一列时,需要经过多次才能获得正确的行列值。而线反转法则很简 练,不论是哪个键被按下,均只需要两步就可以知道是哪个键被按下了。具体操作步 骤如下: 第一步,让行线编程为输入线,列线均为输出线,并使输出线全部为低电平,那 么行线中电平由高变为低的行,就是按键所在的行。 第二部,把行线全部变成为输出线,列线编程为输入线,并使输出线全部为低电 平,则列线中由高电平变为低电平的列,就是按键所在的列。 综上所述,可以确定按键所在的行和列,从而得出按键所在位置。因此,线反转 法非常的简单适用,但是在实际的编程中不要忘记还要进行按键去抖动处理。 3.4 显示电路 本系统采用的显示电路是 LED 数码显示器,由于 LED 属于电流控制器件,使用时 需要加限流电阻,本次设计中只用了一个双位数码显示器,外加两个 9012 三极管驱 动数码管,此电路比较简单不于详细阐,具体电路图如图 9。 基于单片机的简易电子琴设计 14 图 9 显示电路 4 系统软件设计 本系统主要是要实现由单片机控制的简单的音乐发生器,矩阵键盘代表 16 个不 同的音阶,用户可以根据乐谱在键盘上弹奏出音乐,通过喇叭将音乐播放出来。 4.1 如何利用单片机实现音乐节拍 物体规则震动发出的声音称为乐音,音乐听起来有高、有低,这就是音高,发声 物体的振动频率决定着音高。频率低声音就会低,频率高声音就会高。不同的音高的 乐音分别用 1、2、3、4、5、6、7 来表示,这七个乐音名分别念成: DO、RE、ME、FA、SO、LA、SI,这就是唱曲时乐音的发音,我们把它称作唱名。 音持续的时间长短,通常用节拍来表示。一首歌通常有不同的音符表示,不同的音符 对应着不同的频率,不同频率的组合加上节拍就构成了音乐。 除了音符以外,节拍也是音乐中非常重要的一部分。 节拍实际上就是音持续时间的长短,在单片机中我们可以利用延时来实现。如果 是四分之一节拍就延时 0.4s,那么一拍就延时 1.6s。只需要知道四分之一节拍需要延 时多久,其他的节拍就是它延时的倍数了。如果要单片机自己放音乐就要在程序中设 置节拍的延时时间,但是此系统是简易的电子琴,只需要用户自己弹奏时把握节拍就 基于单片机的简易电子琴设计 15 可以了,不需要程序设置。对于不同的曲调我们可以由单片机的定时器/计数器来实 现音乐,一个节拍为单位(C 调),如表 5 所示: 表 5 音乐节拍表 曲调值DELAY曲调值DELAY 调 4/4125ms调 4/462ms 调 3/4187ms调 3/494ms 调 2/4250ms调 2/4125ms 4.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.059463094。 用这个公比 q,和已知的 220 进行计算,我们就可以得出全部琴键所对应的频率,如 表 6 所示 基于单片机的简易电子琴设计 16 表 6 音符和频率的关系 音符 频率 (HZ) 简谱码(T 值) 音符 频率 (HZ) 简谱码(T 值) 低 1 DO 262 63628 # 4 FA# 740 64860 #1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 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=fi2fr 基于单片机的简易电子琴设计 17 上式中的 N 为计数值,fi为机器频率,fr为想要产生的频率。 计数的初值 T 求法如下: T=65536-N=65536-fi2fr 例如:K=65536,fi=1MHz,求低音 DO(261Hz),中音 DO(523Hz),高音 DO(1046Hz)的计数值。 T=65536-N=65536-fi2fr=65536-10000002fr=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。 基于单片机的简易电子琴设计 18 4.3 音乐发声程序流程图 主程序流程图和 T0 中断服务程序流程图如图 10 所示 按键按下成功否? 识别按键功能 开始 根据按键功能装入音符 T 值到 T0 中 启动 T0 工作 按键释放成功否? 停止 T0 工作 N Y N Y 显示按键 T0 中断入口 P1.0 取反 重装 T0 初值 中断返回 (a)主程序流程图 (b)T0 中断服务程序流程图 图 10 主程序和 T0 中断服务程序流程图 T0 初始化并开 T0 中 断 基于单片机的简易电子琴设计 19 结 论 经过这几个月的努力,终于按照毕业设计进度要求如期完成了基于单片机的简易 电子琴制作的硬件设计和软件编写任务。在整个毕业设计完成的过程当中,碰到了不 少的困难,但在老师的细心指导以及自己的不懈努力下,最终还是取得了一定的成果。 这段时间制作这个毕业设计,首先使我对 STC89C52 单片机有更深入的了解, , 一开始设计整个系统的时候没有具体的思路,就上网找了好多关于电子琴设计的资料, 查阅后开始自己设计。电路图设计完成后,就是焊电路板了,在焊接的时候遇到了好 多的困难,总是把有些线搞混,错综复杂的导线使我晕头转向,从而增加我焊接的难 度。 焊完之后发现自己元器件的排布的不是很合适,使电路板上有许多的飞线。最 后就是编写程序调试了,本来还以为编程会很简单的,等到实际操作起来才知道很复 杂,没有想像中的那么得心应手,理解流程是有思维的前提.不过经过自己的不懈努力, 老师的精心指导下和同学的悉心帮助,花费的时间与精力终于没有白费,效果渐渐地出 现了。程序编完之后并不意味着可以实现系统的功能,还要继续调试。在这个过程中 遇到了一个非常棘手的问题,一开始数码显示管的驱动三极管用的是 8550,怎么都 不能使数码显示管显示数值,测试它的引脚全部正常。最后没办法了就一个一个元件 测试,都没问题,就一个一个元件替换,最终发现是三极管的问题,最后把 8550 换 成了 9012。 经过这次的毕业设计,我在理论的基础上更深刻的掌握了单片机的深层内容和 单片机在实际生活中的应用,加强了自己的动手能力和思维能力,还有在软件方面的 编程能力,也让我受益匪浅。这些问题的发现将为我以后的工作找明道路,经过这次 的毕业设计,使我对本专业的学习更加充满了信心。 基于单片机的简易电子琴设计 20 参考文献 1 张毅刚.单片机原理及应用M.北京:高等教育出版社,2009. 2 王港元.电子电工实践指导M.江西:科学技术出版社,2005. 3 何立民.MCS-51单片机应用系统设计M.北京:航空航天大学出版社,1998. 4 曹玲芝.电子信息工程专业英语M.武汉:华中科技大学出版社,2007. 5 王俊峰.理工科学生怎样搞毕业设计M.北京:电子工业出版社,2004. 6 史久规.基于Altium Designer 的原

温馨提示

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

评论

0/150

提交评论