单片机汇编语言写出交通灯+数码管
时间: 2023-07-11 11:44:19 浏览: 100
单片机 汇编语言 交通灯
4星 · 用户满意度95%
下面是基于8051单片机的交通灯和数码管的汇编代码:
```
ORG 0000H
LJMP MAIN
ORG 0030H
DISPLAY:
MOV P0, A
MOV DPTR, #TABLE
MOVX A, @DPTR
MOV P2, A
RET
ORG 0100H
MAIN:
MOV 20H, #0
MOV 30H, #0
MOV 40H, #0
MOV 50H, #0
MOV 60H, #0
MOV 70H, #0
MOV 80H, #0
MOV 90H, #0
MOV A, #0FFH
MOV P1, A ; 数码管段选初始化
LOOP:
MOV A, #01H
MOV P3, A ; 交通灯红灯亮
CALL DELAY1S
MOV A, #02H
MOV P3, A ; 交通灯红黄灯亮
CALL DELAY500MS
MOV A, #04H
MOV P3, A ; 交通灯绿灯亮
CALL DELAY2S
MOV A, #02H
MOV P3, A ; 交通灯黄灯亮
CALL DELAY500MS
MOV A, 20H
INC A ; 数码管0-9循环显示
CMP A, #10H
JZ RESET
MOV 20H, A
MOV R0, #DISPLAY
ACALL DISPLAY
SJMP LOOP
RESET:
MOV 20H, #0
MOV A, #0FFH
MOV P1, A ; 数码管消隐
SJMP LOOP
DELAY1S:
MOV R7, #0
MOV R6, #0
MOV R5, #0
MOV R4, #20H
DELAY1:
MOV R3, #0FFH
DELAY2:
DJNZ R3, DELAY2
DJNZ R4, DELAY1
DJNZ R5, DELAY1
DJNZ R6, DELAY1
DJNZ R7, DELAY1
RET
DELAY500MS:
MOV R7, #0
MOV R6, #0
MOV R5, #10H
MOV R4, #20H
DELAY3:
MOV R3, #0FFH
DELAY4:
DJNZ R3, DELAY4
DJNZ R4, DELAY3
DJNZ R5, DELAY3
DJNZ R6, DELAY3
DJNZ R7, DELAY3
RET
TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
```
在这个代码中,我们使用了 P0 和 P3 端口来控制交通灯的红、黄、绿灯的亮灭,使用 P1 端口来控制数码管的段选,使用 A 寄存器来保存要显示的数码管的值。
其中,DELAY1S 和 DELAY500MS 是用来进行时间延迟的子程序;DISPLAY 是用来将数码管的值显示出来的子程序;LOOP 是主程序的循环入口,其中的 CALL 和 ACALL 用来调用子程序。
在主程序中,我们首先将数码管的值初始化为 0,然后进入主循环。在主循环中,我们依次控制交通灯的红、黄、绿、黄灯亮起,并在每次绿灯亮起后将数码管的值加 1 并显示出来。当数码管的值达到 10 时,将其重置为 0,并将数码管消隐。在控制交通灯的亮灭和控制数码管的显示中,我们都使用了延时函数来控制时间的流逝。
需要注意的是,在这个代码中,我们使用了 P2 端口来控制数码管的位选,但是在代码中没有对其进行初始化。如果 P2 端口的状态不正确,可能会导致数码管无法正常显示。
阅读全文