1、单片机AT89C51的P2口接8个发光二极管,让这8个发光二极管显示闪烁功能,即八灯亮2S,熄灭3S,如此循环。
参考程序:
ORG 0000H
start: MOV P1,#0H
CALL delay
MOV P1,#0FFH
CALL delay
CALL delay
LJMP start
delay:
MOV R7,#200
d2: MOV R6,#250
d1: DJNZ R6,d1
DJNZ R7,d2
RET
END
;200*250次*2*1us=1000ms=1s
2、单片机AT89C51的P1口接8个发光二极管,让这8个发光二极管能够双灯左移之后再双灯右移,
形成霹雳灯的效果,如此循环5次后全灭,延时0.5S。灯右移,形成霹雳灯的效果,
如此循环5次后全灭。延时0.5S。
参考程序1:
ORG 0000H
MOV A,#11111100B
start:
MOV P1,A
CALL delay
RL A
RL A
INC R0
CJNE R0,#4,start
MOV R0,#00H
s:
RR A
RR A
MOV P1,A
CALL delay
INC R0
CJNE R0,#4,s
MOV R0,#00H
LJMP start
delay: MOV R5,#100
k1: MOV R6,#250
k2: MOV R7,#250
k3: DJNZ R7,k3
DJNZ R6,k2
DJNZ R5,k1
RET
END
参考程序2:
ORG 0000H
MOV R0,#5
start:
MOV P2,#11111100B
CALL delay0_5s
MOV P2,#11110011B
CALL delay0_5s
MOV P2,#11001111B
CALL delay0_5s
MOV P2,#00111111B
CALL delay0_5s
MOV P2,#11001111B
CALL delay0_5s
MOV P2,#11110011B
CALL delay0_5s
MOV P2,#11111100B
CALL delay0_5s
DJNZ R0,start
MOV P2,#0FFH
SJMP $
delay0_5s:
MOV R7,#20
d3: MOV R6,#200
d2: MOV R5,#250
d1: NOP
NOP
DJNZ R5,d1
DJNZ R6,d2
DJNZ R7,d3
RET
END
3、单片机AT89C51的P2口接8个发光二极管,让这8个发光二极管先交互闪烁5次,
然后双灯左移之后再双灯右移,如此循环,形成流水灯的效果,延时0.5S。
ORG 0000H
MOV R0,#5
start:
MOV P1,#10101010B
CALL delay
MOV P1,#01010101B
CALL delay
DJNZ R0,start
MOV R0,#5
MOV A,#11111100B
s1: MOV P1,A
CALL delay
RL A
RL A
CJNE A,#11111100B,s1
s2: RR A
RR A
MOV P1,A
CALL delay
CJNE A,#11111100B,s2
JMP start
delay: MOV R5,#100
k1: MOV R6,#250
k2: MOV R7,#250
k3: DJNZ R7,k3
DJNZ R6,k2
DJNZ R5,k1
RET
END
4、单片机AT89C51的P1口和P2口分别接八个发光二极管,P2口八灯实现左移,延时0.5S,
要求左移第一次,P1.0对应灯点亮,P2口灯左移第二次,P1.1对应灯亮,如此延续下去,
直至左移八次后,所有灯全灭。
ORG 0000H
MOV R0,#11111110B
start: MOV A,#11111110B
MOV P2,A
s: CALL delay
RL A
MOV P2,A
CALL delay
CJNE A,#01111111B,s
MOV A,R0
MOV P1,A
RL A
MOV R0,A
JMP start
delay: MOV R5,#100
k1: MOV R6,#250
k2: MOV R7,#250
k3: DJNZ R7,k3
DJNZ R6,k2
DJNZ R5,k1
RET
END
5、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开关PB1、PB2和PB3;P1.0接一个LED。按下PB1,
则LED亮;按下PB2则LED灭;按下PB3则LED闪烁。延时为0.1S。
原理图:
参考程序:
ORG 0000H
MOV P2,#0FFH
s1: JNB P2.0,s3
JNB P2.1,s2
JNB P2.2,s4
JMP s1
s2: SETB P1.0
JMP s1
s3: CLR P1.0
JMP s1
s4: SETB P1.0
CALL delay
CLR P1.0
CALL delay
JNB P2.0,s3
JNB P2.1,s2
JMP s4
delay: MOV R5,#100
k1: MOV R6,#250
k2: MOV R7,#250
k3: DJNZ R7,k3
DJNZ R6,k2
DJNZ R5,k1
RET
END
6、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开关PB1、PB2和PB3;P1口接8个LED。
按下PB1,则8个LED闪烁;按下PB2则8个LED单灯右移;按下PB3则8个LED单灯左移。延时为0.1S。
源代码:
ORG 0
MOV P2,#0FFH
LOOP: JNB P2.0,LOOP_1
JNB P2.1,LOOP_2
JNB P2.2,LOOP_3
JMP LOOP
LOOP_1: MOV R0,#2
LOOP_1_1: MOV A,#10101010B
MOV P0,A
CALL D100MS
MOV A,#01010101B
MOV P0,A
CALL D100MS
MOV P0,#11111111B
DJNZ R0,LOOP_1_1
LOOP_1_2: JB P2.0,LOOP
JMP LOOP_1_2
LOOP_2: MOV A,#11111110B
MOV R0,#8
LOOP_2_1: MOV P0,A
RL A
CALL D100MS
DJNZ R0,LOOP_2_1
MOV P0,#11111111B
LOOP_2_2: JB P2.1,LOOP
JMP LOOP_2_2
LOOP_3: MOV A,#01111111B
MOV R0,#8
LOOP_3_1: MOV P0,A
RR A
CALL D100MS
DJNZ R0,LOOP_3_1
MOV P0,#11111111B
LOOP_3_2: JB P2.2,LOOP
JMP LOOP_3_2
D100MS: MOV R7,#250
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
END
7、单片机AT89C51的P2口分别接8个指拨开关;P0口接8个LED。指拨开关闭合之前8个LED全亮,
闭合指拨开关P2.0,则P0.0所对应的LED灭,以此类推。
[page]
源代码:
ORG 0
MOV A,#00000000B
MOV P0,A
MOV P2,#0FFH
LOOP: MOV A,P2
CPL A
MOV P0,A
JMP LOOP
END
8、单片机AT89C51的P2口分别接8个指拨开关;P0口接8个LED。
指拨开关闭合之前8个LED单灯左移3次后,全亮,闭合指拨开关P2.0,
则P0.0所对应的LED灭,以此类推。延时为0.2S。
原理图:
源代码:
ORG 0
MOV R1,#3
LOOP1: MOV R0,#8
MOV A,#11111110B
LOOP2: MOV P0,A
RL A
CALL D200MS
DJNZ R0,LOOP2
DJNZ R1,LOOP1
MOV A,#00000000B
MOV P0,A
MOV P2,#0FFH
LOOP: MOV A,P2
CPL A
MOV P0,A
JMP LOOP
D200MS:
MOV R7,#250
D1: MOV R6,#200
D2: MOV R5,#2
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
END
9、单片机AT89C51的P2.0、P2.1和P2.2口分别接一个按钮开关,
P1口低4位接译码器7447,7447输出部分接共阳极LED数码管。要求按一下P2.0口对应按钮,数码管显示数字“0”;
按一下P2.1口对应按钮,数码管显示数字“8”;按一下P2.2口对应按钮,数码管所显示的数字被关闭。
原理图:
源代码:
ORG 0000H
START: MOV P2,#0FFH
LOOP: JNB P2.0,ON
JNB P2.1,ON8
JNB P2.2,OFF
JMP LOOP
ON: MOV P1,#00H
ON_1: JB P2.0,LOOP
JMP ON_1
ON8: MOV P1,#08H
ON_8: JB P2.1,LOOP
JMP ON_8
OFF: MOV P1,#0FFH
OFF_1: JB P2.2,LOOP
JMP OFF_1
END
10、单片机AT89C51的P2口接7447驱动一个共阳极七段数码管。让该数码管循环显示数字“9~0”,延时为1S。
ORG 0000H
MOV R0,#10
start:
DJNZ R0,s
MOV P2,R0
CALL delay
MOV R0,#10
JMP start
s: MOV P2,R0
CALL delay
JMP start
delay: MOV R5,#100
k1: MOV R6,#250
k2: MOV R7,#250
k3: DJNZ R7,k3
DJNZ R6,k2
DJNZ R5,k1
RET
END
11、单片机AT89C51的P2口接7447驱动一个共阳极七段数码管。
让该数码管显示数字“2~6”,之后显示“9~0”,如此循环,延时为1S。
ORG 0
START: MOV R0,#5
MOV A,#2
LOOP_1: MOV P2,A
INC A
CALL D1000MS
DJNZ R0,LOOP_1
MOV R0,#10
MOV A,#9
LOOP_2: MOV P2,A
DEC A
CALL D1000MS
DJNZ R0,LOOP_2
JMP START
D1000MS:
MOV R7,#250
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
END
12、四个集成共阳极七段数码管的公共端以PNP三极管做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a~dP分别连接到P2.0~2.7。让4个数码管稳定显示“2012”。
ORG 0
LOOP:
MOV P1,#11111110B
MOV P2,#10100100B
CALL D4MS
MOV P1,#11111101B
MOV P2,#11000000B
CALL D4MS
MOV P1,#11111011B
MOV P2,#11111001B
CALL D4MS
MOV P1,#11110111B
MOV P2,#11111001B
CALL D4MS
JMP LOOP
D4MS:
MOV R7,#10
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
END
13、四个集成共阳极七段数码管的公共端以PNP三极管做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a~dP分别连接到P2.0~2.7。让LED先稳定显示“2012”,
约1秒之后再稳定显示“12.21”,如此循环。
ORG 0
LOOP: MOV R0,#65
LOOP_1: MOV P1,#11111110B
MOV P2,#10100100B
CALL D4MS
MOV P1,#11111101B
MOV P2,#11000000B
CALL D4MS
MOV P1,#11111011B
MOV P2,#11111001B
CALL D4MS
MOV P1,#11110111B
MOV P2,#11111001B
CALL D4MS
DJNZ R0,LOOP_1
MOV R1,#65
LOOP_2:
MOV P1,#11111110B
MOV P2,#11111001B
CALL D4MS
MOV P1,#11111101B
MOV P2,#00100100B
CALL D4MS
MOV P1,#11111011B
MOV P2,#10110000B
CALL D4MS
MOV P1,#11110111B
MOV P2,#11000000B
CALL D4MS
DJNZ R1,LOOP_2
JMP LOOP
D4MS: MOV R7,#10
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
END
14、单片机AT89C51的P0口接8个LED,用INT0产生中断。主程序正常执行时,P0口的8个LED单灯左移。
当进入中断状态时,P0口的8个LED将变成单灯右移,3个循环后,恢复中断前的状态,
即继续执行8个LED单灯左移。延时为0.5S。
ORG 0000H
JMP main
ORG 0003H
JMP int_0
main:
SETB IT0
SETB EX0
SETB EA
MOV A,#11111110B
s: RL A
MOV P2,A
CALL delay
JMP s
delay:
MOV R7,#100
d3: MOV R6,#200
d2: MOV R5,#250
d1: DJNZ R5,d1
DJNZ R6,d2
DJNZ R7,d3
RET
int_0:
MOV P2,A
MOV R0,#24
k: RR A
MOV P2,A
CALL delay
DJNZ R0,k
MOV R0,#24
RETI
END
15、功能要求:用 产生中断,主程序正常执行时,数码管循环显示“0~9”,
每0.5S增加1。当进入中断状态时,数码管循环显示“9~0”,
每0.5S减少1,一圈之后恢复中断前的状态。
ORG 0000H
JMP main
ORG 0003H
JMP int_0
main:
SETB IT0
SETB EX0
SETB EA
s: MOV P2,A
CALL delay
INC A
CJNE A,#10,s
MOV A,#0
JMP s
delay:
MOV R7,#100
d3: MOV R6,#200
d2: MOV R5,#250
d1: DJNZ R5,d1
DJNZ R6,d2
DJNZ R7,d3
RET
int_0:
MOV A,#10
k: DEC A
MOV P2,A
CALL delay
CJNE A,#0H,k
RETI
END