基于STC89C51单片机的电子琴设计毕业论文.doc_第1页
基于STC89C51单片机的电子琴设计毕业论文.doc_第2页
基于STC89C51单片机的电子琴设计毕业论文.doc_第3页
基于STC89C51单片机的电子琴设计毕业论文.doc_第4页
基于STC89C51单片机的电子琴设计毕业论文.doc_第5页
已阅读5页,还剩27页未读, 继续免费阅读

下载本文档

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

文档简介

摘 要 随着科学技术的不断发展 单片机的应用日益成熟 单片机集成度高 处理功能 强大 价格低廉使其在各个领域得到广泛应用 同时电子琴作科学技术与音乐共同 发展的产物 在这个电子信息化的时代 为音乐的大众化做出了不可代替的贡献 本文主要介绍一种基于 51 单片机的简易电子琴设计方案 它采用了STC 公 司出品的一款低功耗 高性能单片机STC89C52 芯片作为主控单元 与 4 4 矩阵 键盘 复位电路 LED 双位数码显示器 扬声器等组成主控核心模块 文章详细论 述了电子琴硬件设计和软件结构设计流程 采用了Altium Designer 09 画出原理图 PCB 图 通过 Keil 编程软件对电子琴进行软件编程 然后进行软硬件的调试运行并 将程序烧录到 STC89C52 芯片中 此系统运行比较稳定 具有硬件设计电路简单 清 晰 成本低 软件功能完善 控制系统牢靠 性价比高等优点 具有一定的实用和参 考价值 关键词 STC89C52 电子琴 矩阵键盘 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 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 目录 摘要 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 设计的目的和意义 单片机又称单片微型计算机 英文字母的缩写 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 口外接的键盘 若有键按下 双位数码 显示管显示 01 16 若没有键按下则显示 00 当按下复位键的开关后 双位数码显 示管显示 00 单片机 P3 7 作为音频放大电路的输入 2 2 系统结构组成 如图 1 所示该系统主要包括电源电路 控制部分 显示部分和发声部分 图 1 系统结构组成 2 2 1 电源电路 由于电子制作一般都是用直流电源 故做此电源将 220V 的市交流电转为所需要 的直流电压 220V 市电先经变压器降压 然后经过二极管桥式整流 电容滤波后送 入 LM317 的输入端 在 LM317 的输出端直流电压 当调节滑动变阻器的时候可以调节 输出的直流电压的大小 2 2 2 控制部分 控制部分主要由 4 4 矩阵键盘组成 电子琴需要 16 个键 为了减少占用 I O 端 口 通常采用矩阵型键盘 将按键排成行和列 按键位于行和列的交叉点上 这样一 个端口就可以连接 4 4 的矩阵键盘了 2 2 3 显示部分 显示部分是一个双位数码显示管 可以显示 00 16 当有按键按下的时候 数 码显示管就会显示相应的数字 复位时为 00 2 2 4 发声部分 用喇叭来作为发声元件 用 8550 三极管来驱动喇叭发声 2 3 主要芯片及元件的介绍 2 3 1 STC89C52 单片机简介 STC89C52 单片机 复位电路 4 4 矩阵键盘 时钟电路 发声模块 显示模块 电源电路 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 位定时器 计数器 时钟频率为 0 24MHZ 7 MAX810 复位电路 8 两个串行中断 可编程 UART 串行通道 9 两个外部中断 共有 6 个中断源 10 两个读写中断串口 3 级加密位 11 一个看门狗定时器 12 低功耗空闲和掉电模式 可以软件设置睡眠和唤醒功能 13 工作电压为 5 5V 3 3V 5V 单片机 14 工作频率 0 40MHz 相当于普通 8051 的 0 80MHZ 实际的频率可以达到 48MHZ 15 工作温度为 40 85 工业级 0 75 商业级 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 39 pin 32 8 位双向 I O 口线 分别为 P0 0 P0 7 P0 口是一个漏 极开路的 I O 口 作为输出口 每一位均可以驱动 8 个 TTL 负载 当对 P0 端口写入 1 的时侯 该引脚可以用作高阻抗输入 当访问外部程序存储器或者数据存储器时 P0 口也被作为地址总线 低 8 位 和数据分时复用 在这种模式下 P0 不需要外加 上拉电阻 P0 口也可以作为 I O 口使用 也可以用来接收指令字节 在程序校验时 输出指令字节 此时需要加 10K 4 7K 的外部上拉电阻 P1 口 pin 1 pin 8 8 位准双向 I O 口线 分别为 P1 0 P1 7 P1 口内部具 有上拉电阻 P1 口输出缓冲器能够驱动 4 个 TTL 逻辑电平 若对 P1 口写入 1 的时 候 内部上拉电阻就会把端口拉高 此时可以用作输入口 当作为输入口使用时 被 外部拉低的引脚因为其内部电阻 将输出电流 此外 P1 0 和 P1 2 分别可以作定时器 计数器 2 的外部计数输入和定时器 计数器 2 的触发输入 具体如下表 1 所示 在 Flash 编程和校验时 P1 口用于接收低 8 位 地址 表 1 P1 口引脚第二功能 引脚 第二功能 说明 P1 0 T2 定时器 计数器 t2 的 计数输入 时钟输出 P1 1 T2EX 定时器 计数器 t2 的捕 捉 重载触发信号 P1 5 MOSI 在线系统编程用 P1 6 MISO 在线系统编程用 P1 7 SCK 在线系统编程用 P2 口 pin 21 pin 28 8 位双向 I O 口线 分别为 P2 0 P2 7 P2 输出缓冲器能 够驱动 4 个 TTL 逻辑电平 当对 P2 端口写入 1 的时候 内部上拉电阻就会把端口 拉高 此时就可以作为输入口使用 当作为输入使用时 被外部拉低的引脚因为其内 部电阻 就会输出电流 在访问其外部 ROM 或用 16 位地址读取外部 RAM 时 P2 口就会送出高八位 地址 此时 P2 口利用内部上拉发送 1 当使用 8 位地址 访问其外部数据存储 器 RAM 时 P2 口将会输出 P2 锁存器的内容 在 Flash 编程或者校验时 P2 口 也用于接收高 8 位地址和某些控制信号 P3 口 pin 10 pin 17 8 位双向 I O 口线 分别为 P3 0 P3 7 P3 口其内部具 有上拉电阻 P2 口输出缓冲器能够驱动 4 个 TTL 逻辑电平 当对 P3 口写入 1 的 时候 内部上拉电阻就会把端口拉高 此时就可以作为输入口使用 当作为输入使用 时 被外部拉低的引脚因为其内部电阻 将会输出电流 P3 口也作为 STC8C52 具有 第二功能的引脚使用 如下表 2 所示 当然 在 Flash 编程和校验时 P3 口也接收某 些控制信号 表 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 2 12MHz 电容 值范围为 5 30pF 电容频率起到微调的作用 时钟采用外部方式连接的电路如图 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 的阳极连在一起 称 之为共阳极接法 反之为共阴极接法 双位数码显示器将共阳极用作片选 而在 a g 各段上加上不同的电压 各段的发光情况将会不同 从而会形成不同的发光字 符 加在引脚上的电压可以用数字量来表示 若某一段的阳极为数字量为 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 3 硬件电路的设计 3 1 电源电路的设计 本系统采用的是小功率可调直流稳压电源 这种电源是用稳压器件 LM317 制作 成的直流稳压电源 它的效果很好 而且输出的是可调的电压 故它的适应范围也很 广 如图 5 所示 它是由电源变压器 T1 二极管桥式整流电路 滤波电容和一个 LM317 组成的 220V 交流市电经过电源变压器 T1 降压 变成电压较低的交流电 再经过二极管桥式整流电路 电容滤波后送入 LM317 的输入端 则 LM317 的输出端 将输出稳定的直流电压 LM317 还有一个脚是调整端 通常情况下 为了保证稳压 器的输出性能 的阻值一般应小于 240 此电源为可调电源 故我们在调整端和地 之间接一个可调电阻 当我们改变的电阻阻值时就可以改变输出电压的值了 输出电 压的计算公式如下 U0 1 25 1 R3 R2 C1是用于滤除由市交流电引入的高频干扰 通常选用的是瓷片电容 C2是一个电 容滤波电路 C3则用于旁路基准电压的纹波电压 它主要用于提高稳压电源的纹波抑 制性能 在使用的过程当中 如果负载是 500 500pF 的容性负载 稳压器的输出端 就会发生自激现象 电解电容 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 些寄存器的复位状态 寄存器复位状态寄存器复位状态 PC0000HTCON00H ACC00HTL000H PSW00HTH000H SP07HTL100H DPTR0000HTH100H P0 P3FFHSCON00H IPXX000000BSBUF不定 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 按键脉冲复位 图 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 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 所示 表 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 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 1000000 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 所示 按键按下成功否 识别按键功能 开始 根据按键功能装入音符 T 值到 T0 中 启动 T0 工作 按键释放成功否 停止 T0 工作 N Y N Y 显示按键 T0 中断入口 P1 0 取反 重装 T0 初值 中断返回 a 主程序流程图 b T0 中断服务程序流程图 图 10 主程序和 T0 中断服务程序流程图 T0 初始化并开 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 马忠梅 单片机 C 语言应用程序设计 M 北京 航空航天大学出版社 2007 11 徐爱军 单片机高级语言 C51 应用程序设计 M 北京 电子工业出版社 1997 附录一 电子琴源程序 include include define uint unsigned int define uchar unsigned char sbit SPK P3 7 P3 7 外接扬声器 sbit shiwei P2 7 sbit gewei P2 6 uint FreqTemp char Key Value 1 uchar code tabledu 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 unsigned int code Freqtab 定时半周期的初始值 64021 64103 64260 64400 低音 3 4 5 6 64524 64580 64684 64777 低音 7 中音 1 2 3 64820 64898 64968 65030 中音 4 5 6 7 65058 65110 65157 65178 高音 1 2 3 4 void delay ms uint z uint x y for x z x 0 x for y 123 y 0 y 函数功能 用扫描法读 P1 外接 4 4 键盘 函数返回 有按下键 返回 1 15 如无键按下 返回 00 uchar Keyscan void uchar i j temp Buffer 4 0 xfe 0 xfd 0 xfb 0 xf7 for j 0 j 4 j 循环四次 扫描四行 P1 Buffer j 在低四位分别输出一个低电平 nop temp 0 x80 计划先读出 P1 7 位 for i 0 i 1 return 16 没有键按下就返回 00 函数功能 将参数分成十位 个位 分别显示到 P2 void Display shiwei 0 P0 tabledu Key Value 1 10 delay ms 5 shiwei 1 P0 0 x00 gewei 0 P0 tabledu Key Value 1 10 delay ms 5 gewei 1 P0 0 x00 void shaomiao uchar Key Temp1 Key Temp2 读出的键值 Key Temp1 Keyscan 读入按键 if Key Temp1 16 有键按下 delay ms 5 延时消抖 Key Temp2 Keyscan 再读一次 if Key Temp1 Key Temp2 两次相等 Key Value Key Temp1 就确认下来 FreqTemp Freqtab Key Value 根据键值 取出定时半周期的初始值 TR0 1 启动定时器 发音 while Keyscan 8 SPK SPK 发音 附录二 原理图 附录三 PCB 图 附录四 实物图 致 谢 袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃 莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄 芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁

温馨提示

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

最新文档

评论

0/150

提交评论