单片机闪烁灯流水灯汇编代码大全.docx
《单片机闪烁灯流水灯汇编代码大全.docx》由会员分享,可在线阅读,更多相关《单片机闪烁灯流水灯汇编代码大全.docx(16页珍藏版)》请在冰豆网上搜索。
单片机闪烁灯流水灯汇编代码大全
单片机闪烁灯流水灯汇编代码大全
1、单片机AT89C51的P2口接8个发光二极管,让这8个发光二极管显示闪烁功能,即八灯亮2S,熄灭3S,如
此循环。
参考程序:
ORG0000H
start:
MOVP1,#0H
CALLdelay
MOVP1,#0FFH
CALLdelay
CALLdelay
LJMPstart
delay:
MOVR7,#200
d2:
MOVR6,#250
d1:
DJNZR6,d1
DJNZR7,d2
RET
END
;200*250次*2*1us=1000ms=1s
2、单片机AT89C51的P1口接8个发光二极管,让这8
个发光二极管能够双灯左移之后再双灯右移,
形成霹雳灯的效果,如此循环5次后全灭,延时0.5S
灯右移,形成霹雳灯的效果,
如此循环5次后全灭。
延时0.5S。
参考程序1:
ORG0000H
MOVA,#11111100B
start:
MOVP1,A
CALLdelay
RLA
RLA
INCR0
CJNER0,#4,start
MOVR0,#00H
s:
RRA
RRA
MOVP1,A
CALLdelay
INCR0
CJNER0,#4,s
MOVR0,#00H
LJMPstart
delay:
MOVR5,#100
k1:
MOVR6,#250
k2:
MOVR7,#250
k3:
DJNZR7,k3
DJNZR6,k2
DJNZR5,k1
RET
END
参考程序2:
ORG0000H
MOVR0,#5
start:
MOVP2,#11111100B
CALLdelay0_5s
MOVP2,#11110011B
CALLdelay0_5s
MOVP2,#11001111B
CALLdelay0_5s
CALLdelay0_5s
MOVP2,#11001111B
CALLdelay0_5s
MOVP2,#11110011B
CALLdelay0_5s
MOVP2,#11111100B
CALLdelay0_5s
DJNZR0,start
MOVP2,#0FFH
SJMP$
delay0_5s:
MOVR7,#20
d3:
MOVR6,#200
d2:
MOVR5,#250
d1:
NOP
NOP
DJNZR5,d1
DJNZR6,d2
DJNZR7,d3
RET
END
3、单片机AT89C51的P2口接8个发光二极管,让这8
个发光二极管先交互闪烁5次,
然后双灯左移之后再双灯右移,如此循环,形成流水灯
的效果,延时0.5S。
ORG0000H
MOVR0,#5
start:
MOVP1,#10101010B
CALLdelay
MOVP1,#01010101B
CALLdelay
DJNZR0,start
MOVR0,#5
MOVA,#11111100B
51:
MOVP1,A
CALLdelay
RLA
RLA
CJNEA,#11111100B,s1
52:
RRA
RRA
CALLdelay
CJNEA,#11111100B,s2
JMPstart
delay:
MOVR5,#100
k1:
MOVR6,#250
k2:
MOVR7,#250
k3:
DJNZR7,k3
DJNZR6,k2
DJNZR5,k1
RET
END
4、单片机AT89C51的P1口和P2口分别接八个发光二极
管,P2口八灯实现左移,延时0.5S,
要求左移第一次,P1.0对应灯点亮,P2口灯左移第二次,
P1.1对应灯亮,如此延续下去,
直至左移八次后,所有灯全灭。
ORG0000H
MOVR0,#11111110B
start:
MOVA,#11111110B
MOVP2,A
s:
CALLdelay
RLA
MOVP2,A
CALLdelay
CJNEA,#01111111B,s
MOVA,R0
MOVP1,A
RLA
MOVR0,A
JMPstart
delay:
MOVR5,#100
k1:
MOVR6,#250
k2:
MOVR7,#250
k3:
DJNZR7,k3
DJNZR6,k2
DJNZR5,k1
RET
END
5、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开
关PB1、PB2和PB3;P1.0接一个LED按下PB1,
贝ULED亮;按下PB2则LED灭;按下PB3则LED闪烁。
延
时为0.1S。
原理图:
参考程序:
ORG0000H
MOVP2,#0FFH
51:
JNBP2.0,s3
JNBP2.1,s2
JNBP2.2,s4
JMPs1
52:
SETBP1.0
JMPs1
53:
CLRP1.0
JMPs1
54:
SETBP1.0
CALLdelay
CLRP1.0
CALLdelay
JNBP2.0,s3
JNBP2.1,s2
JMPs4
k1:
MOVR6,#250k2:
MOVR7,#250
k3:
DJNZR7,k3
DJNZR6,k2
DJNZR5,k1
RET
END
6、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开
关PB1、PB2和PB3;P1口接8个LED
按下PB1,贝U8个LED闪烁;按下PB2则8个LED单灯右移;按下PB3则8个LED单灯左移。
延时为0.1S。
源代码:
ORG0
MOVP2,#0FFH
LOOP:
JNBP2.0,LOOP_1
JNBP2.1,LOOP_2
JNBP2.2,LOOP_3
JMPLOOP
LOOP_1_1:
MOVA,#10101010B
MOVP0,A
CALLD100MS
MOVA,#01010101B
MOVP0,A
CALLD100MS
MOVP0,#11111111B
DJNZR0,LOOP_1_1
LOOP_1_2:
JBP2.0,LOOP
JMPLOOP_1_2
LOOP_2:
MOVA,#11111110B
MOVR0,#8
LOOP_2_1:
MOVP0,A
RLA
CALLD100MS
DJNZR0,LOOP_2_1
MOVP0,#11111111B
LOOP_2_2:
JBP2.1,LOOP
MOVR0,#8
LOOP_3_1:
MOVP0,A
RRA
CALLD100MS
DJNZR0,LOOP_3_1
MOVP0,#11111111B
LOOP_3_2:
JBP2.2,LOOP
JMPLOOP_3_2
D100MS:
MOVR7,#250
D1:
MOVR6,#200
DJNZR6,$
DJNZR7,D1
RET
END
7、单片机AT89C51的P2口分别接8个指拨开关;P0口
接8个LEQ指拨开关I合之前8个LED全亮,
闭合指拨开关P2.0,则P0.0所对应的LED灭,以此类推。
源代码:
ORG0
MOVA,#00000000B
MOVP0,A
MOVP2,#0FFH
LOOP:
MOVA,P2
CPLA
MOVP0,A
JMPLOOP
END
8、单片机AT89C51的P2口分别接8个指拨开关;P0口接8个LED。
指拨开关闭合之前8个LED单灯左移3次后,全亮,闭合
指拨开关P2.0,
则P0.0所对应的LED灭,以此类推。
延时为0.2S。
原理图:
源代码:
ORG0
MOVR1,#3
LOOP1:
MOVR0,#8
MOVA,#11111110B
LOOP2:
MOVP0,A
RLA
CALLD200MS
DJNZR0,LOOP2
DJNZR1,LOOP1
MOVA,#00000000B
MOVP0,A
MOVP2,#0FFH
LOOP:
MOVA,P2
CPLA
MOVP0,A
JMPLOOP
D200MS:
MOVR7,#250
D1:
MOVR6,#200
D2:
MOVR5,#2
DJNZR5,$
DJNZR6,D2
DJNZR7,D1
RET
END9、单片机AT89C51的P2.0、P2.1和P2.2口分别接一个
按钮开关,
P1口低4位接译码器7447,7447输出部分接共阳极LED
数码管。
要求按一下P2.0口对应按钮,数码管显示数字
“0”;
按一下P2.1口对应按钮,数码管显示数字“8”;按一
下P2.2口对应按钮,数码管所显示的数字被关闭。
原理图:
源代码:
ORG0000H
START:
MOVP2,#0FFH
LOOP:
JNBP2.0,ON
JNBP2.1,ON8
JNBP2.2,OFF
JMPLOOP
ON:
MOVP1,#00H
ON_1:
JBP2.0,LOOP
JMPON_1
ON8:
MOVP1,#08H
ON_8:
JBP2.1,LOOP
OFF:
MOVP1,#0FFH
OFF_1:
JBP2.2,LOOP
JMPOFF_1
END
10、单片机AT89C51的P2口接7447驱动一个共阳极七段
数码管。
让该数码管循环显示数字“9〜0”,延时为1S。
ORG0000H
MOVR0,#10
start:
DJNZR0,s
MOVP2,R0
CALLdelay
MOVR0,#10
JMPstart
s:
MOVP2,R0
CALLdelay
JMPstart
delay:
MOVR5,#100
k1:
MOVR6,#250
k2:
MOVR7,#250
DJNZR6,k2
DJNZR5,k1
RET
END
11、单片机AT89C51的P2口接7447驱动一个共阳极七段数码管。
让该数码管显示数字“2〜6”,之后显示“9〜0”,如
此循环,延时为1S。
ORG0
START:
MOVR0,#5
MOVA,#2
LOOP_1:
MOVP2,A
INCA
CALLD1000MS
DJNZR0,LOOP_1
MOVR0,#10
MOVA,#9
LOOP_2:
MOVP2,A
DECA
CALLD1000MS
JMPSTART
D1000MS:
MOVR7,#250
D1:
MOVR6,#200
D2:
MOVR5,#250
DJNZR5,$
DJNZR6,D2
DJNZR7,D1
RET
END
12、四个集成共阳极七段数码管的公共端以PNP三极管
做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a〜dP分别连接到P2.0〜2.7。
让4个
数码管稳定显示“2012”。
ORG0
LOOP:
MOVP1,#11111110B
MOVP2,#10100100B
CALLD4MS
MOVP1,#11111101B
MOVP1,#11111011B
MOVP2,#11111001B
CALLD4MS
MOVP1,#11110111B
MOVP2,#11111001B
CALLD4MS
JMPLOOP
D4MS:
MOVR7,#10
D1:
MOVR6,#200
DJNZR6,$
DJNZR7,D1
RET
END
13、四个集成共阳极七段数码管的公共端以PNP三极管
做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a~dP分别连接到P2.0~2.7。
让LED
先稳定显示“2012”,
约1秒之后再稳定显示“12.21”,如此循环。
ORG0
LOOP:
MOVR0,#65
LOOP_1:
MOVP1,#11111110B
MOVP2,#10100100B
CALLD4MS
MOVP1,#11111101B
MOVP2,#11000000B
CALLD4MS
MOVP1,#11111011B
MOVP2,#11111001B
CALLD4MS
MOVP1,#11110111B
MOVP2,#11111001B
CALLD4MS
DJNZR0,LOOP_1
MOVR1,#65
LOOP_2:
MOVP1,#11111110B
MOVP2,#11111001B
CALLD4MS
MOVP1,#11111101B
MOVP1,#11111011B
MOVP2,#10110000B
CALLD4MS
MOVP1,#11110111B
MOVP2,#11000000B
CALLD4MS
DJNZR1,LOOP_2
JMPLOOP
D4MS:
MOVR7,#10
D1:
MOVR6,#200
DJNZR6,$
DJNZR7,D1
RET
END
14、单片机AT89C51的P0口接8个LED,用INT0产生中断。
主程序正常执行时,P0口的8个LED单灯左移。
当进入中断状态时,P0口的8个LED将变成单灯右移,3个循环后,恢复中断前的状态,
即继续执行8个LED单灯左移。
延时为0.5S。
ORG0000H
JMPint_0
main:
SETBIT0
SETBEX0
SETBEA
MOVA,#11111110B
s:
RLA
MOVP2,A
CALLdelay
JMPs
delay:
MOVR7,#100
d3:
MOVR6,#200
d2:
MOVR5,#250
d1:
DJNZR5,d1
DJNZR6,d2
DJNZR7,d3
RET
int_0:
MOVP2,A
k:
RRA
MOVP2,A
CALLdelay
DJNZR0,k
MOVR0,#24
RETI
END
15、功能要求:
用产生中断,主程序正常执行时,数码
管循环显示“0〜9”,
每0.5S增加1。
当进入中断状态时,数码管循环显示
“9〜0”,
每0.5S减少1,一圈之后恢复中断前的状态。
ORG0000H
JMPmain
ORG0003H
JMPint_0
main:
SETBIT0
SETBEX0
SETBEAs:
MOVP2,A
CALLdelay
INCA
CJNEA,#10,s
MOVA,#0
JMPs
delay:
MOVR7,#100
d3:
MOVR6,#200
d2:
MOVR5,#250
d1:
DJNZR5,d1
DJNZR6,d2
DJNZR7,d3
RET
int_0:
MOVA,#10
k:
DECA
MOVP2,A
CALLdelay
CJNEA,#0H,k
RETI
END