邊顯示滾動(dòng)漢字邊播放音樂的匯編程序
//51hei-5開發(fā)板測(cè)試程序.ASM
// 音樂播放器>>
//硬件說明:12M晶振/MCU:89C51
//編寫人:李春起
//編定日期:2009.11.24
//修改日志:2010.01.05
// 2010.01.11 加暫停功能
// 2010.01.16 加第三首歌曲
// 2010.01.17 加第四首歌曲
// 2010.01.18 加第五首歌曲
// 2010.02.19 去除休止時(shí)雜聲
// 2010.03.02 定時(shí)器T1中斷顯示
//------------------------------------------
//已用寄存器:
//R0 R1 R2 R4 R5 R6 R7
//-------------------------------------------
YY EQU P3.1 ;音樂輸出口
ORG 0000H
LJMP MAIN ;跳到主函數(shù)
ORG 000BH ;定時(shí)器入口
LJMP T00 ;跳到定時(shí)器中斷服務(wù)子程序
ORG 001BH
LJMP T11
ORG 0020H ;程序存放起始
MAIN:
MOV TMOD,#11H
MOV IP,#08H
// MOV IE,#08AH
MOV TH0,R0
MOV TL0,R1
MOV TH1,#15H
MOV TL1,#0A0H
SETB ET0
CLR TR0
CLR TR1
SETB ET1
SETB EA
SETB YY
MOV R7,#00H ;歌曲選擇
MOV 30H,#00H
MOV 31H,#24
MOV 32H,#00H ;顯示掃描數(shù)
MOV 40H,#40
MOV R3,#00H
//========笑臉====================
MAKK: ACALL DELAY1
MAIN0:
MOV A,R7
CJNE A,#00H,LMA1
CLR TR0
XIAN00:
MOV A,30H
MOV DPTR,#TAB10
MOVC A,@A+DPTR
MOV P0,A
MOV A,30H
MOV DPTR,#TAB11
MOVC A,@A+DPTR
MOV P1,A
MOV A,30H
MOV DPTR,#TAB12
MOVC A,@A+DPTR
MOV P2,A
MA0D:MOV 54H,#20
JB P3.2,MA0D1
ACALL WDELAY
INC R7
CJNE R7,#04H,LMA0
MOV R7,#00H
LJMP LMA0
MA0D1:DJNZ 54H,MA0D1
MOV P0,#0FFH
MOV P1,#0FH
MOV P2,#00H
DJNZ 31H,XIAN00
MOV 31H,#24
INC 30H
MOV A,30H
CJNE A,#13,XIAN01
DJNZ 41H,XIA01
MOV 41H,#20
LJMP XIAN01
XIA01:MOV 30H,#0
LJMP XIAN00
XIAN01:
CJNE A,#25, ENDD0
MOV 41H,#40
MOV 30H,#0
ENDD0:LJMP XIAN00
LMA1:LJMP MAIN1
LMA0:LJMP MAIN0
//========第一首===========================
MAIN1:SETB TR1
MOV P0,#0FFH
MOV P1,#0FH
MOV P2,#00H
MOV 30H,#00H //奏第一首循環(huán)
MOV A,R7
CJNE A,#01H,MAIN2;下一首
LOOP:SETB TR0
MOV A,30H
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;取定時(shí)器高八位數(shù)據(jù)
JZ RERT
LOO1: MOV R0,A
MOV A,30H
MOV DPTR,#TAB2
MOVC A,@A+DPTR ;取定時(shí)器低八位數(shù)據(jù)
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA ;遇0FFH歌曲結(jié)束
LJMP ENDD
NCA: MOV A,30H
MOV DPTR,#TAB3
MOVC A,@A+DPTR ;取節(jié)拍時(shí)值
MOV R2,A
DELA:ACALL DELAY100
DEL1:DJNZ R2,DELA
INC 30H
LJMP LOOP
RERT:CLR TR0 ;休止
SETB YY
LJMP LOO1
ENDD:CLR TR0
ACALL DELAY1000
LJMP MAIN1 ;奏完返回
//========第二首===========================
MAIN2:
MOV P0,#0FFH
MOV P1,#0FH
MOV P2,#00H
MOV 30H,#00H //奏第二首循環(huán)
MOV A,R7
CJNE A,#02H,LMAIN0
LOOOP:SETB TR0
MOV A,30H
MOV DPTR,#TAB4
MOVC A,@A+DPTR ;取定時(shí)器高八位數(shù)據(jù)
JZ RERT1
LOOO1: MOV R0,A
MOV A,30H
MOV DPTR,#TAB5
MOVC A,@A+DPTR ;取定時(shí)器低八位數(shù)據(jù)
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA1 ;遇0FFH歌曲結(jié)束
LJMP ENDD1
NCA1: MOV A,30H
MOV DPTR,#TAB6
MOVC A,@A+DPTR ;取節(jié)拍時(shí)值
MOV R2,A
DELA1:ACALL DELAY100
DEL11:DJNZ R2,DELA1
INC 30H
LJMP LOOOP
RERT1:CLR TR0 ;休止
SETB YY
LJMP LOOO1
ENDD1:CLR TR0
ACALL DELAY1000
LJMP MAIN1 ;奏完返回
LMAIN0:LJMP MAIN4
//=======第三首==================================
MAIN4:MOV P0,#0FFH
MOV P1,#0FH
MOV P2,#00H
MOV 30H,#00H //奏第三首循環(huán)
MOV A,R7
CJNE A,#03H,LMAIN4
LOO1P:SETB TR0
MOV A,30H
MOV DPTR,#TAB13
MOVC A,@A+DPTR ;取定時(shí)器高八位數(shù)據(jù)
JZ RERT2
LOO11: MOV R0,A
MOV A,30H
MOV DPTR,#TAB14
MOVC A,@A+DPTR ;取定時(shí)器低八位數(shù)據(jù)
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA4 ;遇0FFH歌曲結(jié)束
LJMP ENDD4
NCA4: MOV A,30H
MOV DPTR,#TAB15
MOVC A,@A+DPTR ;取節(jié)拍時(shí)值
MOV R2,A
DELA31:ACALL DELAY100
DEL31:DJNZ R2,DELA31
INC 30H
LJMP LOO1P
RERT2:CLR TR0 ;休止
SETB YY
LJMP LOO11
ENDD4:CLR TR0
ACALL DELAY1000
LJMP MAIN4 ;奏完返回
LMAIN4:LJMP MAIN5
評(píng)論