
;********WAVE-E6000/T**************************
;*MCU: AT89C51 *
;*MCU-crystal: 12M *
;*Version: 00 *
;*Last Updata: *
;*Author: www.picavr.com *
;*Description:
; 广告灯程序可通过按键切换不同的*
; 显示效果 *
;**********************************************
;**********************************************
; 中断入口程序
;**********************************************
ORG 0000H ;程序执行开始地址
AJMP MAIN ;到主程序
ORG 0003H ;外中断0中断入口地址
RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
;----------------------------------------------
ORG 0030H ;
;**********************************************
MAIN:
MOV 20H,#00H ;清通用寄存器
MOV 21H,#00H ;清通用寄存器
MOV 22H,#00H ;
MOV 23H,#00H ;
MOV 24H,#00H ;
MOV 25H,#00H ;
MOV 26H,#00H ;
CLR 00H ;清位标志
CLR 01H ;
CLR 02H ;
CLR 03H ;
MOV SP,#60H ;
SETB 00H ;20H.0位置1(上电时自动执行闪烁功能1)
;*********************************************
LOOP:
CALL KEYWORK ;调用键扫描子程序
JB 00H,LED1 ;20H.0位为1时执行LED1
JB 01H,LED2 ;20H.1位为1时执行LED2
JB 02H,LED3 ;20H.2位为1时执行LED3
JB 03H,LOOP ;
AJMP LOOP ;返回主程序LOOP
LED3:
AJMP LED33 ;
;**********************************************
;第1种闪烁功能程序
LED1:
MOV P1,#01111111B
ACALL DELAY
MOV P1,#10111111B
ACALL DELAY
MOV P1,#11011111B
ACALL DELAY
MOV P1,#11101111B
ACALL DELAY
MOV P1,#11110111B
ACALL DELAY
MOV P1,#11111011B
ACALL DELAY
MOV P1,#11111101B
ACALL DELAY
MOV P1,#11111110B
ACALL DELAY
MOV P1,#0FFH
ACALL DELAY
ACALL DELAY
MOV P1,#00H
ACALL DELAY
ACALL DELAY
MOV P1,#0FFH
ACALL DELAY
MOV P1,#11111110B
ACALL DELAY
MOV P1,#11111101B
ACALL DELAY
MOV P1,#11111011B
ACALL DELAY
MOV P1,#11110111B
ACALL DELAY
MOV P1,#11101111B
ACALL DELAY
MOV P1,#11011111B
ACALL DELAY
MOV P1,#10111111B
ACALL DELAY
MOV P1,#01111111B
ACALL DELAY
AJMP LED1
;***********************************************
;第2种闪烁功能程序
LED2:
MOV P1,#11100111B
ACALL DELAY
MOV P1,#11011011B
ACALL DELAY
MOV P1,#10111101B
ACALL DELAY
MOV P1,#01111110B
ACALL DELAY
ACALL DELAY
MOV P1,#10111101B
ACALL DELAY
MOV P1,#11011011B
ACALL DELAY
MOV P1,#11100111B
ACALL DELAY
MOV P1,#55H
ACALL DELAY
AJMP LED2
;************************************************
; 第3种闪烁功能程序
LED33:
MOV 22H,0FFH ;P1.0---P1.7 left_move_ALL_DISP
MOV R1,#08H ;
LED3_1:
MOV A,22H ;
CLR C ;
RLC A ;
MOV 22H,A ;
MOV P1,A ;
ACALL DELAY ;
DJNZ R1,LED3_1 ;
MOV P1,#0FFH ;
ACALL DELAY ;
ACALL DELAY ;
MOV 22H,#00H ;
MOV R1,#08H ;P1.0---P1.7 right_move_OFF_DISP
LED3_2:
MOV A,22H ;
SETB C ;
RRC A ;
MOV 22H,A ;
MOV P1,A ;
ACALL DELAY ;
DJNZ R1,LED3_2 ;
AJMP LOOP ;转MAIN
;**************************************************
;扫键程序
;**************************************************
KEYWORK:
MOV P2,#0FFH ;置P3口为输入状态
JNB P2.4,KEY0 ;读P3.0口,若为0转KEY0
JNB P2.5,KEY1 ;读P3.1口,若为0转KEY1
JNB P2.6,KEY2 ;读P3.2口,若为0转KEY2
JNB P2.7,KEY3 ;读P3.3口,若为0转KEY3
RET ;子程序返回
;****************************************************
;闪烁功能0键处理程序
KEY0:
LCALL DL10MS ;延时10毫秒消抖
JB P3.0,OUT0 ;P3.0为1,子程序返回(干扰)
SETB 00H ;20H.0位置1(执行闪烁功能1标志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0: RET ;子程序返回
;****************************************************
; 闪烁功能1键处理程序
KEY1:
LCALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(执行闪烁功能2标志)
CLR 00H
CLR 02H
CLR 03H
OUT1: RET
;****************************************************
;闪烁功能2键处理程序
KEY2:
LCALL DL10MS
JB P3.2,OUT2
SETB 02H ;20H.2位置1(执行闪烁功能3标志)
CLR 01H
CLR 00H
CLR 03H
OUT2: RET
;****************************************************
;闪烁功能(备用)键处理程序
KEY3:
LCALL DL10MS
JB P3.3,OUT3
SETB 03H ;20H.3位置1(执行备用闪烁功能标志)
CLR 01H
CLR 02H
CLR 00H
OUT3:
RET
;****************************************************
;***************************************************;
; 延时程序 ;
;***************************************************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:
MOV R2,#0FFH
LOOP1:
DJNZ R2,LOOP1
RET
;****************************************************
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:
MOV R3,#14H
LOOP2:
LCALL DL512
DJNZ R3,LOOP2
RET
;*****************************************************
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)
DELAY:
MOV R4,#0FH
LOOP3:
LCALL DL25MS
DJNZ R4,LOOP3
RET
;*****************************************************
;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值
DL25MS:
MOV R5,#0FFH
LOOP4:
LCALL KEYWORK
DJNZ R5,LOOP4
RET
;*****************************************************
END ;程序结束