51单片机汇编流水灯程序的三种写法

(方法1)

ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV P1, #OFEH //1111 1110,最后一个亮
LCALL YAN
MOV P1, #OFDH//1111 1101,倒数第二个亮
LCALL YAN
MOV P1, #0FBH//1111 1011,倒数第三个亮
LCALL YAN
MOV P1, #OF7H//1111 0111,下面你们都懂了
LCALL YAN
MOV P1, #0EFH//1110 1111
LCALL YAN
MOV P1, #0DFH//1101 1111
LCALL YAN
MOV P1, #0BFH//1011 1111
LCALL YAN
MOV P1, #7FH//0111 1111
LCALL YAN//延时
sjmp MAIN//这里跳转
YAN:MOV R6, #0FEH //延时程序,(为了偷懒,可能延时时间不够,自己改改)
YAN1:DJNZ R6,YAN1//让上边那个执行两次,有500多微秒
ret
end

(流水灯|方法2)

ORG 000H
LJMP MAIN
ORG 000BH//定时器0中断入口
LJMP LOOP1
ORG 0100H
MAIN:
MOV TMOD,#01H//设置定时器工作模式
MOV TL0,#0EFH//设置定时器初值
MOV TH0,#0D8H
SETB EA//打开总中断
SETB ET0//打开定时器0中断
SETB TR0//启动定时器0
MOV P0,#0FFH
MOV R0,#200//延时参数
LOOP:
CJNE R0,#0,LOOP//延时
MOV A,#0EFH
NEXT:
MOV P0,A //送值
MOV R0,#50 //延时参数
EXIT:
CJNE R0,#00H,EXIT //延时一会儿
RL A //A循环左移【根据程序分许,该程序完成流水灯功能】
LJMP NEXT
LOOP1://定时器0中断函数
MOV TL0,#0EFH//定时器初值
MOV TH0,#0D8H //定时器初值
DEC R0 //
RETI //中断返回
END
(方法3流水灯,这个就不写注释了,懒,有不懂的可以加我QQ3441152376给你说)
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P0,A
JNB 00H,NEXT
RR A
SJMP LOOP1
NEXT:
RL A
LOOP1:
JB P2.0,LOOP2
JNB P2.0,$
CPL 00H
LOOP2:
MOV R7,#2
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
DJNZ R7,DELAY
RET

end

爱你哟!

打赏 支付宝打赏 微信打赏