新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 边显示滚动汉字边播放音乐的汇编程序

边显示滚动汉字边播放音乐的汇编程序

作者:时间:2012-08-18来源:网络收藏
//------------------------------------------
//51hei-5开发板测试程序.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 去除休止时杂声
// 2010.03.02 定时器T1中断显示
//------------------------------------------
//已用寄存器:
//R0 R1 R2 R4 R5 R6 R7
//-------------------------------------------
YY EQU P3.1 ;音乐输出口
ORG 0000H
LJMP MAIN ;跳到主函数
ORG 000BH ;定时器入口
LJMP T00 ;跳到定时器中断服务子程序
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 ;显示扫描数
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 //奏第一首循环
MOV A,R7
CJNE A,#01H,MAIN2;下一首
LOOP:SETB TR0
MOV A,30H
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;取定时器高八位数据
JZ RERT
LOO1: MOV R0,A
MOV A,30H
MOV DPTR,#TAB2
MOVC A,@A+DPTR ;取定时器低八位数据
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA ;遇0FFH歌曲结束
LJMP ENDD
NCA: MOV A,30H
MOV DPTR,#TAB3
MOVC A,@A+DPTR ;取节拍时值
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 //奏第二首循环
MOV A,R7
CJNE A,#02H,LMAIN0
LOOOP:SETB TR0
MOV A,30H
MOV DPTR,#TAB4
MOVC A,@A+DPTR ;取定时器高八位数据
JZ RERT1
LOOO1: MOV R0,A
MOV A,30H
MOV DPTR,#TAB5
MOVC A,@A+DPTR ;取定时器低八位数据
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA1 ;遇0FFH歌曲结束
LJMP ENDD1
NCA1: MOV A,30H
MOV DPTR,#TAB6
MOVC A,@A+DPTR ;取节拍时值
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 //奏第三首循环
MOV A,R7
CJNE A,#03H,LMAIN4
LOO1P:SETB TR0
MOV A,30H
MOV DPTR,#TAB13
MOVC A,@A+DPTR ;取定时器高八位数据
JZ RERT2
LOO11: MOV R0,A
MOV A,30H
MOV DPTR,#TAB14
MOVC A,@A+DPTR ;取定时器低八位数据
MOV R1,A
MOV TH0,R0
MOV TL0,R1
ANL A,R0
CJNE A,#0FFH,NCA4 ;遇0FFH歌曲结束
LJMP ENDD4
NCA4: MOV A,30H
MOV DPTR,#TAB15
MOVC A,@A+DPTR ;取节拍时值
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

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