流水灯左蹦右跳汇编语言程序
;******************************************************************************
;* title: display
;* file: display.asm
;* date: 2014年8月30日
;* verison: 1.0
;* author: eking
;* email: success20120116@sina.cn
;******************************************************************************
;* 描述:
;* LIGHT
;******************************************************************************
ORG 0000H ;复位程序起始地址
LJMP START ;跳至START执行
ORG 0030H ;程序开始存放位置
START:
MOV R4, #3H ;设置大循环扫描3遍
STAR1:
MOV R3, #8H ;设置流水灯位数为8位
MOV P1, #11111110B ;从P1.0开始扫描
LOOP:
LCALL D01S ;调用0.1s延时子程序
MOV A, P1 ;读取P1当前数据到ACC
RL A ;左移一位
MOV P1, A ;将左移的数据再送到P1
DJNZ R3, LOOP ;8位未扫描完,继续
MOV P1, #0FFH ;8位都扫描完,熄灭所有灯
MOV R3, #08H ;设置流水灯位数为8位
MOV P1, #01111111B ;从P1.7开始扫描
LOOP1:
ACALL D01S ;调用0.1s延时子程序
MOV A, P1 ;读取P1当前数据到ACC
RR A ;右移一位
MOV P1,A ;将右移的数据再送到P1
DJNZ R3,LOOP1 ;8位未扫描完,继续
DJNZ R4,STAR1 ;3遍未到,继续重新开始亮灯左右扫描
MOV R3, #3 ;设置全亮全暗扫描模式次数为3次
QLQA:
MOV P1, #0FFH ;熄灭所有灯
LCALL D01S ;调用0.1s延时子程序
MOV P1, #00H ;点亮所有灯
LCALL D01S ;调用0.1s延时子程序
DJNZ R3,QLQA ;全亮全暗扫描3次未到,继续
;3遍到,准备改变为暗灯扫描模式
MOV R4, #3 ;设置暗灯扫描模式次数为3次
ADSM:
MOV R3, #8 ;设置流水灯位数为8位
MOV P1, #00000001B ;从P1.0开始扫描
LOOP2:
LCALL D01S ;调用0.1s延时子程序
MOV A, P1 ;读取P1当前数据到ACC
RL A ;左移一位
MOV P1, A ;将左移的数据再送到P1
DJNZ R3, LOOP2 ;8位未扫描完,继续
MOV P1, #00H ;8位都扫描完,点亮所有灯
;准备右移
MOV R3, #08H ;设置流水位数为8位
MOV P1, #10000000B ;从P1.7开始扫描
LOOP3:
ACALL D01S ;调用0.1s延时子程序
MOV A, P1 ;读取P1当前数据到ACC
RR A ;右移一位
MOV P1,A ;将右移的数据再送到P1
DJNZ R3,LOOP3 ;8位未扫描完,继续
DJNZ R4,ADSM ;3遍未到,继续重新开始暗灯左右扫描
LJMP START ;重新开始循环
D01S:
MOV R7,#50
DL1:
MOV R6,#20
DL2:
MOV R5,#248
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL1
RET
END |