51单片机经典流水灯程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
CLR P1.3
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
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
51汇编单片机LED花样流水灯(1)
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END
程序B:
;用移位方式实现流水灯
org 00h ;程序上电从00h开始
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
mov a,#0feh ;给A赋值成11111110
loop:
mov p1,a ;将A送到P1口,发光二极管低电平点亮
MOVC A, @A + DPTR
MOV P0, A
CALL DL5KT
SJMP M_LOOP
;--------------------------------------------
TAB:
DB 0xFF, 0xE7, 0xC3, 0x81, 0x00, 0x00, 0x00, 0x00
DB 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
delay:
mov r3,#20 ;最外层循环二十次
d1:
mov r4,#80 ;次外层循环八十次
d2:
mov r5,#250 ;最内层循环250次
djnz r5,$ ;总共延时2us*250*80*20=0.8S
start:CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.4
ACALL DELAY
CLR P1.4
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
ACALL DELAY
CLR P1.5
ACALL DELAY
SETB P1.5
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P1.1
ACALL DELAY
SETB P1.2
ACALL DELAY
SETB P1.3
ACALL DELAY
SETB P1.4
ACALL DELAY
SETB P1.5
ACALL DELAY
SETB P1.6
ACALL DELAY
当拨动开关K1发出高电平(K1=1)时,中间的L4、L5点亮,然后点亮的灯向两边扩展,直到L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
悬赏分:20 - 解决时间:2009-12-21 13:42
提问者: ---------
最佳答案:
;--------------------------------------------
CALL DELAY ;调用延时子程序
LJMP LOOP ;跳到LOOP处执行
;0.1秒延时子程序(12MHz晶振)===================
DELAY: MOV R7,#200 ;R7寄存器加载200次数
D1: MOV R6,#250 ;R6寄存器加载250次数
DJNZ R6,$ ;本行执行R6次
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
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
ACALL DELAY
CLR P1.5
ACALL DELAY
SETB P1.5
ACALL DELAY
CLR P1.6
ACALL DELAY
SETB P1.6
ACALL DELAY
CLR P1.7
ACALL DELAY
CLR P1.7
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
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
mov a,#0feh ;给A赋值成11111110
loop:
mov p1,a ;将A送到P1口,发光二极管低电平点亮
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
DJNZ R7,D1 ;D1循环执行R7次
RET ;返回主程序
END ;结束程序
开关控制的单片机流水灯 汇编
在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。
具体要求:
当拨动开关K1发出低电平(K1=0)时,L1-L8从两头向中间逐个点亮,当L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
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秒
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环
;延时子程序,12M晶振延时约250毫秒
DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms
PUSH PSW ;现场保护指令(有时可以不加)
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
delay:
mov r3,#20 ;最外层循环二十次
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
程序B:
;用移位方式实现流水灯
org 00h ;程序上电从00h开始
;--------------------------------------------
DL5KT:
mov R5, #10
MOV R6, #100
MOV R7, #250
DJNZ R7, $
DJNZ R6, $ - 4
DJNZ R5, $ - 8
RET
;--------------------------------------------
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY;延时1秒
MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B
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的内容左移
SETB P1.7
ACALL DELAY
AJMP start
DELAY:MOV R7,#250
D1:MOV R6,#250
D2:DJNZ R6,D2
DJNZ R7,D1
RET
END
开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:
;用最直接的方式实现流水灯
ORG 0000H
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
END
流水灯汇编程序
8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY ;延时1秒
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
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.0
ACAHale Waihona Puke BaiduL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
单片机流水灯汇编程序设计
开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:
;用最直接的方式实现流水灯
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
下列程序,经过了编译、仿真,可以满足要求。
;--------------------------------------------
ORG 0000H
MOV R2, #0
M_LOOP:
MOV A, R2
INC R2
ANL A, #07H
MOV C, P1.0
MOV ACC.3, C
MOV DPTR, #TAB
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
CLR P1.1
ACALL DELAY
CLR P1.0
ACALL DELAY
CLR P1.0
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
CLR P1.3
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
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
51汇编单片机LED花样流水灯(1)
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END
程序B:
;用移位方式实现流水灯
org 00h ;程序上电从00h开始
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
mov a,#0feh ;给A赋值成11111110
loop:
mov p1,a ;将A送到P1口,发光二极管低电平点亮
MOVC A, @A + DPTR
MOV P0, A
CALL DL5KT
SJMP M_LOOP
;--------------------------------------------
TAB:
DB 0xFF, 0xE7, 0xC3, 0x81, 0x00, 0x00, 0x00, 0x00
DB 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
delay:
mov r3,#20 ;最外层循环二十次
d1:
mov r4,#80 ;次外层循环八十次
d2:
mov r5,#250 ;最内层循环250次
djnz r5,$ ;总共延时2us*250*80*20=0.8S
start:CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.4
ACALL DELAY
CLR P1.4
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
ACALL DELAY
CLR P1.5
ACALL DELAY
SETB P1.5
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P1.1
ACALL DELAY
SETB P1.2
ACALL DELAY
SETB P1.3
ACALL DELAY
SETB P1.4
ACALL DELAY
SETB P1.5
ACALL DELAY
SETB P1.6
ACALL DELAY
当拨动开关K1发出高电平(K1=1)时,中间的L4、L5点亮,然后点亮的灯向两边扩展,直到L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
悬赏分:20 - 解决时间:2009-12-21 13:42
提问者: ---------
最佳答案:
;--------------------------------------------
CALL DELAY ;调用延时子程序
LJMP LOOP ;跳到LOOP处执行
;0.1秒延时子程序(12MHz晶振)===================
DELAY: MOV R7,#200 ;R7寄存器加载200次数
D1: MOV R6,#250 ;R6寄存器加载250次数
DJNZ R6,$ ;本行执行R6次
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
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
ACALL DELAY
CLR P1.5
ACALL DELAY
SETB P1.5
ACALL DELAY
CLR P1.6
ACALL DELAY
SETB P1.6
ACALL DELAY
CLR P1.7
ACALL DELAY
CLR P1.7
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
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
mov a,#0feh ;给A赋值成11111110
loop:
mov p1,a ;将A送到P1口,发光二极管低电平点亮
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
DJNZ R7,D1 ;D1循环执行R7次
RET ;返回主程序
END ;结束程序
开关控制的单片机流水灯 汇编
在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。
具体要求:
当拨动开关K1发出低电平(K1=0)时,L1-L8从两头向中间逐个点亮,当L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
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秒
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环
;延时子程序,12M晶振延时约250毫秒
DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms
PUSH PSW ;现场保护指令(有时可以不加)
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
delay:
mov r3,#20 ;最外层循环二十次
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
程序B:
;用移位方式实现流水灯
org 00h ;程序上电从00h开始
;--------------------------------------------
DL5KT:
mov R5, #10
MOV R6, #100
MOV R7, #250
DJNZ R7, $
DJNZ R6, $ - 4
DJNZ R5, $ - 8
RET
;--------------------------------------------
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY;延时1秒
MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B
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的内容左移
SETB P1.7
ACALL DELAY
AJMP start
DELAY:MOV R7,#250
D1:MOV R6,#250
D2:DJNZ R6,D2
DJNZ R7,D1
RET
END
开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:
;用最直接的方式实现流水灯
ORG 0000H
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
ACALL DELAY
CLR P1.3
ACALL DELAY
SETB P1.3
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
END
流水灯汇编程序
8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY ;延时1秒
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
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.0
ACAHale Waihona Puke BaiduL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
单片机流水灯汇编程序设计
开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:
;用最直接的方式实现流水灯
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
下列程序,经过了编译、仿真,可以满足要求。
;--------------------------------------------
ORG 0000H
MOV R2, #0
M_LOOP:
MOV A, R2
INC R2
ANL A, #07H
MOV C, P1.0
MOV ACC.3, C
MOV DPTR, #TAB
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
CLR P1.1
ACALL DELAY
CLR P1.0
ACALL DELAY
CLR P1.0