单片机-电子琴演奏_第1页
单片机-电子琴演奏_第2页
单片机-电子琴演奏_第3页
单片机-电子琴演奏_第4页
单片机-电子琴演奏_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

0 目录目录 目录目录 1 一 设计内容一 设计内容 2 二 方案讨论二 方案讨论 2 三 电路原理图三 电路原理图 3 四 程序设计四 程序设计 6 五 电子琴发声原理五 电子琴发声原理 9 六 调试结果六 调试结果 9 七 电子琴程序七 电子琴程序 10 八 参考文献八 参考文献 18 1 一 设计内容一 设计内容 一 设计题目 一 设计题目 电子琴演奏 二 目的要求 二 目的要求 1 使用 4 4 矩阵式键盘设计出 16 个音符 随意弹奏 2 用功能键可转换成 3 首不同的歌曲演奏 二 方案讨论二 方案讨论 一 方案一一 方案一 用 4 4 矩阵式键盘控制 16 个音符 用三个独立按键作为功能键 实现三首 不同歌曲的演奏 方案二方案二 通过一个开关控制 4 4 矩阵式键盘的功能转换 同时控制 16 个音符和歌曲 的演奏 方案一虽然用的按键相对较多 但是整体结构简单明了 便于理解和编程 而且音符和 歌曲两部分不易产生干扰 方案二结构紧凑 电路简单 但程序较为繁琐 易产生干扰 故 采用第二种方案 二 方案图 二 方案图 AT89C52 1616 个音符的个音符的 4 44 4 按键电路按键电路 自动音乐播放的三自动音乐播放的三 个独立按键电路个独立按键电路 时钟电路时钟电路 复位电路复位电路 功放驱动电路功放驱动电路 LM386 2 三 面板布置图 三 面板布置图 四 设计任务 四 设计任务 1 电路结构设计 在 PROTEUS 中绘制电子琴各部分的电路 能量流要正确 2 软件设计 用汇编语言编写程序 实现电子琴的功能 3 调试仿真 将编译生成的 hex 文件导入芯片 进行仿真 三 电路原理图三 电路原理图 一 时钟电路 一 时钟电路 3 二 复位电路 二 复位电路 4 三 功放驱动电路及 三 功放驱动电路及 LM386LM386 四 四 4 44 4 矩阵式键盘电路矩阵式键盘电路 五 三个控制自动音乐播放的独立按键电路 五 三个控制自动音乐播放的独立按键电路 5 六 整体电路 六 整体电路 四 程序设计四 程序设计 一 主程序框图 一 主程序框图 开始开始 程序初始化程序初始化 音乐播放按键是否按下 音乐播放按键是否按下 自动音乐播放程序自动音乐播放程序 YN 1616 音阶程序音阶程序 结束结束 6 二 二 1616 音阶程序框图音阶程序框图 三 三 T0T0 中断服务程序框图中断服务程序框图 四 自动音乐播放程序框图 四 自动音乐播放程序框图 Y Y N N 返 回 7 音乐播放程序 识别按键功能 开中断 设置工作方 式 取简谱码 取节拍 A 0 Y STOP N A 0FFH Y INC DPTR N 插乐谱表 给定时器赋值 计时 进入中断 退出中断 延时 8 五 电子琴发声原理五 电子琴发声原理 一首音乐是许多不同的音阶组成的 而每个音阶对应着不同的频率 这样我们就可以利 用不同的频率的组合 即可构成我们所想要的音乐了 当然对于单片机来产生不同的频率非 常方便 我们可以利用单片机的定时 计数器 T0 来产生这样方波频率信号 因此 我们只要 把一首歌曲的音阶对应频率关系弄正确即可 现在以单片机 12MHZ 晶振为例 例出高中低音 符与单片机计数 T0 相关的计数值如下表所示 音符频率 HZ 简谱码 T 值 音符频率 HZ 简谱码 T 值 低 1 DO 26263628 4 FA 74064860 1 DO 27763731 中 5 SO 78464898 低 2 RE 29463835 5 SO 83164934 2 RE 31163928 中 6 LA 88064968 低 3 M 33064021 693264994 低 4 FA 34964103 中 7 SI 98865030 4 FA 37064185 高 1 DO 104665058 低 5 SO 39264260 1 DO 110965085 5 SO 41564331 高 2 RE 117565110 低 6 LA 44064400 2 RE 124565134 646664463 高 3 M 131865157 低 7 SI 49464524 高 4 FA 139765178 中 1 DO 52364580 4 FA 148065198 1 DO 55464633 高 5 SO 156865217 中 2 RE 58764684 5 SO 166165235 2 RE 62264732 高 6 LA 176065252 中 3 M 65964777 6186565268 中 4 FA 69864820 高 7 SI 196765283 六 调试结果六 调试结果 在 Keil 软件中进行了程序的编写 调试以及编译 软件显示程序没有错误 将 Keil 软 件编译生成的 hex 文件导入芯片中进行仿真 很好的实现了 16 个音阶的演奏 乐曲播放部 9 分的功能实现的不是特别好 七 电子琴程序七 电子琴程序 T0TH EQU 24H T0 两个暂存变量 T0TL EQU 23H KEYBUF EQU 30H STH0 EQU 31H STL0 EQU 32H TEMP EQU 33H ORG 00H LJMP MAIN ORG 0BH LJMP INT T0 ORG 001BH LJMP INT T1 MAIN MOV P2 0FFH MOV A P2 LCALL DELAY CPL A JNZ JIMP1 JZ JIMP2 JIMP1 LCALL START2 如果控制音乐的键按下 跳转到音乐程序 否则执行音阶 程序 JIMP2 LCALL START1 音阶程序 START1 MOV TMOD 01H 设置 T0 的工作方式 SETB ET0 SETB EA WAIT1 MOV P3 0FFH P3 为输入模式 CLR P3 4 扫描第一行 MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY1 MOV A P3 ANL A 0FH CJNE A 0EH NK1 MOV KEYBUF 0 LJMP DK1 NK1 CJNE A 0DH NK2 K1 键按下 MOV KEYBUF 1 10 LJMP DK1 NK2 CJNE A 0BH NK3 K2 键按下 MOV KEYBUF 2 LJMP DK1 NK3 CJNE A 07H NK4 K3 键按下 MOV KEYBUF 3 LJMP DK1 NK4 NOP K4 键按下 DK1 MOV A KEYBUF MOV B 2 MUL AB MOV TEMP A MOV DPTR TABLE 指向表头 MOVC A A DPTR 查表 MOV STH0 A MOV TH0 A 数据高八位送给 TH0 INC TEMP MOV A TEMP MOVC A A DPTR MOV STL0 A MOV TL0 A 将数据低八位送给 TL0 SETB TR0 启动 T0 DK1A MOV A P3 ANL A 0FH XRL A 0FH JNZ DK1A CLR TR0 关 T0 NOKEY1 MOV P3 0FFH 设置 P3 为输入模式 CLR P3 5 扫描第二行 MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY2 LCALL DELAY 延时 10ms MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY2 MOV A P3 ANL A 0FH CJNE A 0EH NK5 MOV KEYBUF 4 LJMP DK2 NK5 CJNE A 0DH NK6 K5 键按下 11 MOV KEYBUF 5 LJMP DK2 NK6 CJNE A 0BH NK7 K6 键按下 MOV KEYBUF 6 LJMP DK2 NK7 CJNE A 07H NK8 K7 键按下 MOV KEYBUF 7 LJMP DK2 NK8 NOP K8 键按下 DK2 MOV A KEYBUF MOV B 2 MUL AB MOV TEMP A MOV DPTR TABLE 指向表头 MOVC A A DPTR 查表 MOV STH0 A MOV TH0 A 数据高八位送给 TH0 INC TEMP MOV A TEMP MOVC A A DPTR MOV STL0 A MOV TL0 A 将数据低八位送给 TL0 SETB TR0 启动 T0 DK2A MOV A P3 ANL A 0FH XRL A 0FH JNZ DK2A CLR TR0 关 T0 NOKEY2 MOV P3 0FFH 设置 P3 为输入模式 CLR P3 6 扫描第三行 MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY3 LCALL DELAY 延时 10ms MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY3 MOV A P3 ANL A 0FH CJNE A 0EH NK9 MOV KEYBUF 8 LJMP DK3 12 NK9 CJNE A 0DH NK10 K9 键按下 MOV KEYBUF 9 LJMP DK3 NK10 CJNE A 0BH NK11 K10 键按下 MOV KEYBUF 10 LJMP DK3 NK11 CJNE A 07H NK12 K11 键按下 MOV KEYBUF 11 LJMP DK3 NK12 NOP K12 键按下 DK3 MOV A KEYBUF MOV B 2 MUL AB MOV TEMP A MOV DPTR TABLE 指向表头 MOVC A A DPTR 查表 MOV STH0 A MOV TH0 A 数据高八位送给 TH0 INC TEMP MOV A TEMP MOVC A A DPTR MOV STL0 A MOV TL0 A 将数据低八位送给 TL0 SETB TR0 启动 T0 DK3A MOV A P3 ANL A 0FH XRL A 0FH JNZ DK3A CLR TR0 关 T NOKEY3 MOV P3 0FFH 设置 P3 为输入模式 CLR P3 7 扫描第三行 MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY4 LCALL DELAY 延时 10ms MOV A P3 ANL A 0FH XRL A 0FH JZ NOKEY4 MOV A P3 ANL A 0FH CJNE A 0EH NK9 MOV KEYBUF 12 13 LJMP DK4 NK13 CJNE A 0DH NK14 K13 键按下 MOV KEYBUF 13 LJMP DK4 NK14 CJNE A 0BH NK15 K14 键按下 MOV KEYBUF 14 LJMP DK4 NK15 CJNE A 07H NK16 K15 键按下 MOV KEYBUF 15 LJMP DK4 NK16 NOP K16 键按下 DK4 MOV A KEYBUF MOV B 2 MUL AB MOV TEMP A MOV DPTR TABLE 指向表头 MOVC A A DPTR 查表 MOV STH0 A MOV TH0 A 数据高八位送给 TH0 INC TEMP MOV A TEMP MOVC A A DPTR MOV STL0 A MOV TL0 A 将数据低八位送给 TL0 SETB TR0 启动 T0 DK4A MOV A P3 ANL A 0FH XRL A 0FH JNZ DK4A CLR TR0 关 T0 NOKEY4 LJMP WAIT1 DELAY MOV R6 10 D1 MOV R7 248 DJNZ R7 DJNZ R6 D1 RET INT T0 MOV TH0 STH0 MOV TL0 STL0 CPL P1 0 RETI TABLE DW 64021 64103 64260 64400 低 3 低 4 低 5 低 6 DW 64524 64580 64684 64777 低 7 中 1 中 2 中 3 DW 64820 64898 64968 65030 中 4 中 5 中 6 中 7 DW 65058 65110 65157 65178 高 1 高 2 高 3 高 4 14 FANHUI LJMP MAIN 音乐播放程序 START2 MOV TMOD 01H SETB ET0 SETB EA WAIT2 MOV A P2 MOV DPTR TAB MOV R0 0 设置初始键号 LOOP RRC A JNC N1 INC R0 SJMP LOOP N1 MOV A R0 ADD A R0 JMP A DPTR TAB AJMP OPR0 AJMP OPR1 AJMP OPR2 OPR0 MOV 52H HIGH TABLE0 MOV 53H LOW TABLE0 LCALL MAIN0 OPR1 MOV 52H HIGH TABLE1 MOV 53H LOW TABLE1 LCALL MAIN0 OPR2 MOV 52H HIGH TABLE2 MOV 53H LOW TABLE2 LCALL MAIN0 AAA RET MAIN0 MOV TMOD 11H MOV IE 8AH MOV TH1 3CH MOV TL1 0B0H JNZ TTM12 MOV 40H 00H NEXT20 MOV A 40H MOV DPH 52H MOV DPL 53H MOVC A A DPTR MOV R2 A JZ STOP ANL A 0FH MOV R1 A MOV A R2 SWAP A 15 ANL A 0FH JNZ SING CLR TR0 JMP W1 SING DEC A MOV 22H A RL A MOV DPTR TABLE0 MOVC A A DPTR MOV TH0 A MOV 21H A MOV A 22H RL A INC A MOVC A A DPTR MOV TL0 A MOV 20H A SETB TR0 SETB TR1 W1 LCALL DELAY30 INC 40H JNZ STOP LJMP NEXT20 STOP CLR TR0 CLR TR1 LJMP MAIN TTM12 MOV A 37H CJNE A 0EH TTM13 CLR TR1 LCALL DELAY1 TTM120 LCALL DELAY1 JZ TTM120 LCALL START2 MOV A 37H CJNE A 0EH TTM120 SETB TR1 LJMP NEXT20 TTM13 CJNE A 0CH TTM14 MOV A 52H INC A MOV 52H A MOV A 53H INC A MOV 53H A 16 MOV A 36H INC A MOV 37H A LJMP TTM2 TTM14 CJNE A 0DH TTM2 MOV A 52H INC A MOV 52H A MOV A 53H INC A MOV 53H A MOV A 36H INC A MOV 37H A TTM2 RET TT0 PUSH ACC PUSH PSW MOV TL0 20H MOV TH0 21H POP PSW POP ACC RETI INT T1 MOV TH1 3CH MOV TL1 0B0H DELAY30 MOV R7 2 W2 MOV R4 125 W3 MOV R3 248 DJNZ R3 DJNZ R4 W3 DJNZ R7 W2 DJNZ R1 DELAY30 DELAY1 SETB RS0 DL1 MOV R5 0AH DL2 MOV R6 63H DL3 NOP NOP DJNZ R6 DL3 DJNZ R5 DL2 CLR RS0 RET TABLE00 DW 64580 64684 64777 64820 DW 64898 64968 65030 64260 DW 64400 64524 65058 63835 64021 TABLE0 DB 02H 42H 82H 82H 82H 84H 02H 72H 62H 72H 62H 兰花草 17 DB 52H 48H 0B2H 0B2H 0B2H 0B2H 0B4H 02H 0A2H DB 12H 0A2H 0D2H 92H 88H 82H 0B2H 0B2H 0A2H 84H DB 02H 72H 62H 72H 62H 52H 44H 02H 12H 12H 62H DB 62H 52H 44H 02H 82H 72H 62H 52H 32H 48H DB 00 TABLE1 DB 0FEH 25H 04H 0FEH 25H 04H 新年好 DB

温馨提示

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

评论

0/150

提交评论