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

📄 yinyue.txt

📁 利用AT89C51单片机做的一个音乐卡,可以播放多首歌曲
💻 TXT
字号:
程序清单
;-------系统晶振为6MHZ
 START_ED  EQU    0000H
 BUF         EQU    20H
 SBF         EQU    21H
 MBF         EQU    22H
 HBF         EQU    23H
 BUF1       EQU    30H
 BUF2       EQU    31H
 DATAL    EQU    32H
 DATAH    EQU    33H
 STOP      EQU    60H         ;设STOP为标志位

          ORG  START_ED+0000H
          LJMP START
          ORG  START_ED+000BH
          LJMP   CTC0
          ORG  START_ED+0013H
          LJMP INTE1
          ORG  START_ED+001BH
          LJMP   CTC1

START:    LCALL  DS50MS
          MOV DPTR,#0DFF8H    ; 指向8155命令口
          MOV A,#03H          ;PA,PB为输出口
          MOVX @DPTR,A
          MOV  SP,  #50H
          MOV  TMOD, #11H     ;T0 AND T1 IN MOD1
          MOV  TH1,  #38H
          MOV  TL1,  #00H
          MOV  IE,   #8AH     ;开总中断及T0,T1中断,但外部中断1仍被屏蔽
          SETB   TR1
          MOV  A,#00H
          MOV  20H,A
          MOV  21H,A
          MOV  22H,A
          MOV  23H,A
          MOV  30H,A
          MOV  31H,A
          MOV  32H,A
          MOV  33H,A

DISPLAY:  MOV  R0, #40H
          MOV  A,  SBF
          LCALL  GET         ;秒编码,41H高位,40H低位
          MOV  R0, #42H
          MOV  A,  MBF
          LCALL  GET         ;分编码,分别在43H,42H
DS1:      MOV  R0, #40H      ; LED共阴极反向驱动
          MOV  R2, #08H      ; 首先点亮LED4,它为最低位
DS2:      MOV  DPTR, #0DFF9H ;PA
          MOV  A, @R0
          LCALL TABLE
          MOVX @DPTR, A
          MOV  DPTR, #0DFFAH ;PB
          MOV  A, R2
          MOVX @DPTR, A
          MOV   R3, #0FFH
          DJNZ  R3, $
          INC  R0
          CLR  C
          MOV  A, R2
          RRC  A
          MOV  R2, A
          JNC  DS2
          MOV C,P1.1
          ANL C,P1.2
          JNC  KEY
          LJMP  DISPLAY

TABLE:    INC  A
          MOVC A,@A+PC
          RET

DB        0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H

;-------编码子程序
GET:     MOV R1,A
         ANL A,  #0FH
         MOV   @R0,A
         INC  R0
         MOV  A, R1
         SWAP A
         ANL  A, #0FH
         MOV  @R0,  A
         RET

;---------中断T1程序
CTC1:    MOV   TH1,  #38H     ;定时0.1秒
         MOV   TL1,  #00H
         PUSH  PSW
         PUSH  ACC
         JB  P1.3,  NEXTCTC1
         MOV   A,    #00H
         MOV   BUF, A
         MOV   SBF, A
         MOV   MBF, A
NEXTCTC1:INC   BUF
         MOV   A, BUF
         CJNE  A, #0AH, QUIT
         MOV   BUF,#00H
         MOV   A,  SBF
         ADD   A ,#01H
         DA    A
         MOV   SBF, A
         CJNE  A, #60H, QUIT
         MOV   SBF,#00H
         MOV   A, MBF
         ADD   A,#01H
         DA    A
         MOV   MBF, A
         CJNE  A, #60H,  QUIT
         MOV   MBF, #00H
         MOV   A,HBF
         ADD   A,#01H
         DA    A
         MOV   HBF,A
         CJNE  A,#24H,QUIT
         MOV   HBF,#00H
QUIT:    POP   ACC
         POP   PSW
         RETI

;--------键处理子程序
KEY:     JNB   P1.2,KEY2
         LCALL DS10MS
         JB    P1.1,MAIN
HEREKEY1:NOP                  ;延时,抗干扰
         LCALL DS10MS
         JNB   P1.1, HEREKEY1 ; 按键放下
         ACALL INT
         AJMP  SONG1
KEY2:    LCALL DS10MS
         JB    P1.2,MAIN
