📄 led
字号:
;****************************************************************
;* ★★★ LED发光二极管调光实验程序 ★★★ *
;* (电子驿站单片机实验板、开发板配套例程,程序转载请著明出处。) *
;* E-mail:yuanxiongfei@21cn.com QQ留言:451338254 476485321 *
;* 编程:ourmpu http://www.ourmpu.com/ 更多例程请登陆网站 *
;****************************************************************
;* P1口的8个二极管会从 亮——暗 交替变化,255级亮度调光 *
;****************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV A,#0
ACALL LOOP ;由暗变亮子程序
MOV P1,#0FFH ;关灯,全暗
MOV A,#0
ACALL LOOP2 ;由亮变暗子程序
MOV P1,#0 ;开灯,全亮
AJMP MAIN
;以下一段为由暗变亮的子程序,变化程度共255级,由两段程序组成,一段点亮,时间值由A中的数决定
;另一段将A取反后作延时时间值,这样无论A是什么值,每个周期时间相等,但点亮和关闭的值就不断变化
;类似一个频率一定,占空比可调的方波,从而实现灯光由暗到亮.
LOOP: ;这一段为点亮灯的延时
MOV P1,#0 ;把灯点亮
INC A ;A的值加1
CJNE A,#0FFH,E2 ;A还没有加到FF,跳转E2
E1: AJMP OVER ;A加到了FF,结束返回
E2: MOV R7,A ;A的值存入R7
D1: MOV R6,#30 ;延时子程序
DJNZ R6,$
DJNZ R7,D1 ;R7-1不为零就转D1,这里R7即上面预置的A值,用在这里,就是每次延时时间不同,有255级
MOV P1,#0FFH ;延时时间到,送所有灯
;这一段为关掉灯的延时,两段相加,组成占空比可变的方波输出控制灯由暗到亮
CPL A ;A的值取反,
MOV R7,A
D2: MOV R6,#30 ;延时子程序
DJNZ R6,$
DJNZ R7,D2
JMP LOOP ;跳回循环
CPL A ;再取反,恢复原来的值
OVER: RET
;以下为由亮变暗子程序,原理与上面一样.
LOOP2:
MOV P1,#0FFH
INC A ;程序运行到此,A的值为0,经这一步后为1
CJNE A,#0FFH,W2
W1: AJMP OVER2
W2: MOV R7,A
D11: MOV R6,#30
DJNZ R6,$
DJNZ R7,D11
MOV P1,#0
CPL A
MOV R7,A
D22: MOV R6,#30
DJNZ R6,$
DJNZ R7,D22
CPL A
AJMP LOOP2
OVER2: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -