文档库 最新最全的文档下载
当前位置:文档库 › 流水灯程序

流水灯程序

ORG 0000H ;程序起始地址
LJMP MAIN ;初始跳转到主程序
ORG 0030H ;主程序开始地址
MAIN: MOV SP,#2FH ;堆栈初始地址设定为0x2F
MOV A,#0FEH ;对A 赋值
LOOP:MOV P2,A ;P2口输出寄存器A中数据
LCALL DELAY ;延时
LCALL DELAY
LCALL DELAY
RR A ;循环右移一位
RR A ;循环右移一位
LJMP LOOP ;跳转到loop, 实现跑马灯操作
DELAY:MOV R7,#250 ;延时程序
LP1: MOV R6,#200
LP0:NOP
NOP
DJNZ R6,LP0
DJNZ R7,LP1
RET
END






ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B LCALL DELAY
MOV P1,#11110111B LCALL DELAY
MOV P1,#11111011B LCALL DELAY
MOV P1,#11111101B LCALL DELAY
MOV P1,#11111110B LCALL DELAY
MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms
PUSH PSW ;现场保护指令(有时可以不加)
MOV R4,#2
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)
DJNZ R2 ,L1 ; 中层循环:256次
DJNZ R4 ,L3 ;外层循环:2次
POP PSW
RET
END





ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY;延时1秒
MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY:
MOV R4,#2 L3:
MOV R2 ,#250
L1: MOV R3 ,#250
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END





用移位方式实现流水灯
org 00h ;程序上电从00h开始
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main: mov a,#0feh ;给A赋值成11111110
loop: mov p1,a ;将A送到P1口,发光二极管低电平点亮
lcall delay ;调用延时子程序 rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
delay:
mov r3,#20 ;最外层循环二十次
d1:
mov r4,#80 ;次外层循环八十次
d2:
mov r5,#250 ;最内层循环250次
djnz r

5,$ ;总共延时2us*250*80*20=0.8S
djnz r4,d2
djnz r3,d1
ret
end






51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
ORG 0 ;程序从0地址开始
START: MOV A,#0FEH ;让ACC的内容为11111110
LOOP: MOV P2,A ;让P2口输出ACC的内容 RR A ;让ACC的内容左移
CALL DELAY ;调用延时子程序
LJMP LOOP ;跳到LOOP处执行 ;0.1秒延时子程序(12MHz晶振)===================
DELAY: MOV R7,#200 ;R7寄存器加载200次数
D1: MOV R6,#250 ;R6寄存器加载250次数 DJNZ R6,$ ;本行执行R6次
DJNZ R7,D1 ;D1循环执行R7次
RET ;返回主程序
END ;结束程序



相关文档
相关文档 最新文档