📄 back.asm
字号:
CLR G_OUT
RET
;-------------回控-----------------------------------
;青色, 兰、绿色增加,
JIANBAIN_GB:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
JIANBAIN_GB_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_GB_1
MOV MS_COUNT,#00H
INC G_LUM
INC B_LUM
; DEC B_LUM
MOV A,B_LUM
CJNE A,#0FFH,JIANBAIN_GB_1
; JNZ JIANBAIN_GB_1
; CLR B_OUT
; RET
;兰、绿色减少,
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
JIANBAIN_GB_2:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_GB_2
MOV MS_COUNT,#00H
DEC G_LUM
DEC B_LUM
; INC B_LUM
MOV A,G_LUM
JNZ JIANBAIN_GB_2
CLR G_OUT
CLR B_OUT
RET
;------------回控------------------------------------------
;粉红,红色\兰色增加
JIANBAIN_RB:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
JIANBAIN_RB_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_RB_1
MOV MS_COUNT,#00H
INC R_LUM
INC B_LUM
; DEC B_LUM
MOV A,B_LUM
CJNE A,#0FFH,JIANBAIN_RB_1
; JNZ JIANBAIN_RB_1
; CLR B_OUT
; RET
;红色\兰色减少,
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
JIANBAIN_RB_2:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_RB_2
MOV MS_COUNT,#00H
DEC R_LUM
DEC B_LUM
; INC B_LUM
MOV A,R_LUM
JNZ JIANBAIN_RB_2
CLR R_OUT
CLR B_OUT
RET
;-------------回控------------------------------------
;红、绿、兰增加,
JIANBAIN_RGB:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
JIANBAIN_RGB_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_RGB_1
MOV MS_COUNT,#00H
INC R_LUM
INC G_LUM
INC B_LUM ;ADD
MOV A,R_LUM
CJNE A,#0FFH,JIANBAIN_RGB_1
; RET
;红、绿、兰减少,
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
JIANBAIN_RGB_2:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,JIANBAIN_RGB_2
MOV MS_COUNT,#00H
DEC R_LUM
DEC G_LUM
DEC B_LUM ;ADD
MOV A,R_LUM
JNZ JIANBAIN_RGB_2
CLR R_OUT
CLR G_OUT
CLR B_OUT ;ADD
RET
;-------------回控---------------------------------------
/***RUBU***/;15.红增加,兰增加,绿不变
RU_G_BU:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
RU_G_BU_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_G_BU_1
MOV MS_COUNT,#00H
INC R_LUM
INC B_LUM
MOV A,B_LUM
CJNE A,#0FFH,RU_G_BU_1
; RET
;-------------回控-------------------------------------
/***RDBD***/;16.红减少,兰减少,绿不变
RD_G_BD:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
RD_G_BD_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RD_G_BD_1
MOV MS_COUNT,#00H
DEC R_LUM
DEC B_LUM
MOV A,R_LUM
JNZ RD_G_BD_1
CLR R_OUT
CLR B_OUT
RET
;------------回控---------------------------------------
/***BUGU***/;17.红不变,绿增加,兰增加
R_GU_BU:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
R_GU_BU_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,R_GU_BU_1
MOV MS_COUNT,#00H
INC G_LUM
INC B_LUM
MOV A,G_LUM
CJNE A,#0FFH,R_GU_BU_1
; RET
;------------回控----------------------------------------
/***BDGD***/;18.红不变,绿减少,兰减少
R_GD_BD:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
R_GD_BD_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,R_GD_BD_1
MOV MS_COUNT,#00H
DEC G_LUM
DEC B_LUM
MOV A,G_LUM
JNZ R_GD_BD_1
CLR G_OUT
CLR B_OUT
RET
;------------回控------------------------------------------
;/***RUGDBD***/;19红增加,绿减少,兰减少
RU_GD_BD:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
RU_GD_BD_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_GD_BD_1
MOV MS_COUNT,#00H
INC R_LUM
DEC G_LUM
DEC B_LUM
MOV A,G_LUM
JNZ RU_GD_BD_1
CLR G_OUT
CLR B_OUT
; RET
;------------回控--------------------------------------
/***RDGUBU***/;20.红减少,绿增加,兰增加
RD_GU_BU:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H
RD_GU_BU_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RD_GU_BU_1
MOV MS_COUNT,#00H
DEC R_LUM
INC G_LUM
INC B_LUM
MOV A,R_LUM
JNZ RD_GU_BU_1
CLR R_OUT
RET
;------------回控--------------------------------------
;/***RDGUBD***/;21.红减少,绿增加,兰减少
RD_GU_BD:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
RD_GU_BD_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RD_GU_BD_1
MOV MS_COUNT,#00H
DEC R_LUM
INC G_LUM
DEC B_LUM
MOV A,R_LUM
JNZ RD_GU_BD_1
CLR R_OUT
CLR B_OUT
; RET
;-----------回控---------------------------------------
/***RUGDBU***/;22
RU_GD_BU:
MOV DIM_COUNT,#00H
MOV MS_COUNT,#00H
RU_GD_BU_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_GD_BU_1
MOV MS_COUNT,#00H
INC R_LUM
DEC G_LUM
INC B_LUM
MOV A,G_LUM
JNZ RU_GD_BU_1
CLR G_OUT
RET
;-----------回控----------------------------------------
/***RDGDBU***/;23
RD_GD_BU:
MOV DIM_COUNT,#00H
MOV MS_COUNT,#00H ;
RD_GD_BU_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RD_GD_BU_1
MOV MS_COUNT,#00H
DEC R_LUM
DEC G_LUM
INC B_LUM
MOV A,R_LUM
JNZ RD_GD_BU_1
CLR R_OUT
CLR G_OUT
; RET
;-----------回控--------------------------------------
/***RUGUBD***/;24
RU_GU_BD:
MOV DIM_COUNT,#00H
MOV MS_COUNT,#00H
RU_GU_BD_1:
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_GU_BD_1
MOV MS_COUNT,#00H
INC R_LUM
INC G_LUM
DEC B_LUM
MOV A,B_LUM
JNZ RU_GU_BD_1
CLR B_OUT
RET
;-----------回控-------------------------------------
/***RUGUBU***/;25定色闪烁,色增加
RU_GU_BU:
; MOV DIM_COUNT,#0AFH
MOV MS_COUNT,#00H ;
RU_GU_BU_1:
; LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_GU_BU_1
MOV MS_COUNT,#00H
INC R_LUM
INC G_LUM
INC B_LUM
MOV A,R_LUM
CJNE A,#08H,RU_GU_BU_1
; JNZ RD_GD_BU_1
RET
;----------回控-------------------------------------
/***RDGDBD***/;26. 定色闪烁,色减少
RD_GD_BD:
; MOV DIM_COUNT,#2EH
MOV MS_COUNT,#00H
RD_GD_BD_1:
; LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RD_GD_BD_1
MOV MS_COUNT,#00H
DEC R_LUM
DEC G_LUM
DEC B_LUM
MOV A,B_LUM
JNZ RD_GD_BD_1
CLR R_OUT
CLR G_OUT
CLR B_OUT
RET
/***RUGD***/;4.紫色渐变,红色增加,绿色减少,兰不变
RU_GD_B:
MOV DIM_COUNT,#00H ;PWM基本廷时计数
MOV MS_COUNT,#00H ;
RU_GD_B_1:
LCALL DELAY20US
LCALL DELAY20US
MOV A,MS_COUNT
CJNE A,SPEED,RU_GD_B_1
MOV MS_COUNT,#00H
INC R_LUM
DEC G_LUM
MOV A,G_LUM
JNZ RU_GD_B_1
CLR G_OUT
RET
;回控操作用T0定时器
T0_INT:
PUSH ACC
PUSH PSW
INC DIM_COUNT ;PWM基本廷时计数
MOV A,DIM_COUNT
JNZ T0INT_1 ;不为0时直接跳到
;;为0时作以下处理
MOV A,R_LUM
JZ T0INT_6
SETB R_OUT ;如果存有恢度,则要先置1
SJMP T0INT_7
T0INT_6:
CLR R_OUT ;如果是0恢度,则要置为0,以消除余辉
T0INT_7: ;如果不在意这余辉,定时中断子可以更短。
MOV A,G_LUM
JZ T0INT_8
SETB G_OUT
SJMP T0INT_9
T0INT_8:
CLR G_OUT
T0INT_9:
MOV A,B_LUM
JZ T0INT_10
SETB B_OUT
SJMP T0INT_11
T0INT_10:
CLR B_OUT
T0INT_11:
INC MS_COUNT ;按25MS加1
SJMP T0INT_5 ;直接退出
T0INT_1:
MOV A,DIM_COUNT ;PWM基本廷时计数
CJNE A,#0FFH,T0INT_2
SJMP T0INT_5 ;为FF时不做比较,是因为FF代表全亮
T0INT_2:
MOV A,DIM_COUNT ;PWM基本廷时计数
CJNE A,R_LUM,T0INT_3
CLR R_OUT
T0INT_3:
MOV A,DIM_COUNT
CJNE A,G_LUM,T0INT_4
CLR G_OUT
T0INT_4:
MOV A,DIM_COUNT
CJNE A,B_LUM,T0INT_5
CLR B_OUT
T0INT_5: POP PSW
POP ACC
RETI
;*****/
;===============================================
;这段程序要保证小于两个中断之间*/
DELAY20US:
MOV R7,#10H
DELAY20US_1: NOP
DJNZ R7,DELAY20US_1
RET
DELAY05S:
MOV R5, #0AH
DELAY05S_1: MOV R6, #78H
DELAY05S_2: MOV R7, #78H
DELAY05S_3: DJNZ R7, DELAY05S_3
DJNZ R6, DELAY05S_2
DJNZ R5, DELAY05S_1
RET
DELAY5S:
MOV R5,#32H
DELAY5S_1:
MOV R6,#0FEH
DELAY5S_2:
MOV R7,#0FEH
DELAY5S_3:
DJNZ R7,DELAY5S_3
DJNZ R6,DELAY5S_2
DJNZ R5,DELAY5S_1
RET
DELAYMS:
MOV R5,#0AFH
DELAYMS_1:
MOV R6,#0AFH
DELAYMS_2:
NOP
DJNZ R6,DELAYMS_2
DJNZ R5,DELAYMS_1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -