求c51单片机点动花样流水灯怎么样编程,以汇编语言写的

点一下可进入下一个花样,花样什么样不是问题,只要是要怎么样编写,谢谢

;亮灯控制程序;
;************;

ORG 0000H
LJMP START
org 0030h
;************;
; 主 程 序 ;
;************;
START:
MOV P3, #0FFH
JNB P0.7,FUN0 ; 检测按键
JNB P0.4,FUN1
JNB P0.5,FUN2
JNB P0.6,FUN3 ;关闭按纽
AJMP START
FUN0: LCALL DL10MS ;消岸抖动
JB P0.7,START
WAITL0: JNB P0.7,WAITL0 ;等待键释放
FUN01: LCALL FUN00
AJMP START
FUN1: LCALL DL10MS ;消岸抖动
JB P0.4,START
WAITL1: JNB P3.3,WAITL1 ;等待键释放
FUN10: LCALL FUN11
AJMP START
FUN2: LCALL DL10MS ;消岸抖动
JB P0.5,START
WAITL2: JNB P0.5,WAITL2 ;等待键释放
FUN20: LCALL FUN22
AJMP START

FUN3: LCALL DL10MS ;消岸抖动
JB P0.6,START
WAITL3: JNB P0.6,WAITL3 ;等待键释放
MOV P2,#0FFH ;关显示
LJMP START

FUN00: MOV A,#0FEH ;左移子程序
FUN000: MOV P2,A
LCALL DL05S
JNB ACC.7,OUT ;检测是否结束
RL A
AJMP FUN000
OUT: RET

FUN11: MOV A,#07FH ;右移子程序
FUN111: MOV P2,A
LCALL DL05S
JNB ACC.0,OUT ;检测是否结束
RR A
AJMP FUN111

FUN22:MOV A,#0AAH ;间隔显示子程序
MOV P2,A
LCALL DL30S
CPL A
MOV P2,A
LCALL DL30S
RET

;************;
; 延时程序 ;
;************;
DL512:MOV R2,#0FFH ;延时500US
LOOP1: DJNZ R2,LOOP1
RET

DL10MS:MOV R3,#14H ;延时10MS
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET

DL05S:MOV R4,#0AH ;延时100MS
LOOP3: LCALL DL10MS
DJNZ R4,LOOP3
RET

DL30S:MOV R5,#03H ;延时300MS.
LOOP4:LCALL DL05S
DJNZ R5,LOOP4
RET

end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-09
端口的寄存器,赋予一个初值。每位对应一路灯。
然后做移位命令。左移右移都可以,不就可以流水了。追问

我是想用手动控制的,而不是自动控制的,就是点一下就变一个花样的,谢谢

追答

用一个中断脚,写一个中断处理,点一下,就变一下那个端口的初值。这样花样不就变了么。
你甚至可以写多个子程序,每点一下,就变换调用不同的子程序。

第2个回答  2011-10-10
写好花样,查表
相似回答