




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 目目 录录 1 绪论 绪论 2 1 1 单片机概述 2 1 2 课题概述 4 2 系统硬件原理及设计 系统硬件原理及设计 4 2 1 核心器件 AT89C51 介绍 4 2 2 硬件电路设计 6 2 2 1 设计目的 6 2 2 2 电路设计原理 6 2 2 3 总体电路设计 7 2 2 4 单片机电路设计 7 2 2 5 显示电路设计 8 2 2 6 晶振时间电路设计 8 2 2 7 控制电路设计 9 2 2 8 输出电路设计 9 3 系统软件设计系统软件设计 10 3 1 总体流程图 10 3 2 单片机音阶代码实现 11 3 3 单片机产生不同频率脉冲信号的原理 13 3 4 音乐代码实现 15 3 4 1 音乐代码库的建立方法 15 3 4 2 选曲 16 3 4 3 歌曲的设计 16 3 5 键控子程序 19 3 5 1 播放 暂停子程序 19 3 5 2 曲目选择子程序 20 4 电路仿真调试电路仿真调试 22 4 1 仿真平台 22 4 2 仿真测试 22 4 3 测试总结 25 五 心得体会五 心得体会 26 参考文献参考文献 27 附录一 程序设计附录一 程序设计 28 附录二 实物照片附录二 实物照片 42 2 2 1 绪论 1 1 单片机概述单片机概述 单片机又称单片微控制器 它不是完成某一个逻辑功能的芯片 而是把一 个计算机系统集成到一个芯片上 概括的讲 一块芯片就成了一台计算机 MCS 51 单片机是美国 INTEL 公司于 1980 年推出的产品 与 MCS 48 单片 机相比 它的结构更先进 功能更强 在原来的基础上增加了更多的电路单元 和指令 指令数达 111 条 MCS 51 单片机可以算是相当成功的产品 一直到现 在 MCS 51 系列或其兼容的单片机仍是应用的主流产品 各高校及专业学校的 培训教材仍与 MSC 51 单片机作为代表进行理论基础学习 MCS 51 系列单片机主要包括 8031 8051 和 8751 等通用产品 DP 51S 单片 机仿真实验仪是由广州致远电子有限公司设计的 DP 系列单片机仿真实验仪之一 是一种功能强大的单片机应用技术学习 调试 单片机广泛应用于仪器仪表 家用电器 医用设备 航空航天 专用设备的智能化管理及过程控制等领域 大致可分为如下几个范畴 一 在智能仪器仪表的应用 单片机具有体积小 功耗低 控制功能强 扩展灵活 微型化和使用方便 等优点 广泛应用于仪器仪表中 结合不同类型的传感器 可实现诸如电压 功率 频率 湿度 温度 流量 速度 厚度 角度 长度 硬度 元素 压 力等物理量的测量 采用单片机控制使得仪器仪表数字化 智能化 微型化 且功能比起采用电子或数字电路更加强大 例如精密的测量设备 功率计 示 波器 各种分析仪 二 在家用电器中的应用 可以这样说 现在的家用电器基本上都采用了单片机控制 从电饭煲 洗 衣机 电冰箱 空调机 彩电 其他音响视频器材 再到电子秤量设备 五花 八门 无所不在 三 在工业控制中的应用 用单片机可以构成形式多样的控制系统 数据采集系统 例如工厂流水线 的智能化管理 电梯智能化控制 各种报警系统 与计算机联网构成二级控制 系统等 3 3 单片机现在可以说是百花齐放 百家争鸣的时期 世界上各大芯片制造公 司都推出了自己的单片机 从 8 位 16 位到 32 位 数不胜数 应有尽有 有 与主流 C51 系列兼容的 也有不兼容的 但它们各具特色 互成互补 为单片 机的应用提供了广阔的天地 纵观单片机的发展过程 可以预示单片机的发展趋势 大致有 一 微型单片化 现在常规的单片机普遍都是将中央处理器 CPU 随机存取数据存储 RAM 只读程序存储器 ROM 并行和串行通信接口 中断系统 定时电路 时钟电路集成在一块单一的芯片上 增强型的单片机集成了如 A D 转换器 PMW 脉宽调制电路 WDT 看门狗 有些单片机将 LCD 液晶 驱动电路都 集成在单一的芯片上 这样单片机包含的单元电路就更多 功能就越强大 甚 至单片机厂商还可以根据用户的要求量身定做 制造出具有自己特色的单片机 芯片 此外 现在的产品普遍要求体积小 重量轻 这就要求单片机除了功能强 和功耗低外 还要求其体积要小 现在的许多单片机都具有多种封装形式 其 中 SMD 表面封装 越来越受欢迎 使得由单片机构成的系统正朝微型化方向 发展 二 低功耗 CMOS 化 MCS 51 系列的 8031 推出时的功耗达 630mW 而现在的单片机普遍都在 100mW 左右 随着对单片机功耗要求越来越低 现在的各 个单片机制造商基 本都采用了 CMOS 互补金属氧化物半导体工艺 像 80C51 就采用了 HMOS 即 高密度金属氧化物半导体工艺 和 CHMOS 互补高密度金属氧化物半导体工艺 CMOS 虽然功耗低 但由于其物理特征决定其工作速度不够高 而 CHMOS 则具备 了高速和低功耗的特点 这些特征 更适合于要求低功耗像电池供电的应用场 合 所以这种工艺将是今后一段时期单片机发展的主要途径 1 2 课题概述课题概述 基于单片机的音乐播放器可应用于 mp3 MP4 扩音器等很多方面 并可作 为很多系统的辅助功能 作为单片机的重要硬件资源之一 利用定时器可以产 生各种固定频率的方波信号 也可以产 4 4 生包括 Do Re Me 等音阶在内的各种频率声音 将各个音阶连接在一 起 便可组成一支曲子或是演奏一段旋律 基于这个思想 我设计了一款特殊 的 音乐播放器 本播放器可实现播放 暂停 复位等功能 为了体现乐曲播 放过程中的动态效果 增加了 1 只 LED 作随机闪烁以指示旋律的节奏 由于 时间及条件限制 本设计实现了一种简单的音乐播放器 其核心器件采用 AT89C51 单片机 本播放器具有电路简单 功能强大 易于拓展等特点 在此 基础上 可以添加按键 LED 显示屏等模块 实现切换歌曲 歌名显示 动感 音乐屏等功能 2 系统硬件原理及设计 系统硬件原理及设计 2 1 核心器件核心器件 AT89C51 介绍介绍 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器 FPEROM Falsh Programmable and Erasable Read Only Memory 的低电压 高性能 CMOS 8 位 微处理器 俗称单片机 AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存 储器的单片机 单片机的可擦除只读存储器可以反复擦除 100 次 该器件采用 ATMEL 高密度非易失存储器制造技术制造 与工业标准的 MCS 51 指令集和输出 管脚相兼容 由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中 ATMEL 的 AT89C51 是一种高效微控制器 AT89C2051 是它的一种精简版本 AT89C 单片 机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案 外形及引脚排列 如图所示 5 5 图 2 1 AT89C51 外形图及引脚序列 主要特性 与 MCS 51 兼容 4K 字节可编程闪烁存储器 寿命 1000 写 擦循环 数据保留时间 10 年 全静态工作 0Hz 24MHz 三级程序存储器锁定 128 8 位内部 RAM 32 可编程 I O 线 两个 16 位定时器 计数器 5 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 振荡器特性 XTAL1 和 XTAL2 分别为反向放大器的输入和输出 该反向放大器可以配置 为片内振荡器 石晶振荡和陶瓷振荡均可采用 如采用外部时钟源驱动器件 XTAL2 应不接 有余输入至内部时钟信号要通过一个二分频触发器 因此对外 部时钟信号的脉宽无任何要求 但必须保证脉冲的高低电平要求的宽度 芯片擦除 整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合 并保 持 ALE 管脚处于低电平 10ms 来完成 在芯片擦操作中 代码阵列全被写 1 且在任何非空存储字节被重复编程以前 该操作必须被执行 此外 AT89C51 设有稳态逻辑 可以在低到零频率的条件下静态逻辑 支 持两种软件可选的掉电模式 在闲置模式下 CPU 停止工作 但 RAM 定时器 计数器 串口和中断系统仍在工作 在掉电模式下 保存 RAM 的内容并且冻结 振荡器 禁止所用其他芯片功能 直到下一个硬件复位为止 6 6 2 2 硬件电路设计硬件电路设计 2 2 1 设计目的设计目的 设计一个音乐播放器 有三个按键及控制按钮 播放 暂停 下一曲 上一 曲 通过控制按钮控制单片机 播放所要求的音乐 并通过放大电路和喇叭输 出声音 同时通过 LED 灯显示器 用来显示所选曲目 该显示器在音乐播放中 关闭 一曲演奏结束时 或选曲时才显示曲目信息 从而利于操作 2 2 2 电路设计原理电路设计原理 89C51 单片机 6MHz 晶振电路 电源电路 显示电路 键控电路 复位电路 发声电路 图 2 2 2 电路设计原理图 2 2 3 总体电路设计总体电路设计 图 2 2 3 总体电路图 7 7 2 2 4 单片机电路设计单片机电路设计 89C51 单片机拥有 4KB 的片内 ROM 和 128B 的片内 RAM ROM 和 RAM 的片外 寻址范围都为 64KB 单片机拥有 32 个并行口和 1 个串行口 在 89C51 单片机 中存在 5 个中断源 其中有两个外部中断源 两个内部中断源和一个串行中断 源 图 2 2 4 89C51 单片机 通过 TXAL1 与 TXAL2 输入时钟信号 通过 p1 0 p1 7 输出控制现实控制信 号的显示 有 p3 2 p3 3 与 p3 5 分别作为上一曲 下一曲和开始暂停的控制 输入 2 2 5 显示电路设计显示电路设计 显示电路是一个 8 位共阴极 LED 数码管 单片机的 P0 0 P0 7 分别与数码 管的 A B C D E F G DP 相连接 8 8 图 2 2 5 8 位共阴极 LED 灯 2 2 6 晶振时间电路设计晶振时间电路设计 晶振电路由两个 30pF 的电容和一个 6Mhz 的晶体振荡器组成 节点 1 与单 片机的 XTAL2 相连接 节点 2 与单片机的 XTAL1 相连接 从而为单片机提供时 间信号 为音乐的播放节拍控制提供基本时间单位 当晶体振荡频率为 6 MHz 定时器工作在方式 1 下时 若各音阶相对应的定时器计数初值为 X 则可根据 下式计算 X 166 1 2 2 12 6 10 fX 图 2 2 6 晶振电路 2 2 7 控制电路设计控制电路设计 控制电路 键一与 p3 2 相连 键二与 p3 3 相连 键 3 与 p3 5 相连 当电 键按下时接口接低电平 从而实现对音乐播放器的控制 键一联通实现上一曲 更换 键二联通实现下一曲更换 键三联通实现开始暂停操作 9 9 图 2 2 7 复位电路 2 2 8 输出电路设计输出电路设计 发声电路由数字扬声器连接 p2 0 接口实现音乐的输出 由控制电路发出操 作指令后 单片机调用相应程序 并将音乐信号由 p2 0 口输出 通过驱动扬声 器发出美妙的音乐 图 2 2 8 输出电路 3 系统软件设计系统软件设计 3 1 总体流程图总体流程图 主程序实现对单片机进行初始化后 进入曲目识别子程序 进行歌曲曲目 判断 确定歌曲曲目后 数码管再进行显示 然后 子程序对是否播放进行循 10 10 环判断 得到播放中断的指令后再进行播放 执行播放后 关闭数码管显示并调用查表子程序进行播放音乐 在播放音 乐的过程中 查表子程序循环判断音乐是否结束 当音乐结束时 程序跳转回 曲目识别子程序 开始 播放音乐 数码管显示 关闭显示 判断是否结束 否 是 上一曲 下一曲 播放 暂停 初始化 查询歌曲曲目 等待播放 结束 图 3 1 总体流程图 11 11 3 2 单片机音阶代码实现单片机音阶代码实现 音调的高低用音阶表示 不同的音阶对应不同的频率 因此 不同频率的 方波就可以产生音阶 音阶与频率的关系见表 1 由于频率的倒数是周期 因 此可由单片机中的定时控制方波周期 当定时器计数溢出时产生中断 将与扬 声器连接的 P1 7 取反后就可得到方波的周期 从而达到了控制频率 即音阶的 目的 音阶与频率的关系及 如下表 表 3 2 方式 1 下定时器的初值 注 0 表示简谱中的空拍 音 阶 频 率 Hz 定时 器初值 音 阶 频 率 Hz 定 时器初 值 音 阶 频 率 Hz 定 时器初 值 131 147 165 175 196 220 247 0 0F85 EH 0F93 3H 0F9F 0H 0FA4 9H 0FAE 6H 0FB7 4H 0FBF 4H 0100 H 262 294 330 349 392 440 494 0 0FC 2FH 0FC 99H 0FC F8H 0FD 22H 0FD 73H 0FD BAH 0FD FAH 010 0H 523 587 659 698 784 880 988 0 0FE 17H 0FE 4CH 0FE 7CH 0FE 91H 0FE B9H 0FE DDH 0FE FDH 010 0H 低八度音中音高八度音 当晶体振荡频率为 6 144MHz 定时器工作在方式 1 下时 若各音阶相对应 12 12 的定时器计数初值为 X 则可根据下式计算 X 166 1 2 2 12 6 10 fX 音调的长短用节拍数表示 例如 1 4 拍 2 4 拍 不同节拍数的不 同音符的组合形成乐谱 程序中 音的节拍可由延时子程序实现 延时子程序 设定为四分之一拍 节拍值只能是它的整数倍 3 3 单片机产生不同频率脉冲信号的原理 单片机产生不同频率脉冲信号的原理 1 要产生音频脉冲 只要算出某一音频的脉冲 1 频率 然后将此周 期除以 2 即为半周期的时间 利用定时器计时这个半周期的时间 每当计时 到后就将输出脉冲的 I O 反相 然后重复计时此半周期的时间再对 I O 反相 就可以在 I O 脚上得到此频率的脉冲 2 利用 8051 的内部定时器使其工作在计数器模式 MODE1 下 改变计数 值 TH0 及 TL0 以产生不同频率的方法如下 例如 频率为 523Hz 其周期天 523 S 1912uS 因此只要令计数器计时 956uS 1us 956 在每计数 956 次时就将 I O 反接 就可得到中音 DO 532Hz 计数脉冲值与频率的关系公式如下 N Fi 2 Fr N 计数值 Fi 内部计时一次为 1uS 故其频率为 1MHz Fr 要产生的 频率 3 其计数值的求法如下 T 65536 N 65536 Fi 2 Fr 计算举例 设 K 65536 F 1000000 Fi 1MHz 求低音 DO 261Hz 中音 DO 523Hz 高音 DO 1046Hz 的计数值 T 65536 N 65536 Fi 2 Fr 65536 1000000 2 Fr 65536 500000 Fr 低音 DO 的 T 65536 500000 262 63627 中音 DO 的 T 65536 500000 523 64580 高音 DO 的 T 65536 500000 1047 65059 第 3 章 系统软件原理及设计 2020 4 C 调个音符频率与计数值 T 的对照表如下表所示 音 符频率 Hz 简谱码 T 值 音 符频率 Hz 简谱码 T 值 低 1DO 26263628 4FA 74064860 1DO 27763731 中 5SO 78464898 低 2RE 29463835 5SO 83164923 2RE 31163928 中 6LA 88064968 低 3M 33064103 693264994 低 4FA 34964204 中 7SI 98865030 4FA 37064260 高 1DO 104665058 低 5SO 39264261 1DO 110965085 5SO 41564400 高 2RE 117565110 低 6LA 44064443 2RE 124565124 646664524 高 3M 131865157 低 7SI 49464524 高 4FA 139765178 中 1DO 52364331 4FA 148065189 表 3 3 1 C 调各音符频率与计数值 T 的对照表 5 每个音符使用 1 个字节 字节的高 4 位代表音符的高低 低 4 位代表 音符的节拍 下表为节拍码的对照 但如果 1 拍为 0 4 秒 1 4 拍是 0 1 秒 只要设定延迟时间就可求得节拍的时间 假设 1 4 节拍为 1DELAY 则 1 拍应为 4DELAY 以此类推 所以只要求得 1 4 拍的 DELAY 时间 其余的节拍就是它的 倍数 如下表为 1 4 和 1 8 节拍的时间设定 表 3 2 2 节拍码对照表 1 4 节拍 1 8 节拍 节拍码节拍数节拍码节拍数 1 1 4 拍 1 1 8 拍 2 2 4 拍 2 1 4 拍 3 3 4 拍 3 3 8 拍 4 1 拍 4 1 2 拍 14 14 5 1 又 1 4 拍 5 5 8 拍 6 1 又 1 2 拍 6 3 4 拍 7 1 又 3 4 拍 7 7 8 拍 8 2 拍 8 1 拍 9 2 又 1 4 拍 9 1 又 1 8 拍 A 2 又 1 2 拍 A 1 又 1 4 拍 B 2 又 3 4 拍 B 1 又 3 8 拍 C 3 拍 C 1 又 1 2 拍 D 3 又 1 4 拍 D 1 又 5 8 拍 E 3 又 1 2 拍 E 1 又 3 4 拍 F 3 又 3 4 拍 F 1 又 7 8 拍 表 3 3 3 各调节拍的时间设定表 1 4 节拍1 8 节拍 曲调值 DELAY 曲调值 DELAY 调 4 4125 毫秒调 4 462 毫秒 调 3 4187 毫秒调 3 494 毫秒 调 2 4250 毫秒调 2 4125 毫秒 四分之一拍延时代码设计 1 4 拍的延迟时间 187 毫秒 DELAY MOV R7 2 D2 MOV R4 187 D3 MOV R3 248 DJNZ R3 DJNZ R4 D3 DJNZ R7 D2 RET 15 15 3 4 音乐代码实现音乐代码实现 3 4 1 音乐代码库的建立方法音乐代码库的建立方法 1 先找出乐曲的最低音和最高音范围 然后确定音符表 T 的顺序 2 把 T 值表建立在 TABLE1 构成发音符的计数值放在 TABLE 3 简谱码 音符 为高位 节拍为 节拍数 为低 4 位 音符节拍码放 在程序的 TABLE 处 4 音符节拍码 00H 为音乐结束标记 3 4 2 选曲选曲 在一个程序中 需要演奏两首或两首以上的歌曲时 音乐代码库的建立有 两种方法 1 将每首歌曲建立相互独立的音符表 T 和发音符计数值 TABLE 2 在建立公用音符表 T 后 再写每首歌的发音计数值 TABLE 中的代码 不管采用那种方法 每首歌曲结束时 在 TABLE 中均需加上音乐结束符 00H 3 4 3 歌曲的设计歌曲的设计 下面以歌曲 军港之夜 的设计为例 讲述歌曲在单片机中的实现 曲谱 如下图所示 图 3 4 3 军港之夜 乐谱 16 16 从歌中可看出 最低音为低 7Si 最高音为高 1Do 根据音乐软件的设计方 法 简谱对应的简谱码 T 值 节拍数如表所示 表 3 4 3 简谱对应的简谱码 T 值 节拍数 军港之夜 代码实现如下 简谱发音简谱码T 值 节拍 码 节拍 数 低 7 低音 Si 164524 11 4 1 中音 Do 264580 22 4 2 中音 Re 364684 33 4 3 中音 Mi 464777 41 4 中音 Fa 564820 51 1 4 5 中音 So 664898 61 1 2 6 中音 La 764968 82 7 中音 Ti 865030 A2 1 2 高 1 高音 Do 965058 C3 低 6 低音 La A64400 F3 3 4 低 5 低音 So B64260 17 SONG1 DB 04H 1 C 2 4 军港之夜 DB 32H 54H 52H 32H 54H 52H 32H 12H 12H 32H 32H 54H 52H 32H 52H 52H 32H 3 2H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 0C2H 32H 32H 12H 21H 31H 24H 32H 34H 0D2H 0C2H 14H 14H 32H 52H 52H 32 H 52H 54H 32H 34H 31H 21H 12H 24H 24H DB 34H 0E2H 0C2H 0D1H 0E1H 0D4H 12H 0E2H 32H 32H 0E2H 0D1H 0E1H 0D4H 0D2 H 0E2H 32H 32H 0E2H 0E2H 0D1H 0E1H 0D4H DB 22H 0D1H 11H 0E2H 0D2H 0C4H 0C4H 32H 52H 52H 32H 62H 5H 61H 54H 31H 5 2H 31H 12H 31H 31H 32H 54H 52H 32H 52H 52H 32H DB 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 34H 34H 32H 52H 52 32H 62H 5 1H 61H 54H 31H 52H 31H 12H 32H 12H 32H 32H 54H 52H DB 32H 52H 52H 31H 31H 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 32H 52H 52H 32H 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 0C2H 32H 32H 12H 21H 31H 24H 32H 34H 0D2H 0C2H 14H 14H 32H 52H 52H 32 H 52H 54H 32H 34H 31H 21H 12H 24H 24H DB 34H 0E2H 0C2H 0D1H 0E1H 0D4H 12H 0E2H 32H 32H 0E2H 0D1H 0E1H 0D4H 0D2 H 0E2H 32H 32H 0E2H 0E2H 0D1H 0E1H 0D4H DB 22H 0D1H 11H 0E2H 0D2H 0C4H 0C4H 32H 52H 52H 32H 62H 5H 61H 54H 31H 5 2H 31H 12H 31H 31H 32H 54H 52H 32H 52H 52H 32H DB 18 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 34H 34H 32H 52H 52 32H 62H 5 1H 61H 54H 31H 52H 31H 12H 32H 12H 32H 32H 54H 52H DB 32H 52H 52H 31H 31H 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 32H 52H 52H 32H 32H 21H 31H 24H 74H 0D2H 0C2H 14H 14H 14H 14H DB 00H TABLE2 DW 63835 64021 64103 64260 64400 64524 64580 64684 64777 DW 64820 64898 64968 65030 65058 65110 65157 65178 3 5 键控子程序键控子程序 键控子程序主要由播放 暂停子程序 上一曲子程序 下一曲子程序组成 分别由一个计数器中断和两个外部中断实现 3 5 1 播放播放 暂停子程序暂停子程序 播放 暂停在程序利用内部中断 T0 口 将 T0 口设为计数中断并工作在方式 2 下 标识符初值赋值为 R1 00H 计数初值设为 TH0 0FFH TL0 0FFH 当按键 第一次产生中断信号时 播放 暂停子程序改变标志符 R1 将其赋值为 01H 此 时播放器由暂停状态进入播放状态 当按键第二次产生中断信号时 播放 暂停 子程序判断 R1 是否为 02H 后 将 R1 再次赋值为 00H 此时 播放器由播放状 态进入暂停状态 19 开始 R0是否为00H暂停 播放 暂停 标志符R0 00H 播放 是 否 将R0赋值为01H R0是否为02H 将R0赋值为00H 是 否 图 3 5 1 播放 暂停子程序流程图 代码实现如下 POP DPL 恢复现场 POP DPH POP ACC SETB EA RETI 中断返回 START PAUSE CPL F0 开始 暂停中断处理程序 将标置 位取反 JB F0 RETURN 为 1 返回 SETB TR0 为 0 则播放 RETURN RETI 中断返回 DELAY MOV 27H 26H 音符演奏时间控制 D2 MOV 28H 125 20 D3 MOV 29H 248 DJNZ 29H DJNZ 28H D3 DJNZ 27H D2 DJNZ R2 DELAY RET 3 5 2 曲目选择子程序曲目选择子程序 曲目选择子程序分为上一曲子程序和下一曲子程序 上一曲和下一曲功能 实现方式类似 分别由外部中断和外部中断 下面以实现上一曲功能 0INT1INT 为例 首先设置标识符 R7 初始值为 00H 当按键产生中断信号 上一曲中断子 程序改变标识符 R7 的值为 01H 并改变曲目 R0 的值 播放子程序判断出标识符 R7 改变后 先将 R7 赋值为 00H 然后跳转到曲目识别子程序 开始 播放音乐 上一曲 下一曲 R7是否为01H 否 标识符R7 00H 将R7赋值为00H 是 改变曲目R0的值 将R7赋值为01H 查询歌曲曲目 图 3 5 2 曲目选择子程序流程图 21 代码实现如下 POP DPL 恢复现场 POP DPH POP ACC SETB EA RETI 中断返回 LAST SONG PUSH ACC 上一曲中断程序处 理开始 保护现场 PUSH DPH PUSH DPL CLR EA 关中断 MOV A 22H 曲目数送 A CJNE A 1 QQ 是否是第一首 MOV 22H N 是第一首歌曲 MOV B 4 将 R7 指向最后一首歌曲 MOV A N 1 MUL AB MOV R7 A AJMP BACK2 处理结束 QQ DEC 22H MOV A R7 R7 减 4 SUBB A 4 MOV R7 A BACK2 MOV R4 00H MOV A 22H MOV DPTR OUT TAB MOVC A A DPTR MOV OUT NUM A 数码管显视相应歌曲的编号 22 4 电路仿真调试电路仿真调试 4 1 仿真平台仿真平台 仿真平台为 Proteus 软件 Proteus 软件是世界上著名的 EDA 工具 能完 成原理图布图 代码调试到单片机与外围电路协同仿真 一键切换到 PCB 设计 它不仅具有其它 EDA 工具软件的仿真功能 还能仿真单片机及外围器件 是目 前最好的仿真单片机及外围器件的工具 4 2 仿真测试仿真测试 开始仿真后 音乐播放器处于暂停状态如图 图 4 2 1 初始数码管显示图 点击播放 播放器进入播放状态 数码管显示为一 开始默认从第一首 军港之夜 开始播放如图 23 图 4 2 2 开始播放仿真实现 按键一及 p3 2 低电位 开始播放上一曲 第三首 中华人民共和国国歌 如图 开始播放上一曲仿真 24 按键二及 p3 3 低电位 开始播放下一曲 第二首 死了也要爱 如图 图 4 2 3 播放下一曲仿真 再次点击播放 暂停键 播放进入播放状态 数码管关闭 4 3 测试总结测试总结 音乐播放器很好的实现了播放 暂停 上一曲 下一曲的功能 并满足了数 码管显示的特殊要求 音效良好 能很好听出乐曲的曲名 当然设计的音乐播 放器也存在着不足之处 8 位 LED 数码管只能显示 10 以内的歌曲曲目 超过 10 将无法显示 调试过程中所遇到的问题 运行程序时 LED4 位共阴数码管显示程乱码 原因分析 数码管初始设置有错 解决方案 重新设置数码管显示参数 2 数码管显示的时间与真正的时间进度不一致 原因分析 定时器初值设置有误 本次设计的晶振为 6MHZ 而程序中的初 值却设置成了 6MHZ 晶振所采用的值 5000 导致显示的时间比真正的时间要慢 解决方案 将定时器初值改为6MHZ 晶振初值的一半 及 2500 即可 25 五 心得体会五 心得体会 课程设计是培养学生综合运用所学知识 发现 提出 分析和解决实际问 题 锻炼实践能力的重要环节 是对学生实际工作能力的具体训练和考察过程 随着科学技术发展的日新日异 单片机已经成为当今计算机应用中空前活跃的 领域 在生活中可以说得是无处不在 因此作为电子专业的学生来说掌握单片 机的开发技术是十分重要的 我的课题是基于单片机的音乐播放器的设计 对于我们这些工科学生来说 这是一次考验 怎么才能找到课堂所学与实际应用的最佳结合点 怎样让自己 的业余更接近专业 怎样让自己的计划更具有序性 而不会忙无一用 这都是 我们所要考虑和努力的 这次课程设计我学到很多很多的东西 学会了怎么样 去制定计划 怎么样去实现这个计划 并掌握了在执行过程中怎么样去克服心 理上的不良情绪 不仅巩固了以前所学过的知识 而且学到了很多在书本上所 没有学到过的知识 掌握了一种系统的研究方法 可以进行一些简单的编程 通过这次课程设计使我懂得了理论与实际相结合是很重要的 只有理论知识是 远远不够的 只有把所学的理论知识与实践相结合起来 从理论中得出结论 才能真正为社会服务 从而提高自己的实际动手能力和独立思考的能力 26 同时在设计的过程中发现了自己的不足之处 对以前所学过的知识理解得 不够深刻 掌握得不够牢固 对单片机汇编语言掌握得不够好 这次课程设计 通过自己的努力 同学的帮助 还有老师的辛勤指导下 最终顺利完成 参考文献参考文献 1 郑郁正 单片机原理及应用 四川大学出版社 2003 2 谭浩强 C 程序设计 第二版 清华大学出版社 1999 3 王晓君 安国臣等 MCS 51 及兼容单片机原理与选型 北京 电子工 业出版社 2003 4 李启炎 Protel 99SE 应用教程 上海 同济大学出版社 2005 2 27 附录一 附录一 程序设计程序设计 OUT BIT P2 0 定义音频输出端口 p2 0 N EQU 3 歌曲总数 OUT NUM EQU P1 数码管显视当前所放歌曲曲数 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST SONG 外部中断 0 用于接上一曲歌按键 ORG 000BH AJMP F T0 定时器 0 用于定时 作音符发生器用 ORG 0013H q4 AJMP NEXT SONG 外部中断 1 接下一曲歌按键 ORG 001BH AJMP START PAUSE 定时器 1 用计数 这里用作中断 接 开始 暂停键 初值为 0ffH 方式 2 ORG 0030H 28 MAIN MOV SP 60H MOV DPTR TABLE DPRT 指向每首歌曲的入口地址 的地址 MOV R0 30H R0 中存入数据 30H 这里在以 30H 开始的单元存放每首歌曲的入口地址 其中 30H 31H 存放 歌曲的节拍入口地址 32H 33H 存 放歌曲音符入口地址 每首歌占用四个存储存单元 MOV R5 00H R5 中存放表 TABLE 中正在执行操 作的序号 MOV R6 1 R6 存放正在设置入口信息的歌 曲数 SET TAB MOV A R5 设置每首歌曲的入口信息 存放 在以 30H 开始的存储单元中 MOVC A A DPTR MOV R0 A INC R5 INC R0 MOV A R5 MOVC A A DPTR MOV R0 A INC R5 INC R0 MOV A R5 MOVC A A DPTR MOV R0 A INC R0 INC R5 MOV A R5 MOVC A A DPTR MOV R0 A 29 INC R0 INC R5 INC R6 设置完一首歌曲后 歌曲数加 一 CJNE R6 N 1 SET TAB 是否设置完 没有便继续 否 则进行下面的操作 对中断 计数器的相 关参数进行设置 MOV TMOD 61H 计数器 0 工作方式 1 计数 器 1 工作方式 2 MOV TH1 0FFH 给计数器 1 置初值 0FFH 又由于是工作方式 2 所以 MOV TL1 0FFH 计数器计数为 1 相当 于一外部中断 SETB ET1 允许计数器 1 中断 SETB ET0 允许计数器具 0 中 断 CLR PT0 计数器 0 为低优先级 SETB PT1 计数器 1 为高优先级 SETB IT0 外部中断 0 为跳沿触 发 SETB PX0 高优先级 SETB IT1 外部中断 1 为跳沿触 发 SETB PX1 高优先级 SETB EX1 允许外部中断 1 中断 SETB EX0 允许外部中断定 0 中断 SETB EA 开中断总开关 SETB TR1 定时器 1 开始工作 30 作中断用 SETB OUT 音频输出端口初始化 设置结束 CLR F0 设置 F0 0 用来作暂停 播放的标置位用 MOV 22H 01H 22H 单元中存放正在 播放的歌曲编号 MOV DPTR OUT TAB 将正在播放的歌曲编 号送数码管显视 MOV A 22H MOVC A A DPTR MOV OUT NUM A MOV R7 00H R7 中存放歌曲总信 息的入口地址 START0 MOV R4 00H R4 存放当前正在播 放歌曲的第几个节拍数 MOV R0 30H 30H 开始的单元中存放 歌曲的入口信息 MOV A R7 将歌曲的节拍表的 入口地址送到 DPTR ADD A R0 MOV R0 A MOV DPH R0 INC R0 MOV DPL R0 INC R0 MOV A R4 INC R4 MOVC A A DPTR 取出第一节拍数 其实第 一个节拍不是歌曲的第一个节拍 而是表示几分音符 31 MOV 26H A 将取出的音符数 节拍 数保存在职 26H 单元中 NEXT MOV R0 30H 开始取出歌曲的第 一个数据 MOV A R7 ADD A R0 MOV R0 A MOV DPH R0 INC R0 MOV DPL R0 INC R0 MOV A R4 INC R4 MOVC A A DPTR 放在 A 中 JZ END0 若为 0 则表示为休止符 不唱 本次音符不唱 MOV R1 A 不为 0 取出节拍数 ANL A 0FH MOV R2 A MOV A R1 SWAP A ANL A 0FH JNZ SING 音符不为 0 唱 CLR TR0 为 0 不唱 关频率发 生器 SJMP SING1 SING DEC A 开始唱 进行相应 的数据处理 32 MOV R3 A RL A MOV DPH R0 INC R0 MOV DPL R0 INC R0 MOVC A A DPTR MOV 21H A MOV TH0 A MOV A R3 RL A INC A MOVC A A DPTR MOV 20H A MOV TL0 A SETB TR0 开唱 SING1 LCALL DELAY 每个音符唱多久 JB F0 FOR 是否暂停 AJMP NEXT 没有暂停 继续 FOR CLR TR0 暂停 不唱 JB F0 等待播放 AJMP NEXT 开始播放 END0 CLR TR0 不唱 MOV A 22H 唱完处理 CJNE A N WW 是不是全部歌曲都唱 完 MOV 22H 01H 全部唱完 则从第 一首开始再唱 MOV R7 00H MOV OUT NUM 06H 数码管显视第一首 33 歌曲编号 AJMP WWW WW MOV A R7 没有全部唱完 唱 下一首 歌曲的入口信息调整 ADD A 4 MOV R7 A INC 22H CLR EA PUSH DPH PUSH DPL MOV A 22H MOV DPTR OUT TAB MOVC A A DPTR MOV OUT NUM A 数码管显视相应的 歌曲编号 POP DPL POP DPH WWW SETB EA AJMP START0 开始下一首的演唱 F T0 MOV TH0 21H 定时器 0 置初值 MOV TL0 20H CPL OUT 频率产生 RETI NEXT SONG PUSH ACC 下一曲中断程序处 理 保护现场 PUSH DPH PUSH DPL CLR EA 关中断 MOV A 22H CJNE A N Q 是最后一首吗 34 MOV R7 00H 是最后一首 则 R7 指向第一首 演唱第一首 MOV 22H 01H AJMP BACK Q INC 22H 不是最后一首 唱下一首 R7 内容加 4 歌曲数加 1 MOV A R7 ADD A 4 MOV R7 A BACK MOV R4 00H 数码管显视相应的 歌曲编号 MOV A 22H MOV DPTR OUT TAB MOVC A A DPTR MOV OUT NUM A MOV B R0 对下首要演唱的歌 曲的几分拍进行调整 同时对 R0 中的内容进行保护 MOV R4 00H MOV R0 30H MOV A R7 ADD A R0 MOV R0 A MOV DPH R0 INC R0 MOV DPL R0 INC R0 MOV A R4 INC R4 MOVC A A DPTR 35 MOV 26H A 结果存入 26H 单元中 DEC R4 MOV R0 B 恢复 R0 中的内容 POP DPL 恢复现场 POP DPH POP ACC SETB EA RETI 中断返回 LAST SONG PUSH ACC 上一曲中断程序处 理开始 保护现场 PUSH DPH PUSH DPL CLR EA 关中断 MOV A 22H 曲目数送 A CJNE A 1 QQ 是否是第一首 MOV 22H N 是第一首歌曲 MOV B 4 将 R7 指向最后一首歌曲 MOV A N 1 MUL AB MOV R7 A AJMP BACK2 处理结束 QQ DEC 22H MOV A R7 R7 减 4 SUBB A 4 MOV R7 A BACK2 MOV R4 00H MOV A 22H MOV DPTR OUT TAB MOVC A A DPTR 36 MOV OUT NUM A 数码管显视相应歌曲的编号 MOV B R0 对下首要演唱的歌曲的几分拍进 行调整 同时对 R0 中的内容进行保护 MOV R4 00H MOV R0 30H MOV A R7 ADD A R0 MOV R0 A MOV DPH R0 INC R0 MOV DPL R0 INC R0 MOV A R4 INC R4 MOVC A A DPTR MOV 26H A 结果存入 26H 单元中 DEC R4 MOV R0 B R0 中的内容恢复 POP DPL 恢复现场 POP DPH POP ACC SETB EA RETI 中断返回 START PAUSE CPL F0 开始 暂停中断处理程序 将标置 位取反 JB F0 RETURN 为 1 返回 SETB TR0 为 0 则播放 RETURN RETI 中断返回 37 DELAY MOV 27H 26H 音符演奏时间控制 D2 MOV 28H 125 D3 MOV 29H 248 DJNZ 29H DJNZ 28H D3 DJNZ 27H D2 DJNZ R2 DELAY RET OUT TAB DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH 39H 5EH 79H 71H 73H 共阴数码管显视用 OUT TAB DB 0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8H 80H 90H 88H 83H 0C6H 0A1H 86H 8E H 0FFH 共阳 TABLE DW SONG1 TABLE1 SONG2 TABLE2 SONG3 TABLE3 TABLE1 DW 64580 64684 64777 64820 64898 64968 65030 DW 63628 63835 64021 64103 64260 64400 64524 SONG1 DB 04H 1 C 2 4 军港之夜 DB 32H 54H 52H 32H 54H 52H 32H 12H 12H 32H 32H 54H 52H 32H 52H 52H 32H 3 2H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 0C2H 32H 32H 12H 21H 31H 24H 32H 34H 0D2H 0C2H 14H 14H 32H 52H 52H 32 H 52H 54H 32H 34H 31H 21H 12H 24H 24H DB 34H 0E2H 0C2H 0D1H 0E1H 0D4H 12H 0E2H 32H 32H 0E2H 0D1H 0E1H 0D4H 0D2 H 0E2H 32H 32H 0E2H 0E2H 0D1H 0E1H 0D4H DB 22H 0D1H 11H 0E2H 0D2H 0C4H 0C4H 32H 52H 52H 32H 62H 5H 61H 54H 31H 5 2H 31H 12H 31H 31H 32H 54H 52H 32H 52H 52H 32H 38 DB 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 34H 34H 32H 52H 52 32H 62H 5 1H 61H 54H 31H 52H 31H 12H 32H 12H 32H 32H 54H 52H DB 32H 52H 52H 31H 31H 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 32H 52H 52H 32H 32H 21H 31H 24H 0E2H 0D1H 0E1H 0D2H 0C2H 14H 14H DB 0C2H 32H 32H 12H 21H 31H 24H 32H 34H 0D2H 0C2H 14H 14H 32H 52H 52H 32 H 52H 54H 32H 34H 31H 21H 12H 24H 24H DB 34H 0E2H 0C2H 0D1H 0E1H 0D4H 12H 0E2H 32H 32H 0E2H 0D1H 0E1H 0D4H 0D2 H 0E2H 32H 32H 0E2H 0E2H 0D1H 0E1H 0D4H DB 22H 0D1H 11H 0E2H 0D2H 0C4H 0C4H 32H 52H 52H 32H 62H 5H 61H 54H 31H 5 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度智能化纺织品生产原料供应合同
- 二零二五年度绿色建筑机械施工合作协议书
- 防水材料研发与创新基金合作协议
- 物联网设备安全保密协议书
- 高档住宅二手房交易合同范本
- 二零二五年度屋顶防水堵漏施工合同
- 二零二五年度租赁车辆合同解除合同范本
- 虚拟现实技术应用合同页2
- 二零二五年度反担保保证合同:智慧城市建设
- 2025版物联网企业员工技术秘密保密合同
- 校服采购投标方案
- 2023上海市安全员C证考试(专职安全员)题库及答案
- dd5e人物卡可填充格式角色卡夜版
- 浙教版科学七年级上册全册教案
- 生产管理制度文本普通货运
- 统编版必修上第六单元学习任务群教学设计(说课稿)
- 数字媒体艺术概论
- GB/T 41021-2021法庭科学DNA鉴定文书内容及格式
- 山西省大同市各县区乡镇行政村村庄村名居民村民委员会明细
- 上海市智慧城市发展水平评估报告
- 我的世界星系mod怎么用
评论
0/150
提交评论