| 
 
   
- 帖子
 - 120 
 - 主题
 - 79 
 - 精华
 - 0 
 - 积分
 - 60 
 - 在线时间
 - 5 小时 
 - 注册时间
 - 2010-10-13 
 
  | 
单片机最小系统,两位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,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================
 
  复制代码 |   
 
 
 
 |