⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 渐明渐暗彩灯程序.asm

📁 渐明渐暗彩灯程序,有详细解释
💻 ASM
字号:

;----------------------------------------------------------------
;
;;
;;;单片机的P1口的LED实现渐明渐暗的效果   
;;; 杜洋 2005.6.20
;;;P1口接8个LED,灌电流
;;;改变占空比来调整亮度
;;
;
;----------------------------------------------------------------
LED EQU P1;定义IO口,为了方便改动而设计

ORG 00H
JMP MAIN
ORG 30H

;----------------------------------------------------------------
MAIN:;主程序循环
CALL DL;初始化一段长时间的延时,也可不加,灯全灭。
MOV A,#0
CALL LOOP;调用渐暗的子程序,通过改变规定时间内LED的占空比来改变亮度。
MOV LED,#0FFH;达到最暗时则关全部灯,占空比为0,灯最灭。
MOV A,#0;将A值清0
CALL LOOP2;调用渐亮的子程序,使占空比慢慢变为1
MOV LED,#0;最亮时,开全部灯。
JMP MAIN

;-----------------------------------------------------------------
LOOP:;渐暗程序循环
MOV LED,#0;灯全亮
INC A;A中值加1
CJNE A,#0FFH,E2;看A中值是否到了最大值?
E1:JMP OVER;到了最大值则退出。
E2:MOV R7,A;不到时则将R7延时程序给于初值。
D1:MOV R6,#30;延时程序的上限值由R6可调,但不能调的过大不然灯会闪动。
DJNZ R6,$
DJNZ R7,D1
MOV LED,#0FFH;占空比的“占”时间到,灯全灭准备开始“空”时间的延时。

CPL A;A取反的目的是取得整个时间内(FFH)“空”的时间长度。
MOV R7,A;将“空”的时间长度送入延时程序。
D2:MOV R6,#30
DJNZ R6,$
DJNZ R7,D2
CPL A;将A的值正过来,准备下一次循环“占”的决定时间。
JMP LOOP
OVER:RET;A的值到了最大值则退出。(渐暗完成)

;-------------------------------------------------------------------
LOOP2: ;渐亮程序循环
MOV LED,#0FFH;灯全灭
INC A;A中值加1,慢慢加大“占”的时间。
CJNE A,#0FFH,W2
W1:JMP OVER2
W2:
MOV R7,A
D11:MOV R6,#30
DJNZ R6,$
DJNZ R7,D11
MOV LED,#0    ;与渐暗的程序大体相同,不多解释。

CPL A
MOV R7,A
D22:MOV R6,#30
DJNZ R6,$
DJNZ R7,D22
CPL A
JMP LOOP2
OVER2:RET

;---------------------------------------------------------------------
DL:           ;长时间开机初始化延时程序
MOV LED,#0FFH;
MOV R5,#10;
DD0:MOV R7,#250;
DD1:MOV R6,#250;
DD2:DJNZ R6,DD2
DJNZ R7,DD1
DJNZ R5,DD0
RET

;----------------------------------------------------------------------
END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -