单片机流水灯

来源:百度知道 编辑:UC知道 时间:2024/06/05 14:46:24
ORG OOOOH
LJMP MAIN
ORG 1000H
MAIN:MOV A,#OFEH
AGAIN:MOV P1,A
RL A
LCALL DELAY
SJMP AGAIN
DELAY:MOV R6,#OFFH
L1: MOV R7,#OFFH
DJNZ R7,$
DJNZ R6,L1
RET
END
问题是:如果有16个LED要轮流显示,如何实现?程序如何修改?

P1、P0分别输出,控制16个LED轮流显示。

ORG 1000H
MAIN:
MOV A, #OFEH
MOV P1, A ;P1.0, 发光
LCALL DELAY
RL A

MOV P1, A ;P1.1, 发光
LCALL DELAY
RL A

MOV P1, A ;P1.2, 发光
LCALL DELAY
RL A

……
MOV P1, A ;P1.7, 发光
LCALL DELAY

MOV P1, #0FFH ;P1 不发光
MOV A, #OFEH
MOV P0, A ;P0.0, 发光
LCALL DELAY
RL A

MOV P0, A ;P0.1, 发光
LCALL DELAY
RL A
……
MOV P0, A ;P0.7, 发光
LCALL DELAY
RL A

MOV P0, #0FFH ;P0 不发光

SJMP MAIN

编写成两个循环结构,也是可以的。

用总线操作,因为单片机的P0和P2口对应着DPTR,所可以通过这个指针来操作16个LED.这是第一个方法,第二个方法是,用其他IO口,只要组合起来为16可以了,只不过要分别控制,先控制8个IO口。再控制另外8个IO口。至于程序,只要知道流程图就好办了。

刚刚有点错误改了点
ORG OOOOH
LJMP MAIN