• <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支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      功能齊全的單片機音樂程序
      文章長度[17206] 加入時間[2007/1/12] 更新時間[2024/11/10 2:08:21] 級別[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
      KA0S0G 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,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曲《兩只老虎》作一示例。
       

      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嫩草黄片动漫版