4.5 算法描述
1、设计一个延时子程序,延时1s。延时程序的代码段如下:
DELAY2: MOV R3,#100 D4: MOV R4,#20 D5: MOV 20H,#248 D6: DJNZ 20H,D6 DJNZ R4,D5 DJNZ R3,D4 RET
2、十位显示数码管置数子程序代码如下:
S2: MOV A,#00H MOV A,R1
MOVC A,@A+DPTR MOV P0,A LCALL DELAY1 INC R1
MOV 25H,R1 CJNE R1,#07H,S0 MOV 25H,R1 MOV R1,#00H LJMP S0
3、个位显示数码管置数子程序代码如下:
S3: MOV A,#00H
MOV A,R2
MOVC A,@A+DPTR MOV P2,A LCALL DELAY1 INC R2
MOV 26H,R2 CJNE R2,#0AH,S0 MOV 26H,R2 MOV R2,#00H LJMP S0
4、主函数,实现系统初始化和彩灯闪烁。代码段如下:
START: MOV R0,#06H
MOV DPTR,#TABLE MOV P0,#3FH MOV P2,#3FH
6
MOV P3,#00H MOV R1,#01H MOV R2,#01H CLR P1.0
S0: JB P3.5,S1
JB P3.1,S2 JB P3.3,S3 LJMP S0
5 程序清单与仿真结果
5.1 程序清单
ORG 0000H LJMP START ORG 0030H
START: MOV R0,#06H MOV DPTR,#TABLE MOV P0,#3FH MOV P2,#3FH MOV P3,#00H MOV R1,#01H MOV R2,#01H CLR P1.0 S0: JB P3.5,S1 JB P3.1,S2 JB P3.3,S3 LJMP S0
S1: MOV R0,25H CJNE R0,#00,S10 LJMP S12 S10: DEC 25H S12: MOV A,25H MOV B,#10 MUL AB ADD A,26H MOV R0,A S11: DEC R0 MOV A,R0 MOV B,#10
7
;主函数 启动倒数计时子程序 ; DIV AB
MOVC A,@A+DPTR MOV P0,A MOV A,B
MOVC A,@A+DPTR MOV P2,A
LCALL DELAY2 CJNE R0,#00H,S11 S2: S3: TABLE: DELAY1: D1: D2: D3:
LJMP S4 DEC R0
MOV A,#00H ;左数码管置数子程序 MOV A,R1
MOVC A,@A+DPTR MOV P0,A LCALL DELAY1 INC R1
MOV 25H,R1 CJNE R1,#07H,S0 MOV 25H,R1 MOV R1,#00H LJMP S0
MOV A,#00H ;右数码管置数子程序 MOV A,R2
MOVC A,@A+DPTR MOV P2,A LCALL DELAY1 INC R2
MOV 26H,R2 CJNE R2,#0AH,S0 MOV 26H,R2 MOV R2,#00H LJMP S0
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH MOV R5,#5 ;延时子程序1 MOV R6,#250 MOV R7,#0FEH DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1
8
RET
DELAY2: MOV R3,#100 ;1s延时子程序 D4: MOV R4,#20 D5: MOV 20H,#248 D6: DJNZ 20H,D6 DJNZ R4,D5 DJNZ R3,D4 RET
DELAY3: D7: D8: S4:
MOV 21H,#25O MOV 22H,#250 DJNZ 22H,D8 DJNZ 21H,D7 RET
SETB P1.0 LCALL DELAY3 CLR P1.0
LCALL DELAY3 LJMP S4 END 9
延时子程序2 ;红灯闪烁程序 ; 5.2 仿真结果
系统初始化时,两数码管显示0,LED不闪烁仿真如下:
按下P3.1接口开关按钮实现十位显示加数操作,仿真如下:
10