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

流水灯左蹦右跳汇编语言程序

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-29 16:56:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
流水灯左蹦右跳汇编语言程序

;******************************************************************************
;*  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
回复

使用道具 举报

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

本版积分规则

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