查看: 1322|回复: 0
打印 上一主题 下一主题

LED渐亮渐灭PWM调节

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-1 16:40:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG 00H
JMP MAIN
ORG 30H

MAIN:
MOV A,#0
CALL LOOP ;由暗变亮子程序
MOV P1,#0FFH ;关灯,全暗
MOV A,#0
CALL LOOP2 ;由亮变暗子程序
MOV P1,#0 ;开灯,全亮
JMP MAIN


LOOP:
;这一段为点亮灯的延时
MOV P1,#0 ;把灯点亮
INC A  ;A的值加1
CJNE A,#0FFH,E2 ;A还没有加到FF,跳转E2
E1:JMP 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
CPL A  ;再取反,恢复原来的值
JMP LOOP ;跳回循环
OVER:RET


;以下为由亮变暗子程序,原理与上面一样.
LOOP2:
MOV P1,#0FFH
INC A  ;程序运行到此,A的值为0,经这一步后为1
CJNE A,#0FFH,W2
W1:JMP 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
JMP LOOP2
OVER2:RET

END


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表