HEREKEY2:NOP
         LCALL DS10MS
         JNB   P1.2,HEREKEY2
         ACALL INT
         AJMP  SONG2
SONG1:   MOV   DPTR,#TAB1
         MOV   BUF2, #100     ;TAB1长
CLEAR:   CLR   A
         MOVC  A,@A+DPTR
         ACALL PLAY
MAIN:    LJMP  DISPLAY
SONG2:   MOV   DPTR,#TAB2
         MOV   BUF2, #80      ;TAB2长
         LJMP  CLEAR

;--------放曲子程序
PLAY:    CPL   A
         INC   A
         MOV   BUF1, A
         MOV   TL0, BUF1      ;音频周期作定时器0初值
         MOV   TH0,#0FFH      ;由00H取反得到
         SETB  TR0
         INC   DPTR
         CLR   A
         MOVC  A,@A+DPTR
         MOV   R3,A
         INC   DPTR
         CLR   A
         MOVC  A,@A+DPTR
         MOV   R4,A
         MOV   DATAH, DPH      ;存当前DPTR值
         MOV   DATAL, DPL
         RET

;--------T0中断子程序
CTC0:    JB    STOP, EXITCTC0
         MOV   TH0,  #0FFH
         MOV   TL0,  BUF1
         CPL   P1.0
         DJNZ  R3,EXITCTC0       ;R3为节拍周期低位
         MOV   R3,#0FFH
         DJNZ  R4,EXITCTC0       ;R4为节拍周期高位
AGAIN:   MOV   DPL, DATAL
         MOV   DPH, DATAH
         INC   DPTR
         CLR   A
         MOVC  A,@A+DPTR
         ACALL PLAY
         DEC   BUF2
         MOV   A, BUF2
         CJNE  A, #00H,EXITCTC0
         CLR   TR0
         CLR   EX0
         CLR   P1.0
EXITCTC0:RETI

;--------开外部中断1子程序
INT:     SETB  EX1
         SETB  IT1
         RET

;--------外部中断1子程序
INTE1:   CPL   STOP
         LCALL DS10MS
         RETI

;--------延时10MS子程序
DS10MS:  PUSH   PSW
         SETB   RS0        ;工作寄存器换区
         MOV    R6,#25
LOOP1:   MOV    R7,#100
         DJNZ   R7,$
         DJNZ   R6,LOOP1
         CLR    RS0
         POP    PSW
         RET

;--------延时50MS子程序
DS50MS:  MOV    R1,#50
L1:      MOV    R2,#100
         NOP
         NOP
         NOP
         DJNZ   R2,$
         DJNZ   R1,L1
         RET

;--------曲谱<<同一首歌>>
TAB1:
DB       9DH,11H,04H,9DH,11H,04H,75H,17H,05H,68H,98H,05H,5CH,28H,06H,5CH,94H,03H,57H,0B7H,03H,5CH,28H,06H,75H,17H,05H,68H,98H,05H,68H,98H,05H,75H,17H,05H,8CH,70H,04H
DB       75H,17H,05H,75H,17H,05H,75H,17H,05H,75H,17H,05H,9DH,11H,04H,9DH,11H,04H,75H,17H,05H,68H,98H,05H,5CH,28H,06H,5CH,94H,03H,57H,0B7H,03H,4DH,23H,07H,75H,17H,05H
DB       57H,76H,06H,57H,0B7H,03H,5CH,94H,03H,4DH,23H,07H,68H,0CCH,03H,5CH,94H,03H,5CH,94H,03H,68H,0CCH,03H,68H,98H,05H,68H,98H,05H,68H,98H,05H,5CH,28H,06H,5CH,28H,06H
DB       4DH,23H,07H,39H,40H,09H,3DH,0BBH,08H,3DH,0DDH,04H,45H,70H,04H,45H,0E1H,07H,45H,0E1H,07H,4DH,23H,07H,4DH,11H,04H,45H,70H,04H,3DH,0BBH,08H,45H,70H,04H,4DH,11H,04H
DB       5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,57H,76H,06H,57H,0BBH,03H,57H,0BBH,03H,4DH,23H,07H,45H,0E1H,07H,4DH,23H,07H,57H,0BBH,03H,5CH,94H,03H,68H,98H,05H
DB       68H,98H,05H,7CH,0DDH,04H,7CH,0EEH,02H,8CH,0B8H,02H,9DH,11H,04H,8CH,70H,04H,75H,17H,05H,75H,17H,05H,75H,17H,05H,75H,17H,05H,39H,40H,09H,39H,40H,09H,45H,0E1H,07H
DB       45H,0E1H,07H,57H,76H,06H,57H,0BBH,03H,4DH,11H,04H,45H,0E1H,07H,45H,0E1H,07H,3DH,0BBH,08H,3DH,0DDH,04H,3DH,0DDH,04H,3DH,0BBH,08H,45H,70H,04H,4DH,11H,04H,5CH,28H,06H
DB       5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,39H,40H,09H,39H,40H,09H,45H,0E1H,07H,45H,0E1H,07H,57H,76H,06H,57H,0BBH,03H,4DH,11H,04H,45H,0E1H,07H,45H,0E1H,07H,23H,22H,0EH
DB       23H,11H,07H,23H,11H,07H,45H,0E1H,07H,57H,0BBH,03H,5CH,94H,03H,68H,98H,05H,68H,98H,05H,68H,98H,05H,68H,98H,05H,26H,44H,0DH,26H,44H,0DH,75H,17H,05H,68H,98H,05H
DB       5CH,28H,06H,5CH,94H,03H,57H,0BBH,03H,5CH,28H,06H,75H,0BH,03H,75H,0BH,03H,68H,98H,05H,68H,4CH,03H,68H,98H,05H,68H,4CH,03H,75H,0BH,03H,23H,22H,0EH,23H,22H,0EH
DB       23H,22H,0EH,23H,22H,0EH,20H,0EEH,0EH,20H,0EEH,0EH,20H,0EEH,0EH,20H,77H,07H,23H,11H,08H,26H,44H,0DH,45H,0E1H,07H,4DH,23H,07H,68H,4CH,03H,68H,4CH,03H,57H,76H,06H
DB       57H,0BBH,03H,57H,0BBH,03H, 57H,76H,06H,5CH,94H,03H,68H,4CH,03H,4DH,23H,07H,4DH,23H,07H,4DH,23H,07H,4DH,23H,07H

;-------曲谱<<梁祝*化蝶>>
TAB2:
DB       0BBH,94H,03H,9DH,88H,02H,9DH,0C4H,01H,8CH,0DCH,01H,75H,0BH,03H,75H,05H,02H,68H,26H,02H,8CH,0DCH,01H,75H,05H,02H,9DH,88H,02H
DB       4DH,11H,04H,4DH,88H,02H,39H,10H,03H,45H,0B8H,02H,4DH,88H,02H,5CH,4AH,02H,4DH,88H,02H,68H,98H,05H,68H,98H,05H
DB       68H,4CH,03H,68H,26H,02H,5CH,4AH,02H,7CH,0EEH,02H,8CH,0B8H,02H,9DH,88H,02H,9DH,0C4H,01H,8CH,0DCH,01H,75H,0BH,03H,68H,4CH,03H
DB       0BBH,4AH,02H,75H,0BH,03H,8CH,0DCH,01H,9DH,0C4H,01H,8CH,0DCH,01H,75H,05H,02H,9DH,11H,04H,9DH,11H,04H
DB       5CH,94H,03H,5CH,4AH,02H,4DH,88H,02H,7CH,0EEH,02H,68H,4CH,03H,8CH,0DCH,01H,75H,05H,02H,9DH,88H,02H,9DH,11H,04H
DB       0BBH,0A5H,01H,9DH,0C4H,01H,0BBH,4AH,02H,9DH,0C4H,01H,8CH,0DCH,01H,7CH,0F7H,01H,68H,4CH,03H,8CH,70H,04H,8CH,0B8H,02H,9DH,0C4H,01H,8CH,0DCH,01H
DB       75H,0BH,03H,75H,05H,02H,68H,26H,02H,4DH,11H,04H,5CH,94H,03H,68H,4CH,03H,5CH,4AH,02H,68H,26H,02H,75H,0BH,03H,8CH,0DCH,01H,9DH,0C4H,01H
DB       0BBH,94H,03H,75H,17H,05H,8CH,0DCH,01H,75H,05H,02H,8CH,0DCH,01H,9DH,0C4H,01H,0BBH,0A5H,01H,9DH,0C4H,01H,8CH,0DCH,01H,75H,05H,02H
DB       9DH,11H,04H,9DH,11H,04H

END

⌨️ 快捷键说明

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