• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      功能齊全的單片機音樂程序
      文章長度[] 加入時間[2007/7/14] 更新時間[2025/5/12 13:17:08] 級別[0] [評論] [收藏]


      單片機最小系統,兩位LED數碼管由串口輸出接兩個164驅動,Lout,Rout為左右聲道輸出,
      SET,  ALT0, ALT1為三個按鍵,也可自己在開始的I/O定義改成你想用的I/O口;12M晶振
      若用89C51則只可裝下約14首歌曲,用89C52則可裝下近40曲


      源程序
      ;   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;狀態寄存器
      LDYDSR   EQU 0BH;左低音度數
      RDYDSR   EQU 0CH;右低音度數
      LDYAR    EQU 0DH;左低音協助
      RDYAR    EQU 0EH;右低音協助
      JPCLK    EQU 0FH;節拍時鐘
      GENCLK   EQU 10H;通用時鐘
      SNSDCLK  EQU 11H;搜、存顯示時鐘
      GEN16T0  EQU 12H;通用16位時鐘
      GEN16T1  EQU 13H;
      SETST0   EQU 14H;設置狀態
      SETST1   EQU 15H;  定時時鐘
      DISNUM0  EQU 16H;顯示數值
      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;左聲道開關標志
      ROCF     BIT 01H;右聲道開關標志
      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;音調增/減標志
      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;堆棧區(棧底)
      BUFF0    EQU 43H;鎖存曲數
      BUFF     EQU 44H;鎖存曲緩沖區
      ;============================

      ;=========BEGIN==============
                ORG   0000H
                LJMP  MAIN
      ;---------T0INT--------------
                ORG   000BH
                LJMP  T0INT

      ;---------T1INT--------------
                ORG   001BH
                LJMP  T1INT
      ;1.音頻發生器
      ;---------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.統唱曲首處理
      ;---------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.速度數送顯示寄存器
      ;---------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.音調處理
      ;---------TONECL(24)---------
               ;LTONE  EQU 00  ;C
                HTONE  EQU 11  ;B
      TONECL:   JB  TONEF,DNTONE
            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,ROV 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================
      注:設計者手頭有近40首曲子的音樂數據(花了大量時間對簡譜進行手工轉換!),而每塊
      AT89C51的4KROM種除指令外剩下空間只可放14首左右。
          這里給出第一曲和第16曲《兩只老虎》作一示例。




      (文章推薦人:電池)

      2
                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================
      注:設計者手頭有近40首曲子的音樂數據(花了大量時間對簡譜進行手工轉換!),而每塊
      AT89C51的4KROM種除指令外剩下空間只可放14首左右。
          這里給出第一曲和第16曲《兩只老虎》作一示例。




      (文章推薦人:電池)

      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版