⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机唱歌.asm

📁 基于Proteus的51系列单片机设计与仿真
💻 ASM
字号:
       ORG  0000H
       LJMP START
       ORG  001BH
       LJMP TIME1
START: MOV  TMOD,#10H       ;T1工作在方式1
       MOV  IE,#88H          ;中断使能
MAIN:  MOV  40H,#00H        ;设简谱码指针初始值
NEXT:  MOV  A,40H            ;简谱码指针暂存累加器A
       MOV  DPTR,#TABLE     ;取简谱码
       MOVC A,@A+DPTR
       CJNE A,#00H,PLAY     ;取到的简谱码不是结束码,转
       LJMP STOP             ;是结束码,退出
 PLAY: MOV  R1,A              ;R1暂存简谱码
       ANL  A,#0FH           ;取节拍码
       MOV  R2,A              ;节拍码暂存R2
       MOV  A,R1
       ANL  A,#0F0H          ;取音符码
       CJNE A,#00H,MUSIC    ;音符码为不为0,调发音子程序
       CLR  TR1               ;音符码为0,不发音
       LJMP DEL
 MUSIC:SWAP A
       DEC  A
       MOV  22H,A
       ADD  A,22H
       MOV  R3,A
       MOV  DPTR,#TABLE1     ;取相应计数值
       MOVC A,@A+DPTR
       MOV  TH1,A             ;暂存高位字节
       MOV  21H,A 
       MOV  A,R3
       INC  A
       MOVC A,@A+DPTR        ;取相应计数值的低位字节
       MOV  TL1,A             ;暂存低位字节
       MOV  20H,A
       SETB TR1               ;启动定时器
 DEL:  LCALL DELAY
       INC  40H               ;指向下一个简谱码
       LJMP NEXT
 STOP: CLR  TR1                ;停止定时器
       LJMP MAIN
  TIME1:PUSH ACC               ;现场保护
       PUSH PSW
       CPL  P1.7              ;P1.7反相输出,演奏音乐
       MOV  TL1,20H           ;重设计数值
       MOV  TH1,21H
       POP  PSW
       POP  ACC
       RETI
 DELAY:MOV  R7,#02H           ;4/4曲调,延时125ms子程序
 DELA1:MOV  R6,#125
 DELA2:MOV  R5,#248
       DJNZ R5,$
       DJNZ R6,DELA2
       DJNZ R7,DELA1
       DJNZ R2,DELAY
       RET
TABLE1:DW 64524,64580,64684,64777        ;简码值: ,1,2,3
       DW 64820,64898,64968,65030,65058 ;简码值:4,5,6,7, 
TABLE:;第1行曲子
       DB 64H,42H,62H,98H
       DB 74H,92H,72H,68H
       DB 64H,22H,32H,44H,32H,22H
       DB 3CH
       ;第2行曲子
       DB 64H,42H,62H,94H,04H,82H
       DB 74H,94H,68H
       DB 64H,32H,42H,54H,04H,12H
       DB 2CH
       ;第3行曲子
       DB 74H,94H,98H
       DB 84H,72H,82H,98H
       DB 72H,82H,92H,72H,72H,62H,42H,22H
       DB 3CH
       ;第4行曲子
       DB 64H,42H,62H,94H,04H,82H
       DB 74H,94H,68H
       DB 64H,32H,42H,54H,04H,12H
       DB 2CH
       ;结束码
       DB 00H
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -