这个原理主要是控制亮和灭的百分比,亮/灭百分比越大那么就看上去亮,反之暗些。当然,我们需要将亮灭时间控制在20ms以内。
org 00H
ajmp start
org 30H
start:
;step 1:let 74HC138 enable
clr P1.4
setb P1.3
;step 2:selet LEDS6
;setb P1.2
;setb P1.1
;clr p1.0
sbit ADDR0=P1.0
sbit ADDR1=P1.1
sbit ADDR2=P1.2
setb ADDR2
setb ADDR1
clr ADDR0
;control the leds
main:
mov R7,#255
s1:
mov A,#0FEH
mov P0,A
mov R6,#1
ss1:
call delay1
djnz R6,ss1
mov A,#0FFH
mov P0,A
call delay
djnz R7,s1
mov R7,#200
s2:
mov A,#0FEH
mov P0,A
mov R6,#2
ss2:
call delay1
djnz R6,ss2
mov A,#0FFH
mov P0,A
call delay
djnz R7,s2
mov R7,#180
s3:
mov A,#0FEH
mov P0,A
mov R6,#3
ss3:
call delay1
djnz R6,ss3
mov A,#0FFH
mov P0,A
call delay
djnz R7,s3
mov R7,#150
s4:
mov A,#0FEH
mov P0,A
mov R6,#5
ss4:
call delay1
djnz R6,ss4
mov A,#0FFH
mov P0,A
call delay
djnz R7,s4
mov R7,#100
s5:
mov A,#0FEH
mov P0,A
mov R6,#8
ss5:
call delay1
djnz R6,ss5
mov A,#0FFH
mov P0,A
call delay
djnz R7,s5
mov R7,#80
s6:
mov A,#0FEH
mov P0,A
mov R6,#11
ss6:
call delay1
djnz R6,ss6
mov A,#0FFH
mov P0,A
call delay
djnz R7,s6
mov R7,#60
s7:
mov A,#0FEH
mov P0,A
mov R6,#15
ss7:
call delay1
djnz R6,ss7
mov A,#0FFH
mov P0,A
call delay
djnz R7,s7
mov R7,#255
s8:
mov A,#0FEH
mov P0,A
mov R6,#6
ss8:
call delay1
djnz R6,ss8
djnz R7,s8
mov A,#0FFH
mov P0,A
call delay
ajmp main
//4ms
delay:
mov R1,#1H
loop1:
mov R2,#01FH
loop2:
mov R3,#30
loop3:
djnz R3,loop3
djnz R2,loop2
djnz R1,loop1
ret
//1ms
delay1:
mov R0,#1
lp1:
mov R1,#5
lp2:
mov R2,#50
lp3:
djnz R2,lp3
djnz R1,lp2
djnz R0,lp1
ret
end