单片机课程设计-基于STC89C52RC单片机的音乐播放器设计.doc_第1页
单片机课程设计-基于STC89C52RC单片机的音乐播放器设计.doc_第2页
单片机课程设计-基于STC89C52RC单片机的音乐播放器设计.doc_第3页
单片机课程设计-基于STC89C52RC单片机的音乐播放器设计.doc_第4页
单片机课程设计-基于STC89C52RC单片机的音乐播放器设计.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

基于 STC89C52RC 单片机的音乐播放器设 计 一 设计要实现的功能 1 利用 I O 口产生一定频率的方波 驱动蜂鸣器 发出不同的音调 从而演奏歌曲 总共九首 2 采用共阳七段数码管显示当前播放歌曲的序号 3 可以通过按键实现暂停 继续 上一首 下一首以及复位等基本操 作 二 设计所需基础知识储备 1 要产生音频脉冲 只要计算某一音频的周期 然后将此周期处以 2 即为半 周期的时间 利用定时器记时这个个半周期时间 每当记时到后就输出脉冲 的 I O 反相 然后重复记时此半周期的时间再对 I O 反相 就可在 I O 脚上 得到此频率的脉冲 2 利用 8051 的内部定时器使其工作在计数器模式 MODE1 下 改变计数值 TH0 及 TL0 以产生不同频率的方法 例如频率为 523HZ 其周期 T 1 523 1912us 因此只要令计数器记时 956us 1us 956 在每次计数 956 次时将 I O 反相 就可得到中音 DO 523HZ 计数脉冲值与频率的关系公 式如下 N Fi 2 Fr 其中 N 是计数值 Fi 是 8051 内部频率 一般用的是 1MHZ 因为 8051 内部记时一次时间为 1us Fr 为要产生的频率 3 计数初值的求法如下 T 65536 N 65536 Fi 2 Fr 例如 求低音 DO 261HZ 中音 DO 523HZ 高音 DO 1046HZ 的计数值 T 65536 N 65536 Fi 2 Fr 65536 1000000 2 Fr 65536 50000 Fr 低音 DO 的 65536 50000 262 63267 中音 DO 的 65536 50000 523 64580 高音 DO 的 65536 50000 1047 65059 三 硬件设计 本次设计用到的主要器件有 STC89C52 七段共阳数码管 无源蜂鸣器 详 细列表在后面列出 硬件原理图也在后面列出 四 功能说明 1 硬件电路中 P1 0 口为音频输出端口 2 用 P1 1 和 P1 2 分别作为上一首和下一首歌曲的功能键 P1 3 接一个 自锁按键 当按键按下时暂停播放音乐 再按一下按键 按键弹起 继续原来的播放进度 3 用 P2 0 P2 7 这几个管脚来控制七段数码管的显示 4 单片机 18 和 19 号管教接 12MHZ 的晶振 其中电容皆为 30PF 的瓷 片电容 5 单片机 40 号管脚接 VCC 20 号管脚接地 31 号管脚接 VCC 9 号管 脚外接复位电路 五 主要元器件介绍 STC89C52 单片机 STC89C52 是高性能 CMOS 8 位单片机 片内含 8k bytes 的可反复擦写的只读程 序存储器 PEROM 和 256bytes 的随机存取数据存储器 RAM 器件采用高 密度 非易失性存储技术生产 与标准 MCS 51 指令系统及 8052 产品引脚兼 容 片内置通用 8 位中央处理器 CPU 和 Flash 存储单元 功能强大 STC89C52 单片机适合于许多较为复杂控制应用场合 主要功能特性 兼容 MCS51 指令系统 8k 可反复擦写 1000 次 Flash ROM 32 个双向 I O 口 256x8bit 内部 RAM 3 个 16 位可编程定时 计数器中断 时钟频率 0 24MHz 2 个串行中断 可编程 UART 串行通道 2 个外部中断源 共 6 个中断源 2 个读写中断口线 3 级加密位 低功耗空闲和掉电模式 软件设置睡眠和唤醒功能 主要管脚有 XTAL1 19 脚 和 XTAL2 18 脚 为振荡器输入输出端口 外接 12MHz 晶振 RST 9 脚 为复位输入端口 外接电阻电容组成的复 位电路 VCC 40 脚 和 VSS 20 脚 为供电端口 分别接 5V 电源 的正负端 P0 P3 为可编程通用 I O 脚 其功能用途由软件定义 STC89C52 有 40 个引脚 32 个外部双向输入 输出 I O 端口 同时内含 2 个 外中断口 3 个 16 位可编程定时计数器 2 个全双工串行通信口 2 个读写口线 STC89C52 可以按照常规方法进行编程 也可以在线编程 其将通用的微处理器 和 Flash 存储器结合在一起 特别是可反复擦写的 Flash 存储器可有效地降低开 发成本 其管脚图如下所示 P0 口有三个功能 1 外部扩充存储器时 当做数据总线 D0 D7 2 外部扩充存储器时 当做数据总线 A0 A7 3 不扩充时 可做一般 I O 使用 但内部无上拉电阻 作为输入或输出时 应在外部接上拉电阻 P1 口 只做 I O 使用 但其内部有上拉电阻 P2 口有两个功能 1 扩充外部存储器时 当做地址总线 A8 A15 使用 2 做一般 I O 使用 其内部有上拉电阻 P3 口有两种功能 除了作为 I O 使用外 内部有上拉电阻 还有一些特殊功能 如下 端口引脚第二功能 P3 0RXD 串行输入口 P3 1TXD 串行输出口 P3 2INT0 外部中断 0 P3 3INT1 外部中断 1 P3 4T0 定时 计数器 0 P3 5T1 定时 计数器 1 P3 6WR 外部数据存储器写入控制信号 P3 7RD 外部数据存储器读取控制信号 此外 P3 口还接收一些用于 Flash 闪速存储器编程和程序校验的控制信号 RST 复位输入 当振荡器工作时 RST 引脚出现两个机器周期以上高电平 将使单片复位 ALE PROG 当访问外部程序存储器或数据存储器时 ALE 地址锁存允许 输出脉冲用于锁存地址的低 8 位字节 一般情况下 ALE 仍以时钟振荡频率 的 1 6 输出固定的脉冲信号 因此它可对外输出时钟或用于定时目的 对 Flash 存储器编程期间 该引脚还用于输入编程脉冲 PROG 此 外 该引脚会被微弱拉高 单片机执行外部程序时 应设置 ALE 禁止位无 效 PSEN 程序储存允许 PSEN 输出是外部程序存储器的读选通信号 当 AT89C52 由外部程序存储器取指令 或数据 时 每个机器周期两次 PSEN 有效 即输出两个脉冲 在此期间 当访问外部数据存储器 将跳过两次 RSEN 信号 EA VPP 外部访问允许 欲使 CPU 仅访问外部程序存储器 地址为 0000H FFFFH EA 端必须保持低电平 接地 需注意的是 如果加密 位 LB1 被编程 复位时内部会锁存 EA 端状态 如 EA 端为高电平 接 Vcc 端 CPU 则执行内部程序存储器中的指令 Flash 存储器编程时 该引脚加上 12V 的编程允许电源 VPP 当然这必须是 该器件是使用 12V 编程电压 VPP XTAL1 振荡器反相放大器的及内部时钟发生器的输入端 XTAL2 振荡器反相放大器的输出端 VCC 电源电压 GND 地 中断寄存器 中断寄存器 STC89C52 有 6 个中断源 2 个中断优先级 IE 寄存器控制各中断位 IP 寄存 器中 6 个中断源的每一个可定为 2 个优先级 数据存储器 数据存储器 AT89C52 有 256 个字节的内部 RAM 80H FFH 高 128 个字节与特殊功能寄 存器 SFR 地址是重叠的 也就是高 128 字节的 RAM 和特殊功能寄存器的 地址是相同的 但物理上它们是分开的 当一条指令访问 7FH 以上的内部地址单元时 指令中使用的寻址方式是 不同的 也即寻址方式决定是访问高 128 字节 RAM 还是访问特殊功能寄存 器 如果指令是直接寻址方式则为访问特殊功能寄存器 例如 下面的直接寻址指令访问特殊功能寄存器 0A0H 即 P2 口 地址 单元 MOV 0A0H data 间接寻址指令访问高 128 字节 RAM 例如 下面的间接寻址指令中 R0 的内容为 0A0H 则访问数据字节地址为 0A0H 而不是 P2 口 0A0H MOV R0 data 堆栈操作也是间接寻址方式 所以 高 128 位数据 RAM 亦可作为堆栈区使 用 中断 STC89C52 共有 6 个中断向量 两个外中断 INT0 和 INT1 3 个定时器中 断 定时器 0 1 2 和串行口中断 这些中断源可通过分别设置专用寄存器 IE 的置位或清 0 来控制每一个中断 的允许或禁止 IE 也有一个总禁止位 EA 它能控制所有中断的允许或禁止 定时器 2 的中断是由 T2CON 中的 TF2 和 EXF2 逻辑或产生的 当转向中断服 务程序时 这些标志位不能被硬件清除 事实上 服务程序需确定是 TF2 或 EXF2 产生中断 而由软件清除中断标志位 定时器 0 和定时器 1 的标志位 TF0 和 TF1 在定时器溢出那个机器周期的 S5P2 状态置位 而会在下一个机器周期才查询该中断标志 然而 定时器 2 的标志位 TF2 在定时器溢出的那个机器周期 S2P2 状态置位 并在同一个 机器周期内查询到该标志 时钟振荡器 时钟振荡器 STC89C52 中有一个用于构成内部振荡器的高增益反相放大器 引脚 XTAL1 和 XTAL2 分别是该放大器的输入端和输出端 这个放大器与作为反馈元件的 片外石英晶体或陶瓷谐振器一起构成自激振荡器 外接石英晶体 或陶瓷谐振器 及电容 C1 C2 接在放大器的反馈回路中构 成并联振荡电路 对外接电容 C1 C2 虽然没有十分严格的要求 但电容容 量的大小会轻微影响振荡频率的高低 振荡器工作的稳定性 起振的难易程 序及温度稳定性 如果使用石英晶体 我们推荐电容使用 30pF 10pF 而如 使用陶瓷谐振器建议选择 40pF 10pF 用户也可以采用外部时钟 采用外部时钟的电路如图右图所示 这种情况下 外部时钟脉冲接到 XTAL1 端 即内部时钟发生器的输入端 XTAL2 则悬空 Flash 存储器的编程存储器的编程 STC89C52 单片机内部有 8k 字节的 Flash PEROM 这个 Flash 存储阵列出厂时 已处于擦除状态 即所有存储单元的内容均为 FFH 用户随时可对其进行 编程 编程接口可接收高电压 12V 或低电压 Vcc 的允许编程信号 低电压编程模式适合于用户在线编程系统 而高电压编程模式可与通用 EPROM 编程器兼容 STC89C52 的程序存储器阵列是采用字节写入方式编程的 每次写入一个字 节 要对整个芯片内的 PEROM 程序存储器写入一个非空字节 必须使用片 擦除的方式将整个存储器的内容清除 共阳七段数码管 LED 数码管是由发光二极管构成的 亦称半导体数码管 将条状发光二极管按照共阳极 正极 的方法连接 组成 8 字 再把发光二极 管另一电极作笔段电极 就构成了 LED 数码管 若按规定使某些笔段上的发 光二极管发光 就能显示从 0 9 的一系列数字 同荧光数码管 VFD 辉光 数码管 NRT 相比 它具有 体积小 功耗低 耐震动 寿命长 亮度高 单色性好 发光响应的时间短 能与 TTL CMOS 电路兼容等的数显器件 如上图所示是共阳极七段数码管的原理图 共阳数码管在应用时应将公共极 COM 接到 5V 当某一字段发光二极管的阴极 为低电平时 相应字段就点亮 当某一字段的阴极为高电平时 相应字段就不 亮 数码管要正常显示 就要用驱动电路来驱动数码管的各个段码 从而显示出我 们要的数字 因此根据数码管的驱动方式的不同 可以分为静态式和动态式两 类 静态显示驱动 静态驱动也称直流驱动 静态驱动是指每个数码管的每一个 段码都由一个单片机的 I O 端口进行驱动 或者使用如 BCD 码二 十进制译码器 译码进行驱动 静态驱动的优点是编程简单 显示亮度高 缺点是占用 I O 端 口多 如驱动 5 个数码管静态显示则需要 5 8 40 根 I O 端口来驱动 要知道 一个 89S51 单片机可用的 I O 端口才 32 个呢 实际应用时必须增加译码驱动 器进行驱动 增加了硬件电路的复杂性 动态显示驱动 数码管动态显示接口是单片机中应用最为广泛的一种显示方 式之一 动态驱动是将所有数码管的 8 个显示笔划 a b c d e f g dp 的同名端连 在一起 另外为每个数码管的公共极 COM 增加位选通控制电路 位选通由各自 独立的 I O 线控制 当单片机输出字形码时 所有数码管都接收到相同的字形 码 但究竟是那个数码管会显示出字形 取决于单片机对位选通 COM 端电路的 控制 所以我们只要将需要显示的数码管的选通控制打开 该位就显示出字形 没有选通的数码管就不会亮 通过分时轮流控制各个数码管的的 COM 端 就使 各个数码管轮流受控显示 这就是动态驱动 在轮流显示过程中 每位数码管 的点亮时间为 1 2ms 由于人的视觉暂留现象及发光二极管的余辉效应 尽管 实际上各位数码管并非同时点亮 但只要扫描的速度足够快 给人的印象就是 一组稳定的显示数据 不会有闪烁感 动态显示的效果和静态显示是一样的 能够节省大量的 I O 端口 而且功耗更低 在本次设计中采用了静态显示驱动方式 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器 采用直流电压供电 广泛应用于计算 机 打印机 复印机 报警器 电子玩具 汽车电子设备 电话机 定时器等 电子产品中作发声器件 它主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型 压电式蜂鸣器主要由多谐振荡器 压电蜂鸣片 阻抗匹配器及共鸣箱 外壳 等组成 有的压电式蜂鸣器外壳上还装有发光二极管 多谐振荡器由晶体管 或集成电路构成 当接通电源后 1 5 15V 直流工作电压 多谐振荡器起 振 输出 1 5 2 5kHZ 的音频信号 阻抗匹配器推动压电蜂鸣片发声 电磁式蜂鸣器由振荡器 电磁线圈 磁铁 振动膜片及外壳等组成 接通电 源后 振荡器产生的音频信号电流通过电磁线圈 使电磁线圈产生磁场 振 动膜片在电磁线圈和磁铁的相互作用下 周期性地振动发声 蜂鸣器分为有源与无源之分 从外观上分辨 将两种蜂鸣器的引脚郡朝上 放置时 可以看出有绿色电路板的一种是无源蜂鸣器 没有电路板而用黑胶 封闭的一种是有源蜂鸣器 进一步判断有源蜂鸣器和无源蜂鸣器 还可以用 万用表电阻档档测试 用黑表笔接蜂鸣器 引脚 红表笔在另一引脚上来 回碰触 如果触发出咔 咔声的且电阻只有8 或 16 的是无源蜂鸣器 如果能发出持续声音的 且电阻在几百欧以上的 是有源蜂鸣器 有源蜂鸣器直接接上额定电源就可连续发声 主要用于简单的应用 如报 警等 而无源蜂鸣器则和电磁扬声器一样 需要接在音频输出电路中才能发声 由此可以判定本次设计应该用无源蜂鸣器 蜂鸣器驱动方式 一种是 PWM 输出口直接驱动 另一种是利用 I O 定时 翻转电平产生驱动波形对蜂鸣器进行驱动 PWM 输出口直接驱动是利用 PWM 输出口本身可以输出一定的方波来直 接驱动蜂鸣器 本次设计用的是第二种方式 即 利用 I O 定时翻转电平产生驱动波形对蜂 鸣器进行驱动 必须利用定时器来做定时 通过定时翻转电平产生符合蜂鸣 器要求的频率的波形 这个波形就可以用来驱动蜂鸣器了 比如为 2500Hz 的蜂鸣器的驱动 可以知道周期为400 s 这样只需要驱动蜂鸣 器的 I O 口每 200 s 翻转一次电平就可以产生一个频率为2500Hz 占空 比为 1 2duty 的方波 再通过三极管放大就可以驱动这个蜂鸣器了 NPN 三极管 9013 9013 是一种 NPN 型硅小功率的三极管它是非常常见的晶体三极管 在 收音机以及各种放大电路中经常看到它 应用范围很广 它是 NPN 型小功 率三极管 参数 集电极电流 Ic Max 500mA 工作温度 55 to 150 集电极 基极电压 Vcbo 40V 主要用途 放大电路 它利用双极型半导体三极管输入电流控制输出电流的特性 或场效应半导体 三极管输入电压控制输出电流的特性 实现信号的放大 晶振 晶晶体体振振荡荡器器 简称晶晶振振 其作用在于产生原始的时钟频率 这个频率经过频 率发生器的倍频或分频后就成了电脑中各种不同的总线频率 晶振分为有源晶振和无源晶振 无源晶振只有两个引脚 没有所谓的正负极 有源晶振需要接电源才能工作 一般有四个引脚 其中有两个电源输入引脚 有正负极之分 本次设计中采用了 12MHZ 的无源晶振来为单片机提供标准的时钟频率 发光二极管 二极管又称晶体二极管 简称二极管 diode 它只往一个方向传送电流的电 子零件 发光二极管用磷化镓 磷砷化镓材料制成 体积小 正向驱动发光 工 作电压低 工作电流小 发光均匀 寿命长 可发红 黄 绿单色光 本次设计中用红色发光二极管来指示电源接通与否 硬件原理图如下所示 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 T2 1 P1 1 T2EX 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C52 X1 12MHz C1 30pF C2 30pF LS1 SOUNDER JP1 JUMPER Q1 NPN Q2 NPN 复位电路如下图所示 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 T2 1 P1 1 T2EX 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C52 C1 10uF R1 10k 六 流程图设计 主程序流程图 下一首歌曲流程图 上一首歌曲流程图 数码管显示流程图 上一首歌曲号数码管显示流程图 下一首歌曲号数码管显示流程图 通过判断当前播放的歌曲号 并将其号码送往P2 口 驱动相应的二极管 将号码显示出来 七 音乐播放器 C51 源程序 include sbit SPK P1 0 蜂鸣器 sbit a P3 0 上一首 sbit b P3 1 下一首 sbit e P3 2 控制暂停与继续 unsigned char code data song 指向具体歌的指针 unsigned int data j 取码指针 unsigned char data i 用于循环 unsigned char data k 几个 1 4 拍 unsigned char data l 第几个码 void delay void unsigned char code yin 30 0 xFF 0 xFF 0 xFB 0 x90 0 xFC 0 x0C 0 xFC 0 x44 0 xFC 0 xAC 0 xFD 0 x09 0 xFD 0 x34 0 xFD 0 x82 0 xFD 0 xC8 0 xFE 0 x06 0 xFE 0 x22 0 xFA 0X15 0XFB 0 x04 0 xFA 0 x67 0 xFE 0 x85 C 调各音符频率与计数初值 T 的对照表 第一首 兰花草 unsigned char code song1 46 0 x12 0 x52 0 x52 0 x52 0 x56 0 x42 0 x32 0 x42 0 x32 0 x22 0 x18 0 x82 0 x82 0 x82 0 x82 0 x86 0 x72 0 xB2 0 x72 0 x72 0 x62 0 x58 0 x52 0 x82 0 x82 0 x72 0 x56 0 x42 0 x32 0 x42 0 x32 0 x22 0 x16 0 xB2 0 xB2 0 x32 0 x32 0 x22 0 x16 0 x52 0 x42 0 x32 0 x22 0 xC2 0 x88 0 xFF 第二首 两只蝴蝶 unsigned char code song2 131 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x12 0 xC8 0 x04 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x32 0 x48 0 x04 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x11 0 x31 0 xC8 0 x04 0 x52 0 x72 0 x78 0 x02 0 x72 0 x82 0 x72 0 x58 0 x04 0 x42 0 x42 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x12 0 x32 0 x32 0 x3C 0 x09 0 x72 0 x72 0 x82 0 xA2 0 x92 0 x92 0 x82 0 x52 0 x42 0 x42 0 x42 0 x58 0 x02 0 x52 0 x52 0 x72 0 x84 0 x84 0 x02 0 x12 0 x52 0 x42 0 x48 0 x04 0 x52 0 x72 0 x72 0 x52 0 x74 0 x02 0 xA4 0 x92 0 x82 0 x92 0 x54 0 x02 0 x82 0 x82 0 x92 0 x82 0 x72 0 x52 0 x42 0 x02 0 xC4 0 x12 0 x3C 0 xFF 第三首 最浪漫的事 unsigned char code song3 138 0 xC2 0 xC2 0 x12 0 x34 0 x32 0 x32 0 x32 0 x12 0 x12 0 x52 0 x54 0 x02 0 xC2 0 x12 0 x32 0 x32 0 x32 0 x32 0 x34 0 x52 0 x72 0 x7C 0 x02 0 x72 0 x82 0 x72 0 x82 0 x72 0 x84 0 x72 0 x41 0 x51 0 x52 0 x41 0 x31 0 x34 0 x02 0 x32 0 x32 0 x12 0 x34 0 x32 0 x12 0 x32 0 x54 0 x42 0 x32 0 x32 0 x32 0 x32 0 x34 0 x52 0 x72 0 x7C 0 x72 0 x72 0 x82 0 x72 0 x82 0 x72 0 x84 0 x82 0 x72 0 x42 0 x52 0 x42 0 x34 0 x12 0 x12 0 x32 0 xC4 0 x52 0 x42 0 x34 0 x12 0 x12 0 x31 0 x41 0 x32 0 x3C 0 x84 0 x82 0 x72 0 x82 0 x72 0 x52 0 x72 0 x78 0 x02 0 x72 0 x82 0 xA2 0 x84 0 x82 0 x72 0 x82 0 x72 0 x82 0 x32 0 x0A 0 x72 0 x82 0 xA2 0 x38 0 x02 0 x32 0 x42 0 x52 0 x64 0 x62 0 x72 0 x82 0 x82 0 x72 0 x82 0 x82 0 xA2 0 x82 0 x82 0 x82 0 xA2 0 x82 0 x72 0 x78 0 x72 0 x32 0 x82 0 x72 0 x78 0 x72 0 x82 0 xA3 0 x51 0 x42 0 x51 0 x41 0 x3C 0 xFF 第四首 一生有你 unsigned char code song4 77 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x5C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x31 0 x41 0 x4C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x58 0 x32 0 x52 0 x4C 0 x42 0 x32 0 x34 0 x32 0 x42 0 x48 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x72 0 x41 0 x51 0 x5C 0 x04 0 xC2 0 xC2 0 x32 0 x32 0 x42 0 x42 0 x52 0 x42 0 x4C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x58 0 x32 0 x52 0 x4C 0 x42 0 x32 0 x32 0 x42 0 x4C 0 xFF 第五首 宁静的夏天 unsigned char code song5 0X54 0XC4 0X12 0X32 0X34 0X52 0X52 0X52 0X52 0X42 0X32 0X34 0XC1 0XC2 0X52 0XC2 0X12 0X32 0X34 0X11 0X12 0X31 0X12 0XC2 0X78 0X72 0X52 0X52 0X42 0X32 0X42 0X52 0X11 0XC1 0XC4 0XC1 0XC1 0XC1 0XC1 0X12 0X32 0X32 0X12 0X42 0X42 0X44 0XC2 0X12 0X32 0X42 0X52 0X72 0X72 0X82 0X41 0X51 0X42 0X48 0X42 0X12 0X3C 0X72 0X62 0X3C 0X72 0X62 0X3C 0X72 0X62 0 x21 0 x31 0 x41 0 x51 0 x61 0 x71 0 x81 0 x91 0 x61 0 x71 0 x81 0 x91 0X3F 0X3F 0X54 0XC2 0XC2 0X42 0XC2 0XC4 0X34 0X32 0X42 0X52 0XC2 0XC4 0XD2 0XC2 0X12 0X22 0X38 0X12 0X22 0X32 0X42 0X48 0 xFF 第六首 老鼠爱大米 unsigned char code song6 0 x32 0 x31 0 x41 0 x52 0 x52 0 x42 0 x31 0 x41 0 x44 0 x31 0 x41 0 x52 0 x52 0 x42 0 x32 0 x34 0 x71 0 x11 0 x74 0 x71 0 x71 0 x11 0 x31 0 x34 0 x32 0 x32 0 x32 0 x32 0 x31 0 x41 0 x44 0 x32 0 x41 0 x51 0 x52 0 x52 0 x72 0 x81 0 x41 0 x44 0 x52 0 x41 0 x31 0 x32 0 x32 0 x42 0 x51 0 x71 0 x74 0 x71 0 x71 0 x12 0 x31 0 x31 0 x31 0 x52 0 x42 0 x32 0 x32 0 x41 0 x31 0 x34 0 x52 0 x51 0 x71 0 x72 0 x71 0 x71 0 x72 0 x71 0 x81 0 x84 0 x52 0 x42 0 x32 0 x32 0 x32 0 x41 0 x51 0 x54 0 x51 0 x71 0 x72 0 x72 0 x72 0 x81 0 xA1 0 xA2 0 x82 0 x72 0 x52 0 x42 0 x32 0 x32 0 x12 0 x44 0 x51 0 x71 0 x72 0 x72 0 x71 0 x82 0 x71 0 x84 0 x52 0 x42 0 x32 0 x32 0 x32 0 x41 0 x51 0 x54 0 x51 0 x71 0 x72 0 x72 0 x72 0 x81 0 xA1 0 xA2 0 x82 0 x72 0 x51 0 x41 0 x42 0 x42 0 x44 0 x32 0 x51 0 x61 0 x72 0 x42 0 x44 0 x52 0 x41 0 x31 0 x34 0 x52 0 x41 0 x31 0 x34 0 x52 0 x42 0 x52 0 x32 0 x52 0 x81 0 x71 0 x74 0 x51 0 x71 0 x82 0 x81 0 x71 0 x72 0 x81 0 x71 0 x74 0 x51 0 x41 0 x31 0 x42 0 x41 0 x51 0 x42 0 x31 0 x41 0 x44 0 x52 0 x41 0 x31 0 x34 0 x52 0 x41 0 x31 0 x34 0 x52 0 x42 0 x52 0 x32 0 x52 0 x81 0 x71 0 x74 0 x51 0 x41 0 x82 0 x82 0 xA2 0 x71 0 x81 0 x72 0 x71 0 x51 0 x41 0 x31 0 x44 0 x41 0 x31 0 x41 0 x51 0 x44 0 x52 0 x52 0 x42 0 x31 0 x34 0 x52 0 x41 0 x31 0 x42 0 x31 0 x34 0 xFF 第七首心心相印 unsigned char code song7 85 0 x04 0 x24 0 x14 0 xC4 0 x54 0 x54 0 x48 0 x04 0 x54 0 x44 0 x34 0 x22 0 x14 0 xB2 0 xC8 0 x04 0 x12 0 xC2 0 x16 0 x12 0 x76 0 x52 0 x46 0 x12 0 x3F 0 x04 0 xB4 0 xD4 0 xC4 0 x14 0 x28 0 xC4 0 x14 0 x12 0 x32 0 x16 0 xC2 0 x54 0 x78 0 x34 0 x4C 0 x42 0 x52 0 x86 0 x72 0 x76 0 x52 0 x74 0 x28 0 x42 0 x52 0 x46 0 x12 0 x26 0 x12 0 xCF 0 x04 0 x24 0 x14 0 xC4 0 x56 0 x52 0 x48 0 x04 0 x54 0 x44 0 x34 0 x22 0 x14 0 xB2 0 xC8 0 x04 0 x34 0 x14 0 xC4 0 x12 0 x32 0 x18 0 x42 0 x42 0 x74 0 x58 0 x44 0 x3F 0 xFF 第八首 祈祷 unsigned char code song8 37 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x52 0 x52 0 x44 0 x32 0 x32 0 x12 0 x14 0 x12 0 x12 0 x32 0 x42 0 x54 0 x44 0 x4F 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x72 0 x58 0 x42 0 x32 0 x34 0 x14 0 x12 0 x32 0 x34 0 x32 0 x12 0 x1F 0 xFF 第九首 偏偏喜欢你 unsigned char code song9 0XC2 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X4C 0X42 0X32 0X74 0X82 0X74 0X82 0X72 0X52 0X41 0X38 0X32 0X42 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0XC2 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X4C 0X42 0X32 0X76 0X82 0X74 0X82 0X72 0X53 0X41 0X38 0X32 0X42 0X16 0XC2 0X72 0X52 0X41 0X51 0X12 0XCC 0XC2 0XB2 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0X32 0X32 0X26 0X22 0X24 0X42 0X32 0 x22 0 x12 0 x18 0 x02 0 x52 0X46 0X12 0X44 0X72 0X82 0X5C 0X52 0X52 0X46 0X42 0X74 0X42 0X32 0X36 0X42 0X58 0X82 0X72 0X62 0X52 0X46 0X32 0X3C 0X12 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X48 0X02 0X42 0X52 0X62 0X76 0X82 0X74 0X82 0X72 0X56 0X41 0X38 0X32 0X22 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0X04 0X04 0X04 0X04 0 xFF 延时 20ms void delay1 unsigned int m n for m 1000 m 0 m for n 120 n 0 n 上一首歌曲 void last delay1 if a 1 if song song1 song song9 P2 0 x90 else if song song2 song song1 P2 0 xb7 else if song song3 song song2 P2 0 x19 else if song song4 song song3 P2 0 x91 else if song song5 song song4 P2 0 xb4 else if song song6 song song5 P2 0 xd0 else if song song7 song song6 P2 0 x50 else if song song8 song song7 P2 0 x97 else if song song9 song song8 P2 0 x10 下一首歌曲 void next delay1 if b 1 if song song1 song song2 P2 0 x19 else if song song2 song song3 P2 0 x91 else if song song3 song song4 P2 0 xb4 else if song song4 song song5 P2 0 xd0 else if song song5 song song6 P2 0 x50 else if song song6 song song7 P2 0 x97 else if song song7 song song8 P2 0 x10 else if song song8 song song9 P2 0 x90 else if song song9 song song1 P2 0 xb7 void main TMOD 0 x01 timer0 工作在方式 1 IE 0 x82 EA 1 ETO 1 song song2 预置演奏第二首 P2 0 x19 while 1 j 0 while song j 0 xFF 是否取到结束码 if a 0 last break if b 0 next break if e 0 do while e 0 k song j 后 4 位为多少个 1 4 拍 l song j 4 song song j 中所放 的每个字节 前 4 位乘 2 表示为音符 频率在数组 yin 中的位置 TH0 yin 2 l 置初值 TL0 yin 2 l 1 TR0 1 起动定时器 0 if yin 2 l 0 xff SPK 1 for i k i 0 i 节拍 K 为多少就执行多少个 1 4 拍 delay TR0 0 j 回 main 每个音符的发声 void timer0 interrupt 1 using 1 TH0 yin 2 l TL0 yin 2 l 1 SPK SPK 延时 1 4 拍时间即 187ms void delay void unsigned int c d for c 150 c 0 c for d 100 d 0 d 八 有关声音产生的知识 表 1 C 调各音符频率与计数值 T 的对照表 音符 频率 Hz 简谱码 T 值 音符 频率 Hz 简谱码 T 值 低 1DO 262 63628 4FA 740 64860 1DO 277 63731 中 5SO 784 64898 低 2RE 294 63835 5SO 831 64934 2RE 311 63928 中 6LA 880 64968 低 3M 330 64021 6 932 64994 低 4FA 349 64103 中 7SI 988 65030 4FA 370 64185 高 1DO 1046 65058 低 5SO 392 64260 1DO 1109 65085 5SO 415 64331 高 2RE 1175 65110 低 6LA 440 64400 2RE 1245 65134 6 466 64463 高 3M 1318 65157 低 7SI 494 64524 高 4FA 1397 65178 中 1DO 523 64580 4FA 1480 65198 1DO 554 64633 高 5SO 1568 65217 中 2RE 587 64684 5SO 1661 65235 2RE 622 64732 高 6LA 1760 65252 中 3M 659 64777 6 1865 65268 中 4FA 698 64820 高 7SI 1967 65283 表 2 节拍与节拍码对照 节 拍 码 节 拍 数 节 拍 码 节 拍 数 1 1 4 拍 1 1 8 拍 2 2 4 拍 2 1 4 拍 3 3 4 拍 3 3 8 拍 4 1 拍 4 1 2 拍 5 1 又 1 4 拍 5 5 8 拍 6 1 又 1 2 拍 6 3 4 拍 8 2 拍 8 1 拍 A 2 又 1 2 拍 A 1 又 1 4 拍 C 3 拍 C 1 又 1 2 拍 F 3 又 3 4 拍 表 3 各调 1 4 节拍的时间设定 各调 1 8 节拍的时间设定 曲 调 值 DELAY 曲 调 值 DELAY 调 4 4 125 毫秒 调 4 4 62 毫秒 调 3 4 187 毫秒 调 3 4 94 毫秒 调 2 4 250 毫秒 调 2 4 125 毫秒 1 4 拍的延迟时间 187 毫秒 DELAY MOV R7 02 D2 MOV R4 187 别的延迟值 只需修改这儿的值为相应值 即 可 D3 MOV R3 248 DJNZ R3 DJNZ R4 D3 DJNZ R7 D2 DJNZ R5 DELAY 节拍值放在 R5 决定节拍 RET 建立音乐的步骤 1 先把乐谱的音符找出 然后建立 T 值表的顺序 2 把 T 值表建立在 TABLE1 构成发音符是计数值放在 TABLE 3 简谱码 音符 为高位 节拍为 节拍数 为低 4 位 音符节拍码放在程序 的 TABLE 处 相关知识 每一音符使用 1 个字节 字节的高 4 位代表音符的高低 低 4 位代表音符的 节拍 表 2 为节拍与节拍码的对照 如果 1 拍为 0 4 秒 1 4 拍是 0 1 秒 只 要设定延迟时间就可求得节拍的时间 假使 1 4 拍为 1DELAY 则 1 拍应为 4DELAY 以此类推 所以只要求得 1 4 拍的 DEALY 时间 其余的节拍就是 它的倍数 简 谱 发 音 简 谱 码 T 值 5 低音 SO 1 64260 6 低音 LA 2 64400 7 低音 TI 3 64524 1 中音 DO 4 64580 2 中音 RE 5 64684 3 中音 MI 3 64777 4 中音 FA 7 64820 5 中音 SO 8 64898 6 中音 LA 9 64968 7 中音 TI A 65030 1 高音 DO B 65058 2 高音 RE C 65110 3 高音 MI D 65157 4 高音 FA E 65178 5 高音 SO F 65217 不发音 0 节 拍 码 节 拍 数 1 1 4 拍 2 2 4 拍 3 3 4 拍 4 1 拍 5 1 又 1 4 拍 6 1 又 1 2 拍 8 2 拍 A 2 又 1 2 拍 C 3 拍 F 3 又 3 4 拍 编程思路如下 将常用的音符频率所对应的计数器初值放置在数组 yin 中 song1 song9 中所放的每个字节前 4 位乘 2 表示为音符频率在数组 yin 中的位置 后 4 位 为多少个 1 4 拍 如 0 x34 表示音符音符频率所对应的计数器初值为 yin 6 和 yin 7 节拍数为 1 拍 即 4 个 1 4 拍 1 4 拍定时可以采用汇编精确定时 要 求不太高的可以尝试用 C51 循环体来延时 9 首歌的选择依靠指针进行指向 九 关于本次设计元器件及原理的一点补充 定时器 计数器的应用 16 位的定时器 计数器实质上就是一个加 1 计数器 其控制电路受软件控制 切换 当定时器 计数器为定时工作方式时 计数器的加 1 信号由振荡器的 12 分 频信号产生 即每过一个机器周期 计数器加 1 直至计满溢出为止 显然 定

温馨提示

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

评论

0/150

提交评论