




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 毕业设计毕业设计 八音盒八音盒 班级 机电班级 机电 08020802 学号 学号 02020802090202080209 姓名 牛亚涛姓名 牛亚涛 1 摘要摘要 为了实现单片机控制音乐播放 此次毕业设计做出了尝试 即电子音乐盒的 设计 本设计采用了蜂鸣器发声来实现歌曲的播放 能保持基本音调不变 流畅 播放出歌曲 现选用 AT89C51单片机 主要设计模块包括数码管显示部分 功能 键盘部分 蜂鸣器发声部分 彩灯部分 数码管采用共阳极数码管 通过单片机 P1口控制 实现歌曲序号的显示 功能键盘采用按键开关 通过单片机 P3口控 制 实现歌曲播放顺序的调换和暂停播放功能 蜂鸣器由单片机的 P2口控制 实现歌曲播放 彩灯是由普通发光二极管代替 能实现单色长亮和闪烁效果 主 要工作过程是通过按下功能键实现上一首和下一首及暂停播放 同时有数码管显 示当前播放歌曲的序号 蜂鸣器播放出音乐 当播放最后一首夜曲时还伴有彩灯 闪烁 此次设计要利用单片机及 KeilC51编程软件编程和 PROTEUS 单片机仿真软 件和电子电工等方面知识 用 KeilC51编程软件编程 用 PROTEUS 单片机仿真软 件仿真 最后制作实物 将程序下载到单片机中 利用 I O 口产生一定频率的方 波 驱动蜂鸣器 发出不同的音调 从而演奏乐曲 关键词 AT89C51AT89C51单片机 蜂鸣器 七段显示数码管单片机 蜂鸣器 七段显示数码管 LEDLED 2 in order to achieve the single chip microcomputer control the graduation design music playback made try namely the design of electronic music box This design USES a voice to realize the buzzer songs can maintain basic tones broadcast changeless fluent plays songs Now choose AT89C51 microcontroller Main design module includes digital pipe display keyboard parts part function the lantern buzzer voice part part Digital tube is altogether anode digital tube through the single chip microcomputer control fulfilling the P1 mouth serial number display songs Function by button switches keyboard by single chip microcomputer control fulfilling the P3 mouth songs played order of exchange and suspend play function The buzzer by single chip microcomputer control fulfilling the P2 mouth songs played Lantern is by ordinary leds instead of can realize monochromatic long bright and flickering effect The main work process is realized by pressing the function keys on a and stop the next song and and also to have digital tube display the current song playlists serial Numbers music buzzer plays when playing one of his last when accompanied by lights flashing nocturnes This design USES singlechip and to KeilC51 programming software programming and PROTEUS single chip microcomputer simulation software and electronic electrician etc with KeilC51 programming knowledge with PROTEUS single chip microcomputer software programming simulation software simulation Finally making things will program downloaded to a single chip microcomputer the use of I O mouth produce certain frequencies of square wave driving making different tones buzzer thus playing music Keywords AT89C51 buzzer seven segment display digital tube LED 3 目录目录 一 单片机设计课程的目的和基本要求一 单片机设计课程的目的和基本要求 6 6 二 八音盒的设计要求二 八音盒的设计要求 6 6 三 课程设计任务书三 课程设计任务书 6 6 四 关于四 关于 AT89C51AT89C51 6 6 五 设计项目简介五 设计项目简介 8 8 六 总体设计六 总体设计 9 9 七 硬件原理及设计说明七 硬件原理及设计说明 10 10 八 软件设计流程图八 软件设计流程图 11 11 九 电路原理图九 电路原理图 1212 十一 程序清单十一 程序清单 1616 十二 程序输入窗口 编码及音乐程序十二 程序输入窗口 编码及音乐程序 2 21 1 十三 仿真和调试十三 仿真和调试 27 27 十四 元器件清单十四 元器件清单 2929 十五 电路总图 29 十六 实验总结十六 实验总结 2 29 9 致谢致谢 3131 参考文献 参考文献 3131 4 5 一 单片机毕业设计的目的和基本要求 毕业设计的基本要求有 1 在毕业设计过程中 学会使用 AT89C51 单片机及相应绘图软件 根据 设计要求设计 编程 运行 调试最后提供毕业设计报告 2 毕业设计应由学生本人结合学习到的和了解的知识去完成 3 认真编写毕业设计报告 二 八音盒的设计要求二 八音盒的设计要求 单片机八音盒的设计基本要求是设计一个八音盒 并且编写相应的软件 完 成八音盒的任务 该控制任务应完成下列功能 1 使用七段数码管显示目前演奏的歌曲编号 2 用按键操作来选择演奏哪一首歌曲 3 演奏时可以按键中断 三 课程设计任务书三 课程设计任务书 AT89C51 八音盒 本设计利用 AT89C51 单片机结合内部定时器 LCD 设计一个八音盒 按下单 键可以演奏预先设置的歌曲旋律 本设计可以学习 AT89C51 定时器程序设计 按键扫描及歌曲旋律简单直觉式输入法的设计方法 其文字型的基本功能为 1 使用 LCD 显示器来显示目前演奏的歌曲编号 2 具有 16 个按键操作来选择演奏哪一首歌曲 3 内建 10 首歌曲旋律 按下单 键可以演奏歌曲 4 演奏时可以按键中断 程序执行后工作指示 LED 闪动 表 示程序开始执行 按下单键 0 9 便可以演奏歌曲 歌曲演奏中 可以按键中断 四 关于四 关于 AT89C51 4 1 对于 对于 AT89C51 的性能介绍的性能介绍 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器 FPEROM Falsh Programmable and Erasable Read Only Memory 的低电压 高性能 CMOS8 位微 处理器 俗称单片机 该器件采用 ATMEL 高密度非易失存储器制造技术制造 与 工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 8 位 CPU 和闪烁存 储器组合在单个芯片中 ATMEL 的 AT89C51 是一种高效微控制器 为很多嵌入式 6 控制系统提供了一种灵活性高且价廉的方案 它可以提供以下的功能标准 1 4K 的字节闪烁存储器 2 128 字节随机存取数据存储器 3 32 个 I O 口 4 2 个 16 位定时 计数器 5 1 个 5 向量两级中断结构 6 1 个串行通信口 7 片内振荡器和时钟电路 4 2 AT89C51 的管脚介绍的管脚介绍 图 3 1 AT89C51 的管脚图 VCC 供电电压 GND 接地 P0 口 P0 口为一个 8 位漏级开路双向 I O 口 每脚可吸收 8TTL 门电流 当 P1 口的管脚第一次写 1 时 被定义为高阻输入 P0 能够用于外部程序数据存储 器 它可以被定义为数据 地址的第八位 在 FIASH 编程时 P0 口作为原码输入 口 当 FIASH 进行校验时 P0 输出原码 此时 P0 外部必须被拉高 P1 口 P1 口是一个内部提供上拉电阻的 8 位双向 I O 口 P1 口缓冲器能接 收输出 4TTL 门电流 P1 口管脚写入 1 后 被内部上拉为高 可用作输入 P1 口 被外部下拉为低电平时 将输出电流 这是由于内部上拉的缘故 在 FLASH 编程 和校验时 P1 口作为第八位地址接收 P2 口 P2 口为一个内部上拉电阻的 8 位双向 I O 口 P2 口缓冲器可接收 输出 4 个 TTL 门电流 当 P2 口被写 1 时 其管脚被内部上拉电阻拉高 且作 为输入 并因此作为输入时 P2 口的管脚被外部拉低 将输出电流 这是由于 内部上拉的缘故 P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行 7 存取时 P2 口输出地址的高八位 在给出地址 1 时 它利用内部上拉优势 当对外部八位地址数据存储器进行读写时 P2 口输出其特殊功能寄存器的内容 P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号 P3 口 P3 口管脚是 8 个带内部上拉电阻的双向 I O 口 可接收输出 4 个 TTL 门电流 当 P3 口写入 1 后 它们被内部上拉为高电平 并用作输入 作 为输入 由于外部下拉为低电平 P3 口将输出电流 ILL 这是由于上拉的缘故 P3 口也可作为 AT89C51 的一些特殊功能口 如下表所示 口管脚 备选功能 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断 0 P3 3 INT1 外部中断 1 P3 4 T0 记时器 0 外部输入 P3 5 T1 记时器 1 外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 P3 口同时为闪烁编程和编程校验接收一些控制信号 RST 复位输入当振荡器复位器件时 要保持 RST 脚两个机器周期的高电平时 ALE PROG 当访问外部存储器时 地址锁存允许的输出电平用于锁存地址的地位 字节 在 FLASH 编程期间 此引脚用于输入编程脉冲 在平时 ALE 端以不变的 频率周期输出正脉冲信号 此频率为振荡器频率的 1 6 因此它可用作对外部输 出的脉冲或用于定时目的 然而要注意的是 每当用作外部数据存储器时 将跳 过一个 ALE 脉冲 如想禁止 ALE 的输出可在 SFR8EH 地址上置 0 此时 ALE 只 有在执行 MOVX MOVC 指令是 ALE 才起作用 另外 该引脚被略微拉高 如果微 处理器在外部执行状态 ALE 禁止 置位无效 PSEN 外部程序存储器的选通信号 在由外部程序存储器取指期间 每个机器 周期两次 PSEN 有效 但在访问外部数据存储器时 这两次有效的 PSEN 信号将 不出现 8 五 设计项目简介五 设计项目简介 设计思路 设计思路 1 选择 AT89C51 单片机 通过 T0 定时中断 并配合 P3 0 引脚输出音 频频率 2 P3 0 引脚输出接扬声器 3 通过 P3 4 引脚接入中断按键 进行中断 4 通过 P0 接 8155 外扩端口 5 通过 8155PA 口接 LCD 驱动电路芯片 再接显示器 6 8155 的 PB PC 口接键盘 输入歌曲号 音符产生方法 音符产生方法 不同的音调有不同的频率 频率不同 音调也就不同 利用定时器 使其工作在模式 1 定时中断 然后控制 P3 0 引脚的输出每 次取反 就可以在 P3 0 的引脚输出相应的方波频率 改变计数初值 就改变了 频率 定时器的定时时间等于半个周期 定时时间到就输出脉冲取反 重复此过 程 就可在 P3 0 引脚得到一音频的脉冲 音乐中的节拍用延时时间产生 假设 1 4 拍执行一次延时程序 这 1 2 拍就执行 两次延时程序 所以只要求出 1 4 延时时间 其余的节拍就是他的倍数 为方便 记谱 将节拍数也进行编码 建立曲谱编码表 编谱用 8 位编码 高 4 位代表音符 低 4 位代表节拍 如 5 6 中音 5 中音 6 都是 1 2 拍 则编码为 82H 92H 9 六 总体设计六 总体设计 1 要产生音频脉冲 只要算出某一音频的周期 1 音频 然后将此周期除以 2 即为半周期的时间 利用定时器计时这个半周期时间 每当计时到后就将输出脉 冲的 I O 反相 然后重复计时此半周期时间再对 I O 口反相 就可在 I O 脚上得到 此频率的脉冲 2 利用 AT89C51 的内部定时器使其工作在计数器模式 MODE1 下 改变记数 值 TH0 及 TL0 以产生不同频率的方法 例如频率为 523HZ 其周期 T 1 523 1912 微秒 因此只要令计数器定时 956 1 956 在每记数 9 次时将 I O 口反相 就可得到 中音 D0 523HZ 记数脉冲值与频率的关系公式如下 N Fi 2 FrN 记数值 Fi 内部计时一次为 1 微秒 故其频率为 1MHZ Fr 要产生的频率 3 起记数值的求法如下 T 65536 N 65536 Fi 2 Fr 例如 设 K 65536 F 1000000 Fi 1MHZ 求低音 D0 523HZ 高音的 D0 1046HZ 的记数值 T 65536 N 65536 Fi 2 Fr 65536 1000000 2 Fr 65536 50000 0 Fr 低音 D0 的 T 65536 500000 262 63627 中音 D0 的 T 65536 500000 523 64580 低音 D0 的 T 65536 500000 1047 65059 表 4 1 调个音符频率与计数值 T 的对照表 音符频率简码值 T 值 音符频率简码值 T 值 低 IDO26263628 4FA 74064860 IDO 27763731中 5SO78464898 低 2RE29463853 5SO 83164934 2RE 31163928中 6LA88064968 低 3M33064021 693264994 低 4FA34964103中 7SI98865030 4FA 37064185高 IDO104665058 低 6SO39264260 IDO 110965085 5SO 41564331高 2RE117565110 10 低 6LA44064400 2RE 124565134 七 硬件原理及设计说明 当键盘有键按下时 判断键值 启动计数器 T0 产生一定频率的脉冲 驱 动蜂鸣器 放出乐曲 同时启动定时器 T1 显示歌曲号 1 硬件电路中用 分别接 S1 S2 作为上 下一曲的功能键0INT1INT 2 用 P1 0 P1 6 控制七段码 a b c d e f 3 用 P2 0 口控制喇叭 4 电路为 12MHZ 晶振频率工作 起振电路中 C1 C2 均为 30pf 11 八 软件设计流程图八 软件设计流程图 开始 初始化 设置音节起始位置 设置节拍间距 读取音阶 音符 显示当前播放 歌曲序号 节拍结束 音乐结束 12 九 电路原理图九 电路原理图 13 十 程序框图 14 15 十一 程序清单十一 程序清单 ORG 0000H SJMP MAIN ORG 0100H MAIN SETB EA SETB EX1 开外部中断 int0 MOV DPTR 8000H MOV A 30H MOVX DPTR A 令 8155a b 为输出 c 为输入 MOV R7 0BH ACALL SCREEN 显示器初始化为 00 DISPLAY ACALL SCAN 扫描键盘 ACALL SCREEN lcd 显示 CJNE R7 0FFH NEXT 判断中断是否选中曲目 SJMP DISPLAY 没选中 即无按键 NEXT ACALL MUSIC 选中曲目在 r7 中 CLR R7 SJMP MAIN 再次扫描 END ORG 0200H scan 子程序 SCAN MOV DPTR 8002H dptr 指向 b 口 MOV A 00H MOVX DPTR A 使 b 口输出低电平 MOV DPTR 8003H dptr 指向 pc 口 MOVX A DPTR 读 pc 口状态 ANL A 0FH 屏蔽高 4 位 CJNE A 0FH 若有键按下 则 keyscan SJMP EXIT 无键按下 则 exit KEYSCAN ACALL DY12MS 延时 12ms 去抖动 MOV R2 0EH 列扫描始值给 r2 MOV R3 04H 列数 4 给 r3 MOV R0 00H 列计算器清零 KEYSM1 MOV A R2 MOV DPTR 8002H dptr 指向 pb 口 MOVX DPTR A 列扫描 RL A MOV R2 A 列扫描左移一位 16 MOV DPTR 8003H dptr 指向 pc 口 MOVX A DPTR 读 pc 口行值 ANL A 0FH 屏蔽高 4 位 CJNE A 0FH JSADD 若按键在本列 则 jsadd INC R0 不在本列 r0 加 1 DJNE R3 KEYSM1 未扫描完一遍 扫描下一列 EXIT MOV A 0FFH 若无按键按下 则 a 未全 1 MOV R7 A SJMP DONE JSADD JB ACC 0 JSADD1 按键不在 l0 行 则 jsdaa1 MOV A 00H 按键在 l0 行 行首键号 00h 送 a AJMP JSADD4 JSADD1 JB ACC 1 JSADD2 MOV A 04H AJMP JSADD4 JSADD2 JB ACC 2 JSADD3 MOV A 08H AJMP JSADD4 JSADD3 JB ACC 3 JSADD4 MOV A 0CH JSADD4 ADD A R0 行首键号 列值送 a MOV DPTR KEYTAB dptr 指向键值表 MOVC A A DPTR 查表得键值送 a MOV R7 A DONE RET KEYTAB DB 01H 02H 03H 04H DB 05H 06H 07H 08H DB 09H 0AH 0FFH 0FFH DB 0FFH 0FFH 0FFH 0FFH DY12MS MOV R5 18H DY12MS1 MOV R6 0FFH DY12MS2 DJNZ R6 DY12MS2 DJNZ R7 DY12MS1 RET ORG 0300H screen 子程序 SCREEN CJNE R7 0FFH GO SJMP OVER GO DEC R7 MOV A R7 17 MOV DPTR GW 个位显示首地址送 dptr MOVC A A DPTR 查个位显示数值 MOV DPTR 8001H dptr 指向 pa 口 MOVX DPTR A 显示个位 ACALL TIME 延时 2ms MOV A R7 MOV DPTR SW 十位显示首地址送 dptr MOVC A A DPTR MOV DPTR 8001H MOVX DPTR A ACALL TIME INC R7 OVER RET GW DB 11H 21H 31H 41H 51H DB 61H 71H 81H 91H 01H 01H SW DB 02H 02H 02H 02H 02H DB 02H 02H 02H 02H 12H 02H TIME MOV R5 04H TM2 MOV R6 0FFH TM1 DJNZ R6 TM1 DJNZ T5 TM2 RET ORG 0400H music 子程序 MUSIC MOV TMOD 01H 设 t0 工作方式 1 MOV IE 82H 开 t0 中断 MOV 30H 00H NEXT0 CJNE R7 01H Q2 判断 r7 的值 若不是此值 则 r2 MOV DPTR MUSIC1 若是此值 将相应旋律首地址送 dptr AJMP R11 Q2 CJNE R7 02H Q3 MOV DPTR MUSIC2 AJMP R11 Q3 CJNE R7 03H Q4 MOV DPTR MUSIC3 AJMP R11 Q4 CJNE R7 04H Q5 MOV DPTR MUSIC4 AJMP R11 Q5 CJNE R7 05H Q6 18 MOV DPTR MUSIC5 AJMP R11 Q6 CJNE R7 06H Q7 MOV DPTR MUSIC6 AJMP R11 Q7 CJNE R7 07H Q8 MOV DPTR MUSIC7 AJMP R11 Q8 CJNE R7 08H Q9 MOV DPTR MUSIC8 AJMP R11 Q9 CJNE R7 09H Q10 MOV DPTR MUSIC9 AJMP R11 Q10 CJNE R7 010H Q11 MOV DPTR MUSIC10 Q11 MOV A 30H MOVC A A DPTR 取旋律编码 MOV R2 A CJNE A 00H NEXT1 CLR TR0 RET NEXT1 MOV A R2 ANL A 0FH 取节拍 低 4 位 MOV R5 A 取节拍时间存入 r5 MOV A R2 SWAP A ANL A 0FH 取音频值 高 4 位 JNZ A SING 判断音频值是否是 0 是 0 则不发音 CLR TR0 SJMP D1 SING DEC A MOV DPTR TABLEH 定时器初值高 8 位首地址送 dptr MOVC A A DPTR 查高 8 位初值 MOV 21H A 高 8 位初值存 21h MOV TH0 A 装高 8 位初值 MOV DPTR TABLEL 定时器初值低 8 位首地址送 dptr MOVC A A DPTR MOV 20H A MOV TL0 A SETB ET0 开定时器中断 SETB TR0 定时器开始计时 D1 LCALL DELAY CLR TR0 19 INC 30H 取旋律简谱码指针加 1 SJMP NEXT0 DELAY MOV R6 03 延时程序 D2 MOV R4 250 D3 MOV R3 50H D30 DJNZ R3 D30 DJNZ R4 D3 DJNZ R6 D2 DJNZ R5 DELAY CPL P3 1 RET ORG 000BH LJMP TOSEV ORG 0500H TOSEV PUSH ACC 保护现场 PUSH PSW CLR TR0 MOV TL0 20H 重装计数初值 MOV TH0 21H CPL P3 0 将 p3 0 位取反输出 产生音频方波 POP PSW POP ACC SETB TR0 RETI TABLEH DB 0F6H 0F7H 0F8H 0F8H DB 0F9H 0FAH 0FAH 0FBH DB 0FBH 0FCH 0FCH 0FCH DB 0FDH 0FDH 0FDH TABLEL DB 6FH 24H 1BH 8FH DB 5EH 17H 6BH 08H DB 92H 0EH 4BH 0AFH DB 0CH 36H 84H ORG 0013H 中断 int0 程序 SJMP PAUSE ORG 0600H PAUSE CLR R7 LJMP MAIN 20 十二 程序输入窗口 编码及音乐程序十二 程序输入窗口 编码及音乐程序 12 1 程序输入窗口程序输入窗口 图 12 1 keil5 环境下的程序输入窗口 12 2 编码编码 2表 7 1 拍与节拍的对照 节拍码节拍数节拍码节拍数 11 4 节拍11 8 拍 22 4 节拍21 4 拍 33 4 节拍33 8 拍 41 拍41 2 拍 51 又 1 4 节拍55 8 拍 61 又 1 2 节拍63 4 拍 82 拍81 拍 A2 又 1 2 节拍A1 又 1 节拍 C3 拍C1 又 1 2 节拍 F3 又 3 4 节拍 表 7 2 简谱对应的简谱码 T 值 节拍数 简谱发音简谱码T 值节拍码节拍数 5 低音 SO 1642601 1 4 拍 6 低音 LA 2644002 2 4 拍 21 7 低音 TI 3645243 3 4 拍 1 中音 DO 4645804 1 拍 2 中音 RE 5646845 1 又 1 4 拍 3 中音 MI 6647776 1 又 2 1 拍 4 中音 FA 7648208 2 拍 5 中音 SO 864898A 2 又 1 2 拍 6 中音 LA 964968C 3 拍 7 中音 TI A65030F 3 又 3 4 拍 1 高音 DO B65058 2 高音 RE C65110 3 高音 MI D65157 4 高音 FA E65178 5 高音 SO F65217 不发音 0 12 3 音乐程序音乐程序 OUT BIT P2 0 定义音频输出端口 p2 0 N EQU 6 歌曲总数 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 MAIN MOV SP 60H MOV DPTR TABLE DPRT 指向每首歌曲的入口地址的地址 MOV R0 30H R0 中存入数据 30H 这里在以 30H 开始的 单元存放每首歌曲的入口地址 其中 30H 31H 歌曲的节拍入口地址 32H 33H 存放歌曲音符入口地址 MOV R5 00H R5 中存放表 TABLE 中正在执行操作的序号 22 MOV R6 1 R6 存放正在设置入口信息的歌曲数 SET TAB 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 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 INC R0 INC R5 INC R6 设置完一首歌曲后 歌曲数加一 CJNE R61 是否设置完 没有便继续 否则进行下面的操作 对中断 计数器的相关参数进行设 置 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 开始工作 作中断用 SETB OUT 音频输出端口初始化 设置结束 23 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 取出第一节拍数 其实第一个节 拍不是歌曲的第一个节拍 而是表示几分音符 MOV 26H A 将取出的音符数 节拍数保存在职 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 MOV R1 A 不为 0 取出节拍数 ANL A 0FH MOV R2 A MOV A R1 SWAP A ANL A 0FH JNZ SING 音符不为 0 唱 CLR TR0 为 0 不唱 关频率发生器 24 SJMP SING1 SING DEC A 开始唱 进行相应的数据处理 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 11111001B 数码管显视第一 首歌曲编号 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 25 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 是最后一首吗 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 26 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 中断返回 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 数码管显视相应歌曲的编号 MOV B R0 对下首要演唱的歌曲的几分拍进行 调整 同时对 R0 中的内容进行保护 MOV R4 00H MOV R0 30H MOV A R7 ADD A R0 MOV R0 A MOV DPH R0 INC R0 27 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 中断返回 DELAY MOV 27H 26H 音符演奏时间控制 D2 MOV 28H 125 D3 MOV 29H 248 DJNZ 29H DJNZ 28H D3 DJNZ 27H D2 DJNZ R2 DELAY RET 十三 仿真和调试十三 仿真和调试 图 13 1 在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特种聚芳酯项目可行性研究报告
- 2025年中小学开展九一八防空演练方案4篇
- 防欺诈骗保知识培训总结课件
- 防控知识培训与监督课件
- 互联网彩票市场发展态势分析
- 数据共享协议重要注意事项
- 数据隐私保护教育-洞察及研究
- 麦味地黄肝肾改善研究-洞察及研究
- 餐饮供应链优化策略-洞察及研究
- 部队团课课件
- 二+宁夏闽宁镇:昔日干沙滩今日金沙滩(教学设计)-【中职专用】高二语文上(高教版2023职业模块)
- 地勘单位保密管理制度
- 四川电网新建电源并网服务指南(2025年)
- 青鸟消防系统常见故障分析培训课件
- 资产收购居间协议书
- 2025年初级注册安全工程师考试试卷及答案
- 教学能力比赛现场决赛30道答辩问题要点
- 《篮球教学课件》课件
- 库房供暖合同协议
- 码头项目事故案例
- 防雷安全知识培训课件
评论
0/150
提交评论