• <dfn id="lugmd"></dfn>
    • <dfn id="lugmd"></dfn>
      <dfn id="lugmd"><code id="lugmd"></code></dfn>
      <dfn id="lugmd"><code id="lugmd"><input id="lugmd"></input></code></dfn>
      <td id="lugmd"><form id="lugmd"><nobr id="lugmd"></nobr></form></td>
        <dfn id="lugmd"></dfn><form id="lugmd"><thead id="lugmd"><input id="lugmd"></input></thead></form>
        <span id="lugmd"><var id="lugmd"><input id="lugmd"></input></var></span>
        <menu id="lugmd"><code id="lugmd"></code></menu>

        熱門關(guān)鍵詞:CST8002D  CST6118  CST6508  XS9971   CST118S  CST2466  矽源特科技

        技術(shù)分享
        當前位置 : 技術(shù)分享

        功能齊全的單片機音樂程序

        點擊次數(shù):12發(fā)布日期:2023-08-05
        單片機最小系統(tǒng),兩位LED數(shù)碼管由串口輸出接兩個164驅(qū)動,Lout,Rout為左右聲道輸出,SET,  ALT0, ALT1為三個按鍵,也可自己在開始的I/O定義作修改到你用的I/O口;12M晶振
        若用89C51則只可裝下約14首歌曲,用89C52則可裝下近40曲(All Rights Reserved)
        源程序
        ;   Electronic Music
        ;   Version 4.50
        ;   Copyright (c) XAJ 2001
        ;============================
        LOUT  BIT P1.0 ;左聲道輸出
        ROUT  BIT P1.2 ;右聲道輸出
        SET   BIT P3.3 ;SET按鍵
        ALT0  BIT P3.6 ;ALT0按鍵
        ALT1  BIT P3.7 ;ALT1按鍵
        ;REPNUM   EQU 09H重復段編號
        STATU    EQU 0AH;狀態(tài)寄存器
        LDYDSR   EQU 0BH;左低音度數(shù)
        RDYDSR   EQU 0CH;右低音度數(shù)
        LDYAR    EQU 0DH;左低音協(xié)助
        RDYAR    EQU 0EH;右低音協(xié)助
        JPCLK    EQU 0FH;節(jié)拍時鐘
        GENCLK   EQU 10H;通用時鐘
        SNSDCLK  EQU 11H;搜、存顯示時鐘
        GEN16T0  EQU 12H;通用16位時鐘
        GEN16T1  EQU 13H;
        SETST0   EQU 14H;設(shè)置狀態(tài)
        SETST1   EQU 15H;  定時時鐘
        DISNUM0  EQU 16H;顯示數(shù)值
        DISNUM1  EQU 17H;寄存器(2位)
        CSN      EQU 18H;當前曲曲號
        REP0L    EQU 19H;0號重復段地址
        REP0H    EQU 1AH;
        REP1L    EQU 1BH;1號重復段地址
        REP1H    EQU 1CH;
        REP2L    EQU 1DH;2號重復段地址
        REP2H    EQU 1EH
        REP3L    EQU 1FH;3號重復段地址
        REP3H    EQU 23H;
        COSPEEDN EQU 24H;
        SPENR    EQU 25H;
        LOCF     BIT 00H;左聲道開關(guān)標志
        ROCF     BIT 01H;右聲道開關(guān)標志
        SECHSTOF BIT 02H;搜索、存儲標志
        NEXTSF   BIT 03H;下一曲標志
        CSBESTOF BIT 04H;當前曲鎖存/釋放CUYFD    BIT 05H;當前音符顯示
        KSETF    BIT 06H;SET鍵按下標志
        KALT0F   BIT 07H;ALT0鍵按下標志
        KALT1F   BIT 08H;ALT1鍵按下標志
        SPEEDF   BIT 09H;速度增/減標志
        TONEF    BIT 0AH;音調(diào)增/減標志
        YPBIT    BIT 0BH;音頻邏輯輸出
        KBDISF   BIT 0CH;鍵盤顯示標志
        REP0F    BIT 0DH;0號重復段控制
        REP1F    BIT 0EH;1號重復段控制
        REP2F    BIT 0FH;2號重復段控制
        REP3F    BIT 10H;3號重復段控制
        SBOTM    EQU 25H;堆棧區(qū)(棧底)
        BUFF0    EQU 43H;鎖存曲數(shù)
        BUFF     EQU 44H;鎖存曲緩沖區(qū)
        ;============================
        ;=========BEGIN==============
                  ORG   0000H
                  LJMP  MAIN
        ;---------T0INT--------------
                  ORG   000BH
                  LJMP  T0INT
        ;---------T1INT--------------
                  ORG   001BH
                  LJMP  T1INT
        ;1.音頻發(fā)生器
        ;---------YPFSQ(01)----------
                  ORG   0030H
        T0INT:    MOV TL0,R4
                  MOV TH0,R5
                  PUSH PSW
                  PUSH ACC
                  PUSH 01H
                  JB  LOCF,ROPER
                  MOV R1,#00H
                  MOV A,LDYAR
        T0LLOP:   RRC A
                  MOV YPBIT,C
                  XCH A,R1
                CJNE A,LDYDSR,T0LNEXT
                  MOV C,YPBIT
                  MOV LOUT,C
                  INC LDYAR
                  ;      INC P0      
                  SJMP ROPER
        T0LNEXT:  XCH A,R1
                  INC R1
                  SJMP T0LLOP
        ROPER:    JB  ROCF,T0RETI
                  MOV R1,#00H
                  MOV A,RDYAR
        T0RLOP:   RRC A
                  MOV YPBIT,C
                  XCH A,R1
                CJNE A,RDYDSR,T0RNEXT
                  MOV C,YPBIT
                  MOV ROUT,C
                  INC RDYAR
                  ;      INC P2
                  SJMP T0RETI
        T0RNEXT:  XCH A,R1
                  INC R1
                  SJMP T0RLOP
        T0RETI:   POP 01H
                  POP ACC
                  POP PSW
                  RETI
        ;2.通用時鐘
        ;---------CLOCK(02)----------
        T1INT:    MOV TL1,#0F0H
                  MOV TH1,#0D8H
                  PUSH PSW
                  PUSH ACC
                  INC JPCLK
                  INC GENCLK
                  INC SNSDCLK
                  MOV A,SNSDCLK
                  CJNE A,#0FFH,T1NEXT
                  CLR SECHSTOF
        T1NEXT:   INC GEN16T0
                  MOV A,GEN16T0
                  CJNE A,#100,T1NEXT0
                  MOV GEN16T0,#00H
                  INC GEN16T1
        T1NEXT0:  INC SETST0
                  MOV A,SETST0
                  CJNE A,#100,T1RETI
                  MOV SETST0,#00H
                  INC SETST1
                  MOV A,SETST1
                  CJNE A,#20,T1RETI
                  MOV SETST1,#00H
                  MOV STATU,#00H
        T1RETI:   POP ACC
                  POP PSW
                  RETI
        ;3.顯示子程序
        ;---------DISPLAY(03)--------
        DISPLAY:  PUSH ACC
                  PUSH DPL
                  PUSH DPH
                  MOV DPTR,#T_FIGCODE
                  MOV A,DISNUM0
                  MOVC A,@A+DPTR
                  MOV SBUF,A
                  JNB TI,$
                  CLR TI
                  MOV A,DISNUM1
                  MOVC A,@A+DPTR
                  MOV SBUF,A
                  JNB TI,$
                  CLR TI
                  POP DPH
                  POP DPL
                  POP ACC
                  RET
        T_FIGCODE:
        DB 088H,0EBH,04CH,049H
        ; 0    1    2    3
          DB 02BH,019H,018H,0CBH
             ;  4    5    6    7
            DB 008H,009H,00AH,038H
             ;  8    9    A    B
            DB 09CH,068H,01CH,01EH
             ;  C    D    E    F
            DB 080H,0E3H,044H,041H
             ;  0.   1.   2.   3.
            DB 023H,011H,010H,0C3H
             ;  4.   5.   6.   7.
            DB 000H,001H,002H,030H
             ;  8.   9.   A.   B.
            DB 094H,060H,014H,016H
             ;  C.   D.   E.   F.
            DB 0FFH,02FH,098H,07FH
             ; 熄滅  #    G    -
            DB 07CH,078H,0BCH,00AH
             ;  c    o    L    R
            DB 029H
             ;  Y
        ;4.主程序MAIN
        ;---------MAIN(04)-----------
        MAIN:     MOV R0,#01H
                  CLR A
        CLRAM:    MOV @R0,A
                  INC R0
                  CJNE R0,#80H,CLRAM
                  MOV R0,A
                  MOV SP,#SBOTM
                  MOV 08H,#BUFF
                 ;MOV 09H,#BUFF
                  MOV SCON,#00H
                  MOV TMOD,#11H
                  MOV TL1,#0F0H
                  MOV TH1,#0D8H
                  SETB EA
                  SETB ET0
                  SETB ET1
                  SETB TR1
        START:    MOV DPTR,#T_SONGS
        RYF:      LCALL RYFSUP
                  MOV A,R7
                  JZ  START
                  CJNE R7,#0FFH,SYF
                  JBC NEXTSF,NEXTSCL
                  MOV A,STATU
                  JNZ GONSBQ
                  MOV A,BUFF0
                  JNZ MPSQCL
                  LCALL PAQSCL
                  SJMP MQNFD
        MPSQCL:   LCALL PSQSCL
        MQNFD:    LCALL QNFDSUP
        MOVPJRYF: INC DPTR
                  INC DPTR
                  SJMP RYF
        NEXTSCL:  LCALL CSBESTOJG
                JB  CSBESTOF,CALLPSCL
                  LCALL PAQSCL
                  SJMP MOVPJRYF
        CALLPSCL: LCALL PSQSCL
                  SJMP MOVPJRYF
        GONSBQ:   LCALL CSDPTR
                  INC DPTR
                  INC DPTR
                  SJMP MOVPJRYF
        SYF:    CJNE R6,#0FFH,CALLPLAY
                  LCALL REPCLSUP
                  SJMP MOVPJRYF
        CALLPLAY: LCALL YFDSUP
                  LCALL PLAY
                  SJMP MOVPJRYF
        ;5.讀音符子程序
        ;---------RYFSUP(05)--------
        RYFSUP:   CLR A
                  MOVC A,@A+DPTR
                  MOV R6,A
                  MOV A,#01H
                  MOVC A,@A+DPTR
                  MOV R7,A
                  RET
        ;6.統(tǒng)唱曲首處理
        ;---------PAQSCL(06)--------
        PAQSCL:   MOV CSN,R6
                  INC DPTR
                  INC DPTR
                  LCALL RYFSUP
                  MOV 02H,R6
                  MOV 03H,R7
                  RET
        ;7.存唱曲首處理
        ;---------PSQSCL(07)--------
        PSQSCL:   PUSH PSW
                  SETB RS0
                  CLR RS1
        PSQC7E:   CJNE R0,#7EH,PSQNEXT
        PSQNEXT:  JC  PSQNEXT1
                  MOV R0,#BUFF
                  SJMP PSQC7E
        PSQNEXT1: MOV A,@R0
                  JNZ PSQNEXT2
                  INC R0
                  INC R0
                  INC R0
                  SJMP PSQC7E
        PSQNEXT2: MOV CSN,@R0
                  INC R0
                  MOV 02H,@R0
                  INC R0
                  MOV 03H,@R0
                  INC R0
                  POP PSW
                  LCALL CSDPTR
                  INC DPTR
                  INC DPTR
                  RET
        ;8.曲號閃顯子程序
        ;---------QNFDSUP(08)-------
        QNFDSUP:  PUSH ACC
                  MOV GEN16T0,#00H
                  MOV GEN16T1,#00H
        QNGON:    LCALL CSNSDISN
                  LCALL DISPLAY
                  MOV GENCLK,#00H
        QNWAIT:   MOV A,GENCLK
                  CJNE A,#35,QNWAIT
                  MOV DISNUM0,#20H
                  MOV DISNUM1,#20H
                  LCALL DISPLAY
                  MOV GENCLK,#00H
        QNWAIT1:  MOV A,GENCLK
                  CJNE A,#15,QNWAIT1
                  MOV A,GEN16T1
                  CJNE A,#02,QNGON
                  POP ACC
                  RET
        ;9.曲號送顯示寄存器
        ;---------CSNSDISN(09)------
        CSNSDISN: MOV A,CSN
                  ANL A,#0FH
                  LCALL CSBESTOJG
                  JNB CSBESTOF,NADP
                  ADD A,#10H
        NADP:     MOV DISNUM0,A
                  MOV A,CSN
                  SWAP A
                  ANL A,#0FH
                  MOV DISNUM1,A
                  RET
        ;10.當前曲是否被存儲判斷
        ;---------CSBESTOJG(10)-----
        CSBESTOJG:PUSH ACC
                  PUSH PSW
                  MOV A,BUFF0
                  JZ  CLRCSTOF
                  MOV R0,#BUFF
        CSBCMPCSN:MOV A,@R0
                  CJNE A,CSN,CSBGSCAN
                  SETB CSBESTOF
                  SJMP CSBRET
        CSBGSCAN: INC R0
                  INC R0
                  INC R0
                  CJNE R0,#7EH,CSBNEXT
        CSBNEXT:  JC  CSBCMPCSN
        CLRCSTOF: CLR CSBESTOF
                  MOV R0,#BUFF
        CSBCMP0:  MOV A,@R0
                  JZ  CSBRET
                  INC R0
                  INC R0
                  INC R0
                CJNE R0,#7EH,CSBNEXT1
        CSBNEXT1: JC  CSBCMP0
        CSBRET:   POP PSW
                  POP ACC
                  RET
        ;11.找當前曲首址
        ;---------CSDPTR(11)--------
        CSDPTR:   MOV DPTR,#T_SONGS
        CSDSCAN:  LCALL RYFSUP
                CJNE R7,#0FFH,CSDNEXT
                  MOV A,R6
                  CJNE A,CSN,CSDNEXT
                  SJMP CSDRET
        CSDNEXT:  INC DPTR
                  INC DPTR
                  SJMP CSDSCAN
        CSDRET:   RET
        ;12.重復段處理子程序
        ;---------REPCLSUP(12)------
        REPCLSUP: MOV A,R7
                  ANL A,#0FH
                  CJNE A,#02H,CMPA3
                  MOV A,R7
                  SWAP A
                  ANL A,#0FH
                  JNZ H4CMP1
                  JNB REP0F,REPRET0
                  CLR REP0F
                  MOV DPL,REP0L
                  MOV DPH,REP0H
        REPRET0:  RET
        H4CMP1:   CJNE A,#01H,H4CMP2
                  JNB REP1F,REPRET
                  CLR REP1F
                  MOV DPL,REP1L
                  MOV DPH,REP1H
                  RET
        H4CMP2:   CJNE A,#02H,H4CMP3
                  JNB REP2F,REPRET
                  CLR REP2F
                  MOV DPL,REP2L
                  MOV DPH,REP2H
                  RET
        H4CMP3:   CJNE A,#03H,REPRET
                  JNB REP3F,REPRET
                  CLR REP3F
                  MOV DPL,REP3L
                  MOV DPH,REP3H
                  RET
        CMPA3:    CJNE A,#03H,REPRET
                  MOV A,R7
                  SWAP A
                  ANL A,#0FH
                  JNZ H4VS1
                  SETB REP0F
                  MOV REP0L,DPL
                  MOV REP0H,DPH
                  SJMP SREPHAD
        H4VS1:    CJNE A,#01H,H4VS2
                  SETB REP1F
                  MOV REP1L,DPL
                  MOV REP1H,DPH
                  SJMP SREPHAD
        H4VS2:    CJNE A,#02H,H4VS3
                  SETB REP2F
                  MOV REP2L,DPL
                  MOV REP2H,DPH
                  SJMP SREPHAD
        H4VS3:    CJNE A,#03H,REPRET
                  SETB REP3F
                  MOV REP3L,DPL
                  MOV REP3H,DPH
        SREPHAD:  MOV 09H,A
                  LCALL CSDPTR
        REPGON:   INC DPTR
                  INC DPTR
                  LCALL RYFSUP
                  CJNE R6,#0FFH,REPGON
                  MOV A,R7
                  SWAP A
                  ANL A,#0FH
                  CJNE A,09H,REPGON
        REPRET:   RET
        ;13.音符顯示子程序
        ;---------YFDSUP(13)--------
        YFDSUP:   MOV A,STATU
                  JNZ YFDRET
                  JB  SECHSTOF,YFDRET
                  JNB CUYFD,YFSLED
        XZFCLD:   MOV DISNUM0,#20H
                  MOV DISNUM1,#20H
                  SJMP YFDSPLAY
        YFSLED:   MOV A,R6
                  JZ  XZFCLD
                  ANL A,#0FH
                  PUSH DPL
                  PUSH DPH
                  MOV DPTR,#T_YFDCOD
                  MOVC A,@A+DPTR
                  MOV DISNUM0,A
                  POP DPH
                  POP DPL
                  MOV A,R6
                  SWAP A
                  ANL A,#0FH
                  MOV DISNUM1,A
        YFDSPLAY: LCALL DISPLAY
        YFDRET:   RET
        T_YFDCOD: DB 20H  ;--
                  DB 01H  ; 1
                  DB 02H  ; 2
                  DB 03H  ; 3
                  DB 04H  ; 4
                  DB 05H  ; 5
                  DB 06H  ; 6
                  DB 07H  ; 7
                  DB 11H  ;#1
                  DB 12H  ;#2
                  DB 14H  ;#4
                  DB 15H  ;#5
                  DB 16H  ;#6
        ;14.唱音符子程序
        ;---------PLAY(14)----------
        PLAY:     MOV A,R6
                  JZ  PCOSPECL
                  PUSH DPL
                  PUSH DPH
                  MOV DPTR,#T_SD
                  ANL A,#0FH
                  MOVC A,@A+DPTR
                  XCH A,R6
                  SWAP A
                  ANL A,#0FH
                  MOV B,#12
                  MUL AB
                  ADD A,R6
                  ADD A,R2
                  RL  A
                  MOV R6,A
                  MOV DPTR,#T_RAN
                  MOVC A,@A+DPTR
                  MOV TH0,A
                  MOV R5,A
                  MOV A,R6
                  INC A
                  MOVC A,@A+DPTR
                  MOV TL0,A
                  MOV R4,A
                  POP DPH
                  POP DPL
                  SETB TR0
        PCOSPECL: LCALL COSPECL
        PJPWAIT:  MOV JPCLK,#00H
        PDELAY:   LCALL KCXCL
                  JB  NEXTSF,PRET
                  MOV A,JPCLK
                  CJNE A,01H,PNEXT
        PNEXT:    JC  PDELAY
                  DJNZ R7,PJPWAIT
        PRET:     CLR TR0
                  RET
        ;---------TABSD-------------
        T_SD:     DB  01h  ;useless
                  DB  01H
                  DB  03H
                  DB  05H
                  DB  06H
                  DB  08H
                  DB  0AH
                  DB  0CH
                  DB  02H
                  DB  04H
                  DB  07H
                  DB  09H
                  DB  0bH
        ;---------TABRAN------------
        T_RAN:    DW 0F111H  ;useless
             dw 0f111h  ; area 0
             dw 0f1e8h
             dw 0f2b2h
             dw 0f373h
             dw 0f426h
             dw 0f4eeh
             dw 0f571h
             dw 0f609h
             dw 0f699h
             dw 0f71fh
             dw 0f79fh
             dw 0f817h  
             dw 0f889h  ; area 1
             dw 0f8f4h
             dw 0f95ah
             dw 0f9b9h
             dw 0fa13h
             dw 0fa68h
             dw 0fab9h
             dw 0fb04h
             dw 0fb4ch
             dw 0fb90h
             dw 0fbcfh
             dw 0fc0ch
             dw 0fc45h    ;area 2
             dw 0fc7ah
             dw 0fcadh
             dw 0fcdch
             dw 0fd0ah
             dw 0fd34h
             dw 0fd5ch
             dw 0fd82h
             dw 0fda6h
             dw 0fdc8h
             dw 0fde8h
             dw 0fe06h
             dw 0fe22h  ;  area 3
             dw 0fe3dh
             dw 0fe56h
             dw 0fe6eh
             dw 0fe85h
             dw 0fe9ah
             dw 0feaeh
             dw 0fec1h
             dw 0fed3h
             dw 0fee3h
             dw 0fef4h
             dw 0ff02h
             dw 0ff11h    ;area 4
             dw 0ff1fh
             dw 0ff2bh
             dw 0ff37h
             dw 0ff42h
             dw 0ff4dh
             dw 0ff57h
             dw 0ff60h
             dw 0ff6ah
             dw 0ff72h
             dw 0ff7ah
             dw 0ff81h
             dw 0ff89h    ;    5
        ;15.共速處理
        ;---------COSPECL(15)-------
        COSPECL:  MOV R1,03H
                  MOV A,COSPEEDN
                  JZ  COSPRET
                  PUSH COSPEEDN
                  MOV A,R1
        COSPEGON: MOV B,#08H
                  MUL AB
                  CLR C
                  SUBB A,R1
                  JNC COSPNEXT
                  DEC B
        COSPNEXT: MOV R6,#03H
        DIV8:     CLR C
                  XCH A,B
                  RRC A
                  XCH A,B
                  RRC A
                  DJNZ R6,DIV8
                  MOV R1,A
                DJNZ COSPEEDN,COSPEGON
                  POP COSPEEDN
                  MOV A,R1
                  JNZ COSPRET
                  MOV R1,#01H
        COSPRET:  RET
        ;16.鍵盤查詢處理
        ;---------KCXCL(16)---------
        KCXCL:    LCALL KSET
                  LCALL KALT0
                  LCALL KALT1
                  JNB KSETF,KNEXT0
                  LCALL KSETCL
        KSETSTC:  MOV SETST0,#00H
                  MOV SETST1,#00H
                  SETB KBDISF
                  SJMP KDIS
        KNEXT0:   JNB KALT0F,KNEXT1
                  LCALL KALT0CL
                  SJMP KSETSTC
        KNEXT1:   JNB KALT1F,KDIS
                  LCALL KALT1CL
                  SJMP KSETSTC
        KDIS:     MOV A,STATU
                  JNZ KSSNSD
                  JNB SECHSTOF,KRET
        KSSNSD:   JNB KBDISF,KRET
                  CLR KBDISF
                  LCALL DISPLAY
        KRET:     RET
        ;17.KSET鍵是否按下查詢
        ;---------KSET(17)----------
        KSET:     SETB SET
                  JB  SET,CSETRET
                  MOV GENCLK,#00H
        SETLOP:   MOV A,GENCLK
                  CJNE A,#02,SETLOP
                  SETB SET
                  JB  SET,CSETRET
                  CLR TR0
        SETWAIT:  SETB SET
                  JNB SET,SETWAIT
                  MOV GENCLK,#00H
        SETLOP1:  MOV A,GENCLK
                  CJNE A,#02,SETLOP1
                  SETB TR0
                  SETB KSETF
                  RET
        CSETRET:  CLR KSETF
                  RET
        ;18.KALT0鍵是否按下查詢
        ;---------KALT0(18)---------
        KALT0:    SETB ALT0
                  JB  ALT0,CALT0RET
                  MOV GENCLK,#00H
        ALT0LOP:  MOV A,GENCLK
                  CJNE A,#02,ALT0LOP
                  SETB ALT0
                  JB  ALT0,CALT0RET
                  CLR TR0
        ALT0WAIT: SETB ALT0
                  JNB ALT0,ALT0WAIT
                  MOV GENCLK,#00H
        ALT0LOP1: MOV A,GENCLK
                  CJNE A,#02,ALT0LOP1
                  SETB TR0
                  SETB KALT0F
                  RET
        CALT0RET: CLR KALT0F
                  RET
        ;19.KALT1鍵是否按下查詢
        ;---------KALT1(19)---------
        KALT1:    SETB ALT1
                  JB  ALT1,CALT1RET
                  MOV GENCLK,#00H
        ALT1LOP:  MOV A,GENCLK
                  CJNE A,#02,ALT1LOP
                  SETB ALT1
                  JB  ALT1,CALT1RET
                  CLR TR0
        ALT1WAIT: SETB ALT1
                  JNB ALT1,ALT1WAIT
                  MOV GENCLK,#00H
        ALT1LOP1: MOV A,GENCLK
                  CJNE A,#02,ALT1LOP1
                  SETB TR0
                  SETB KALT1F
                  RET
        CALT1RET: CLR KALT1F
                  RET
        ;20.SET鍵處理
        ;---------KSETCL(20)--------
        KSETCL:   INC STATU
                  MOV A,STATU
                  CJNE A,#07H,STATUDIS
                  MOV STATU,#00H
        STATUDIS: MOV DISNUM0,#23H
                  MOV DISNUM1,STATU
                  RET
        ;21.KALT0鍵處理
        ;---------KALT0CL(21)-------
        KALT0CL:  MOV A,STATU
                  JNZ CASEB1
        KA0S0GO:  INC DPTR
                  INC DPTR
                  LCALL RYFSUP
                  MOV A,R7
                  JNZ EQUFF
                  MOV DPTR,#T_SONGS
                  SJMP KA0NEXT
        EQUFF:    INC A
                  JNZ KA0S0GO
        KA0NEXT:  LCALL RYFSUP
                  MOV CSN,R6
                  LCALL CSNSDISN
                  MOV A,DPL
                  CLR C
                  SUBB A,#02H
                  JNC KA0NEXT1
                  DEC DPH
        KA0NEXT1: MOV DPL,A
                  CLR REP0F
                  CLR REP1F
                  CLR REP2F
                  CLR REP3F
                  SETB NEXTSF
                  SETB SECHSTOF
                  RET
        CASEB1:   CJNE A,#01H,CASEB2
                  INC LDYDSR
                  MOV A,LDYDSR
                  CJNE A,#04H,LDYDSL4
                  MOV LDYDSR,#00H
        LDYDSL4:  MOV DISNUM0,LDYDSR
                  MOV DISNUM1,#26H
                  RET
                  HCOSPEEDN EQU 12H
        CASEB2:   CJNE A,#02H,CASEB3
                  MOV A,COSPEEDN
            CJNE A,#HCOSPEEDN,KA0NEXT4
        KA0NEXT4: JNC KA0NEXT5
                  INC COSPEEDN
        KA0NEXT5: MOV SPENR,COSPEEDN
                  LCALL SPENSDISN
                  RET
        CASEB3:   CJNE A,#03H,CASEB4
                  CLR SPEEDF
                  LCALL SPEEDCL
                  RET
        CASEB4:   CJNE A,#04H,CASEB5
                  CLR TONEF
                  LCALL TONECL
                  RET
        CASEB5:   CJNE A,#05H,CASEB6
                  CPL LOCF
                  JNB LOCF,KA0NEXT2
                  MOV DISNUM0,#24H
                  SJMP KA0NEXT3
        KA0NEXT2: MOV DISNUM0,#25H
        KA0NEXT3: MOV DISNUM1,#26H
                  RET
        CASEB6:   CJNE A,#06H,KA0RET
                  CPL CUYFD
                  JNB CUYFD,KA0NEXT6
                  MOV DISNUM0,#24H
                  SJMP KA0NEXT7
        KA0NEXT6: MOV DISNUM0,#25H
        KA0NEXT7: MOV DISNUM1,#28H
        KA0RET:   RET
        ;22.速度數(shù)送顯示寄存器
        ;---------SPENSDISN(22)----
        SPENSDISN:MOV A,SPENR
                  ANL A,#0FH
                  MOV DISNUM0,A
                  MOV A,SPENR
                  SWAP A
                  ANL A,#0FH
                  MOV DISNUM1,A
                  RET
        ;23.速度處理
        ;---------SPEEDCL(23)------
                  HSPEED  EQU 02H;
                  LSPEED  EQU 50H;
        SPEEDCL:  JB  SPEEDF,DNSPEED
              CJNE R3,#HSPEED,SCLNEXT
        SCLNEXT:  JC  SCLNEXT1
                  DEC R3
                  SJMP SCLNEXT1
        DNSPEED:  
        CJNE R3,#LSPEED,SCLNEXT2
        SCLNEXT2: JNC SCLNEXT1
                  INC R3
        SCLNEXT1: LCALL CSBESTOJG
                JNB CSBESTOF,SCLNEXT3
                  INC R0
                  INC R0
                  MOV @R0,03H
        SCLNEXT3: LCALL COSPECL
                  MOV SPENR,R1
                  LCALL SPENSDISN
                  RET
        ;24.音調(diào)處理
        ;---------TONECL(24)---------
                 ;LTONE  EQU 00  ;C
                  HTONE  EQU 11  ;B
        TONECL:   JB  TONEF,DNTONE
            &, nbsp; CJNE R2,#HTONE,TCLNEXT0
        TCLNEXT0: JNC TCLNEXT
                  INC R2
                  SJMP TCLNEXT
        DNTONE:   MOV A,R2
                  JZ  TCLNEXT
                  DEC R2
        TCLNEXT:  LCALL CSBESTOJG
                JNB CSBESTOF,TCLNEXT1
                  INC R0
                  MOV @R0,02H
        TCLNEXT1: PUSH DPL
                  PUSH DPH
                  MOV DPTR,#T_TONDISC
                  MOV A,R2
                  RL A
                  MOVC A,@A+DPTR
                  MOV DISNUM1,A
                  MOV A,R2
                  RL A
                  INC A
                  MOVC A,@A+DPTR
                  MOV DISNUM0,A
                  POP DPH
                  POP DPL
                  RET
        T_TONDISC:DW 200CH ; C
                  DW 210CH ;#C
                  DW 200DH ; D
                  DW 210DH ;#D
                  DW 200EH ; E
                  DW 200FH ; F
                  DW 210FH ;#F
                  DW 2022H ; G
                  DW 2122H ;#G
                  DW 200AH ; A
                  DW 210AH ;#A
                  DW 200BH ; B
        ;25.KALT1鍵處理
        ;---------KALT1CL(25)--------
        KALT1CL:  MOV A,STATU
                  JNZ CASE1
                  LCALL CSBESTOJG
                  JNB CSBESTOF,KA1NEXT
                  MOV @R0,#00H
                  DEC BUFF0
                  SJMP KA1NEXT2
        KA1NEXT: CJNE R0,#7EH,KA1NEXT1
        KA1NEXT1: JNC KA1NEXT2
                  MOV @R0,CSN
                  INC R0
                  MOV @R0,02H
                  INC R0
                  MOV @R0,03H
                  INC BUFF0
        KA1NEXT2: LCALL CSNSDISN
                  SETB SECHSTOF
                  RET
        CASE1:    CJNE A,#01H,CASE2
                  INC RDYDSR
                  MOV A,RDYDSR
                  CJNE A,#04H,RDYDSL4
                  MOV RDYDSR,#00H
        RDYDSL4:  MOV DISNUM0,RDYDSR
                  MOV DISNUM1,#27H
                  RET
        CASE2:    CJNE A,#02H,CASE3
                  MOV A,COSPEEDN
                  JZ  KA1NEXT5
                  DEC COSPEEDN
        KA1NEXT5: MOV SPENR,COSPEEDN
                  LCALL SPENSDISN
                  RET
        CASE3:    CJNE A,#03H,CASE4
                  SETB SPEEDF
                  LCALL SPEEDCL
                  RET
        CASE4:    CJNE A,#04H,CASE5
                  SETB TONEF
                  LCALL TONECL
                  RET
        CASE5:    CJNE A,#05H,CASE6
                  CPL ROCF
                  JNB ROCF,KA1NEXT3
                  MOV DISNUM0,#24H
                  SJMP KA1NEXT4
        KA1NEXT3: MOV DISNUM0,#25H
        KA1NEXT4: MOV DISNUM1,#27H
                  RET
        CASE6:    CJNE A,#06H,KA1RET
                  MOV DISNUM0,#23H
                  MOV DISNUM1,#06H
        KA1RET:   RET
        ;========= 樂曲表============
        ;---------SONGS--------------
        T_SONGS:       樂曲表表首
        dw 01ffh,;song1:xiao la ba...
             dw  0b05h,
             dw  2504h,
             dw  2604h,
             dw  2506h,
             dw  0002h,
             dw  2504h,
             dw  2604h,
             dw  2506h,
             dw  0002h,
             dw  2504h,
             dw  2604h,
             dw  2504h,
             dw  2304h,
             dw  2204h,
             dw  2104h,
             dw  2206h,
        DW 16FFH;SONG16:Liang Zhi Lao Hu
             DW  0715H
             DW  0FF21H  ;REP21
             DW  0FF01H  ;REP01
             DW  2102H
             DW  2202H
             DW  2302H
             DW  2102H
             DW  0FF02H  ;REP02
             DW  0FF03H  ;REP03
             DW  2302H
             DW  2402H
             DW  2504H
             DW  2302H
             DW  2402H
             DW  2504H
             DW  0FF11H  ;REP11
             DW  2501H
             DW  2601H
             DW  2501H
             DW  2401H
             DW  2302H
             DW  2102H
             DW  0FF12H  ;REP12
             DW  0FF13H  ;REP13
             DW  2202H
             DW  1502H
             DW  2104H
             DW  2202H
             DW  1502H
             DW  2104H
             DW  0FF22H  ;REP22
             DW  0FF23H  ;REP23
             DW  0000H  ;樂曲表表尾
                  END
        ;=========END================
        注:設(shè)計者手頭有近40首曲子的音樂數(shù)據(jù)(花了大量時間對簡譜進行手工轉(zhuǎn)換!),而每塊AT89C51的4KROM種除指令外剩下空間只可放14首左右。
            這里給出第一曲和第16曲《兩只老虎》作一示例。
         


























        免責聲明: 本文章轉(zhuǎn)自其它平臺,并不代表本站觀點及立場。若有侵權(quán)或異議,請聯(lián)系我們刪除。謝謝!
            矽源特科技ChipSourceTek

        Back Top

        av免费久久精品,国产精品一久久香蕉国产线看观看,色欲色香天天天综合无码花季,国产呦在线观看无码a观看
        • <dfn id="lugmd"></dfn>
        • <dfn id="lugmd"></dfn>
          <dfn id="lugmd"><code id="lugmd"></code></dfn>
          <dfn id="lugmd"><code id="lugmd"><input id="lugmd"></input></code></dfn>
          <td id="lugmd"><form id="lugmd"><nobr id="lugmd"></nobr></form></td>
            <dfn id="lugmd"></dfn><form id="lugmd"><thead id="lugmd"><input id="lugmd"></input></thead></form>
            <span id="lugmd"><var id="lugmd"><input id="lugmd"></input></var></span>
            <menu id="lugmd"><code id="lugmd"></code></menu>