?? yinyue.txt
字號:
程序清單
;-------系統晶振為6MHZ
START_ED EQU 0000H
BUF EQU 20H
SBF EQU 21H
MBF EQU 22H
HBF EQU 23H
BUF1 EQU 30H
BUF2 EQU 31H
DATAL EQU 32H
DATAH EQU 33H
STOP EQU 60H ;設STOP為標志位
ORG START_ED+0000H
LJMP START
ORG START_ED+000BH
LJMP CTC0
ORG START_ED+0013H
LJMP INTE1
ORG START_ED+001BH
LJMP CTC1
START: LCALL DS50MS
MOV DPTR,#0DFF8H ; 指向8155命令口
MOV A,#03H ;PA,PB為輸出口
MOVX @DPTR,A
MOV SP, #50H
MOV TMOD, #11H ;T0 AND T1 IN MOD1
MOV TH1, #38H
MOV TL1, #00H
MOV IE, #8AH ;開總中斷及T0,T1中斷,但外部中斷1仍被屏蔽
SETB TR1
MOV A,#00H
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV 23H,A
MOV 30H,A
MOV 31H,A
MOV 32H,A
MOV 33H,A
DISPLAY: MOV R0, #40H
MOV A, SBF
LCALL GET ;秒編碼,41H高位,40H低位
MOV R0, #42H
MOV A, MBF
LCALL GET ;分編碼,分別在43H,42H
DS1: MOV R0, #40H ; LED共陰極反向驅動
MOV R2, #08H ; 首先點亮LED4,它為最低位
DS2: MOV DPTR, #0DFF9H ;PA
MOV A, @R0
LCALL TABLE
MOVX @DPTR, A
MOV DPTR, #0DFFAH ;PB
MOV A, R2
MOVX @DPTR, A
MOV R3, #0FFH
DJNZ R3, $
INC R0
CLR C
MOV A, R2
RRC A
MOV R2, A
JNC DS2
MOV C,P1.1
ANL C,P1.2
JNC KEY
LJMP DISPLAY
TABLE: INC A
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
;-------編碼子程序
GET: MOV R1,A
ANL A, #0FH
MOV @R0,A
INC R0
MOV A, R1
SWAP A
ANL A, #0FH
MOV @R0, A
RET
;---------中斷T1程序
CTC1: MOV TH1, #38H ;定時0.1秒
MOV TL1, #00H
PUSH PSW
PUSH ACC
JB P1.3, NEXTCTC1
MOV A, #00H
MOV BUF, A
MOV SBF, A
MOV MBF, A
NEXTCTC1:INC BUF
MOV A, BUF
CJNE A, #0AH, QUIT
MOV BUF,#00H
MOV A, SBF
ADD A ,#01H
DA A
MOV SBF, A
CJNE A, #60H, QUIT
MOV SBF,#00H
MOV A, MBF
ADD A,#01H
DA A
MOV MBF, A
CJNE A, #60H, QUIT
MOV MBF, #00H
MOV A,HBF
ADD A,#01H
DA A
MOV HBF,A
CJNE A,#24H,QUIT
MOV HBF,#00H
QUIT: POP ACC
POP PSW
RETI
;--------鍵處理子程序
KEY: JNB P1.2,KEY2
LCALL DS10MS
JB P1.1,MAIN
HEREKEY1:NOP ;延時,抗干擾
LCALL DS10MS
JNB P1.1, HEREKEY1 ; 按鍵放下
ACALL INT
AJMP SONG1
KEY2: LCALL DS10MS
JB P1.2,MAIN
HEREKEY2:NOP
LCALL DS10MS
JNB P1.2,HEREKEY2
ACALL INT
AJMP SONG2
SONG1: MOV DPTR,#TAB1
MOV BUF2, #100 ;TAB1長
CLEAR: CLR A
MOVC A,@A+DPTR
ACALL PLAY
MAIN: LJMP DISPLAY
SONG2: MOV DPTR,#TAB2
MOV BUF2, #80 ;TAB2長
LJMP CLEAR
;--------放曲子程序
PLAY: CPL A
INC A
MOV BUF1, A
MOV TL0, BUF1 ;音頻周期作定時器0初值
MOV TH0,#0FFH ;由00H取反得到
SETB TR0
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R3,A
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R4,A
MOV DATAH, DPH ;存當前DPTR值
MOV DATAL, DPL
RET
;--------T0中斷子程序
CTC0: JB STOP, EXITCTC0
MOV TH0, #0FFH
MOV TL0, BUF1
CPL P1.0
DJNZ R3,EXITCTC0 ;R3為節拍周期低位
MOV R3,#0FFH
DJNZ R4,EXITCTC0 ;R4為節拍周期高位
AGAIN: MOV DPL, DATAL
MOV DPH, DATAH
INC DPTR
CLR A
MOVC A,@A+DPTR
ACALL PLAY
DEC BUF2
MOV A, BUF2
CJNE A, #00H,EXITCTC0
CLR TR0
CLR EX0
CLR P1.0
EXITCTC0:RETI
;--------開外部中斷1子程序
INT: SETB EX1
SETB IT1
RET
;--------外部中斷1子程序
INTE1: CPL STOP
LCALL DS10MS
RETI
;--------延時10MS子程序
DS10MS: PUSH PSW
SETB RS0 ;工作寄存器換區
MOV R6,#25
LOOP1: MOV R7,#100
DJNZ R7,$
DJNZ R6,LOOP1
CLR RS0
POP PSW
RET
;--------延時50MS子程序
DS50MS: MOV R1,#50
L1: MOV R2,#100
NOP
NOP
NOP
DJNZ R2,$
DJNZ R1,L1
RET
;--------曲譜<<同一首歌>>
TAB1:
DB 9DH,11H,04H,9DH,11H,04H,75H,17H,05H,68H,98H,05H,5CH,28H,06H,5CH,94H,03H,57H,0B7H,03H,5CH,28H,06H,75H,17H,05H,68H,98H,05H,68H,98H,05H,75H,17H,05H,8CH,70H,04H
DB 75H,17H,05H,75H,17H,05H,75H,17H,05H,75H,17H,05H,9DH,11H,04H,9DH,11H,04H,75H,17H,05H,68H,98H,05H,5CH,28H,06H,5CH,94H,03H,57H,0B7H,03H,4DH,23H,07H,75H,17H,05H
DB 57H,76H,06H,57H,0B7H,03H,5CH,94H,03H,4DH,23H,07H,68H,0CCH,03H,5CH,94H,03H,5CH,94H,03H,68H,0CCH,03H,68H,98H,05H,68H,98H,05H,68H,98H,05H,5CH,28H,06H,5CH,28H,06H
DB 4DH,23H,07H,39H,40H,09H,3DH,0BBH,08H,3DH,0DDH,04H,45H,70H,04H,45H,0E1H,07H,45H,0E1H,07H,4DH,23H,07H,4DH,11H,04H,45H,70H,04H,3DH,0BBH,08H,45H,70H,04H,4DH,11H,04H
DB 5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,57H,76H,06H,57H,0BBH,03H,57H,0BBH,03H,4DH,23H,07H,45H,0E1H,07H,4DH,23H,07H,57H,0BBH,03H,5CH,94H,03H,68H,98H,05H
DB 68H,98H,05H,7CH,0DDH,04H,7CH,0EEH,02H,8CH,0B8H,02H,9DH,11H,04H,8CH,70H,04H,75H,17H,05H,75H,17H,05H,75H,17H,05H,75H,17H,05H,39H,40H,09H,39H,40H,09H,45H,0E1H,07H
DB 45H,0E1H,07H,57H,76H,06H,57H,0BBH,03H,4DH,11H,04H,45H,0E1H,07H,45H,0E1H,07H,3DH,0BBH,08H,3DH,0DDH,04H,3DH,0DDH,04H,3DH,0BBH,08H,45H,70H,04H,4DH,11H,04H,5CH,28H,06H
DB 5CH,28H,06H,5CH,28H,06H,5CH,28H,06H,39H,40H,09H,39H,40H,09H,45H,0E1H,07H,45H,0E1H,07H,57H,76H,06H,57H,0BBH,03H,4DH,11H,04H,45H,0E1H,07H,45H,0E1H,07H,23H,22H,0EH
DB 23H,11H,07H,23H,11H,07H,45H,0E1H,07H,57H,0BBH,03H,5CH,94H,03H,68H,98H,05H,68H,98H,05H,68H,98H,05H,68H,98H,05H,26H,44H,0DH,26H,44H,0DH,75H,17H,05H,68H,98H,05H
DB 5CH,28H,06H,5CH,94H,03H,57H,0BBH,03H,5CH,28H,06H,75H,0BH,03H,75H,0BH,03H,68H,98H,05H,68H,4CH,03H,68H,98H,05H,68H,4CH,03H,75H,0BH,03H,23H,22H,0EH,23H,22H,0EH
DB 23H,22H,0EH,23H,22H,0EH,20H,0EEH,0EH,20H,0EEH,0EH,20H,0EEH,0EH,20H,77H,07H,23H,11H,08H,26H,44H,0DH,45H,0E1H,07H,4DH,23H,07H,68H,4CH,03H,68H,4CH,03H,57H,76H,06H
DB 57H,0BBH,03H,57H,0BBH,03H, 57H,76H,06H,5CH,94H,03H,68H,4CH,03H,4DH,23H,07H,4DH,23H,07H,4DH,23H,07H,4DH,23H,07H
;-------曲譜<<梁祝*化蝶>>
TAB2:
DB 0BBH,94H,03H,9DH,88H,02H,9DH,0C4H,01H,8CH,0DCH,01H,75H,0BH,03H,75H,05H,02H,68H,26H,02H,8CH,0DCH,01H,75H,05H,02H,9DH,88H,02H
DB 4DH,11H,04H,4DH,88H,02H,39H,10H,03H,45H,0B8H,02H,4DH,88H,02H,5CH,4AH,02H,4DH,88H,02H,68H,98H,05H,68H,98H,05H
DB 68H,4CH,03H,68H,26H,02H,5CH,4AH,02H,7CH,0EEH,02H,8CH,0B8H,02H,9DH,88H,02H,9DH,0C4H,01H,8CH,0DCH,01H,75H,0BH,03H,68H,4CH,03H
DB 0BBH,4AH,02H,75H,0BH,03H,8CH,0DCH,01H,9DH,0C4H,01H,8CH,0DCH,01H,75H,05H,02H,9DH,11H,04H,9DH,11H,04H
DB 5CH,94H,03H,5CH,4AH,02H,4DH,88H,02H,7CH,0EEH,02H,68H,4CH,03H,8CH,0DCH,01H,75H,05H,02H,9DH,88H,02H,9DH,11H,04H
DB 0BBH,0A5H,01H,9DH,0C4H,01H,0BBH,4AH,02H,9DH,0C4H,01H,8CH,0DCH,01H,7CH,0F7H,01H,68H,4CH,03H,8CH,70H,04H,8CH,0B8H,02H,9DH,0C4H,01H,8CH,0DCH,01H
DB 75H,0BH,03H,75H,05H,02H,68H,26H,02H,4DH,11H,04H,5CH,94H,03H,68H,4CH,03H,5CH,4AH,02H,68H,26H,02H,75H,0BH,03H,8CH,0DCH,01H,9DH,0C4H,01H
DB 0BBH,94H,03H,75H,17H,05H,8CH,0DCH,01H,75H,05H,02H,8CH,0DCH,01H,9DH,0C4H,01H,0BBH,0A5H,01H,9DH,0C4H,01H,8CH,0DCH,01H,75H,05H,02H
DB 9DH,11H,04H,9DH,11H,04H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -