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

📄 music_keyi.asm

📁 基于AT89S51的多功能音乐演奏器的设计
💻 ASM
字号:
;*******************************************************************************
;                      基于AT89S51的多功能音乐演奏器的设计
;                                   
;*******************************************************************************
          M_BUF  EQU   7FH            ;曲目缓冲区
          ALT_K  EQU   0FH            ;功能切换键号
         NEXT_K  EQU   0EH            ;下一首功能键号
         LAST_K  EQU   0DH            ;上一首功能键号
        PAUSE_K  EQU   0BH            ;暂停功能键号
      MUSIC_NUM  EQU   03H            ;总曲目数
             F2  EQU   08H            ;暂停标志位
          TODAC  EQU   6FH            ;DAC0832缓冲区
;*******************************************************************************
           ORG   0000H
           LJMP  MAIN                 ;转主程序
           ORG   0003H
           LJMP  KEY_INT              ;转键盘中断服务程序
           ORG   000BH
           LJMP  T0_INT               ;转定时器中断服务程序
;*******************************************************************************
;                                      主程序
;*******************************************************************************
      MAIN:MOV   M_BUF,#01H           ;首先播放第一首乐曲
           SETB  PT0                  ;设置定时器中断为高优先级
           CLR   PX0                  ;设置外部中断0为低优先级
     MAIN1:CLR   EA                   ;关闭中断
           CLR   EX0
           CLR   ET0
           CLR   TR0                  ;关闭定时器
           MOV   SP,#20H              ;设置堆栈指针初值
           MOV   P1,#0FH              ;键盘列线置低电平,准备读行线值
           SETB  EX0                  ;开中断
           SETB  EA
           JB    F0,INT_WAIT          ;功能判断
 INT_MUSIC:LJMP  MUSIC                ;若F0=0,播放乐曲
  INT_WAIT:SJMP  $                    ;若F0=1,等待电子琴键盘中断
;*******************************************************************************
;                                      乐曲发生子程序
;*******************************************************************************
     MUSIC:MOV   TMOD,#01H            ;定时器工作在方式1
           SETB  ET0                  ;定时器0中断允许
           MOV   A,M_BUF              ;根据曲目缓冲区内容选曲
       MT3:CJNE  A,#03H,MT2
           MOV   DPTR,#MTAB3          ;MTAB3为第3首乐曲首地址
           SJMP  NEXT
       MT2:CJNE  A,#02H,MT1
           MOV   DPTR,#MTAB2          ;MTAB2为第2首乐曲首地址
           SJMP  NEXT
       MT1:MOV   DPTR,#MTAB1          ;MTAB1为第1首乐曲首地址
      NEXT:CLR   A                    ;准备查乐曲表
           MOVC  A,@A+DPTR            ;查乐曲表音调部分
           JZ    REST                 ;若A=00H,则为休止符
           CJNE  A,#0FFH,CONTINUE     ;若A=FFH,则为停止符

⌨️ 快捷键说明

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