51 汇编编程:倒计时交通灯
2016-01-25 12:02
393 查看
一个51单片机汇编语言的程序,要求就是红灯25秒,绿灯20秒,黄灯闪烁5秒。
题目链接:http://zhidao.baidu.com/question/560272874
很简单的要求,用下图电路即可实现:
图片链接:http://xiangce.baidu.com/picture/detail/6ec1f333166783bfbaa05da8f93b5625caa7402f
全部程序如下:
;倒计时交通灯
;四位共阳数码管
;P0 接段码
;P2.0123 接位码
;P3 接红绿黄灯
NB_R EQU P3.0
NB_Y EQU P3.1
NB_G EQU P3.2
DX_R EQU P3.3
DX_Y EQU P3.4
DX_G EQU P3.5
;-------------------------------------------
ORG 0000H
JMP MAIN
ORG 000BH ;T0中断的入口地址
MOV TL0, #0B0H
MOV TH0, #3CH ;50ms中断一次
DJNZ R2, EXIT_T0
MOV R2, #20 ;定时1s
DEC R3 ;倒计时
DEC R4 ;倒计时
EXIT_T0:
RETI
;***************************************
MAIN:
MOV TMOD, #01H
MOV TH0, #3CH ;定时50ms
MOV TL0, #0B0H
MOV R2, #20 ;定时1s
SETB TR0
SETB ET0
SETB EA
MOV SP, #60H
;***************************************
N_B: ;南北
MOV P3, #0 ;关闭全部红绿灯
SETB NB_G
SETB DX_R
MOV R3, #20 ;南北通行时间
MOV R4, #25
NB_W1:
CJNE R3, #0, NB_DISP
MOV R3, #5 ;南北黄灯时间
SJMP N_B_Y
NB_DISP:
CALL DISPLAY
SJMP NB_W1
;-----------------------
N_B_Y:
CLR NB_G
NB_W2:
CJNE R4, #0, NB_DISP2
JMP D_X
NB_DISP2:
MOV A, R2
MOV C, ACC.3
MOV NB_Y, C
CALL DISPLAY
SJMP NB_W2
;***************************************
D_X:
MOV P3, #0 ;关闭全部红绿灯
SETB DX_G
SETB NB_R
MOV R3, #25
MOV R4, #20 ;东西通行时间
DX_W1:
CJNE R4, #0, DX_DISP
MOV R4, #5 ;东西黄灯时间
SJMP D_X_Y
DX_DISP:
CALL DISPLAY
SJMP DX_W1
;-----------------------
D_X_Y:
CLR DX_G
DX_W2:
CJNE R3, #255, DX_DISP2
JMP N_B
DX_DISP2:
MOV A, R2
MOV C, ACC.3
MOV DX_Y, C
CALL DISPLAY
SJMP DX_W2
;***************************************
DISPLAY:
MOV DPTR, #TAB1
MOV A, R3
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #1
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, B
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #2
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, R4
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #4
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, B
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #8
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
RET
TAB1:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
;***************************************
END
;-------------------------------------------
题目链接:http://zhidao.baidu.com/question/560272874
很简单的要求,用下图电路即可实现:
图片链接:http://xiangce.baidu.com/picture/detail/6ec1f333166783bfbaa05da8f93b5625caa7402f
全部程序如下:
;倒计时交通灯
;四位共阳数码管
;P0 接段码
;P2.0123 接位码
;P3 接红绿黄灯
NB_R EQU P3.0
NB_Y EQU P3.1
NB_G EQU P3.2
DX_R EQU P3.3
DX_Y EQU P3.4
DX_G EQU P3.5
;-------------------------------------------
ORG 0000H
JMP MAIN
ORG 000BH ;T0中断的入口地址
MOV TL0, #0B0H
MOV TH0, #3CH ;50ms中断一次
DJNZ R2, EXIT_T0
MOV R2, #20 ;定时1s
DEC R3 ;倒计时
DEC R4 ;倒计时
EXIT_T0:
RETI
;***************************************
MAIN:
MOV TMOD, #01H
MOV TH0, #3CH ;定时50ms
MOV TL0, #0B0H
MOV R2, #20 ;定时1s
SETB TR0
SETB ET0
SETB EA
MOV SP, #60H
;***************************************
N_B: ;南北
MOV P3, #0 ;关闭全部红绿灯
SETB NB_G
SETB DX_R
MOV R3, #20 ;南北通行时间
MOV R4, #25
NB_W1:
CJNE R3, #0, NB_DISP
MOV R3, #5 ;南北黄灯时间
SJMP N_B_Y
NB_DISP:
CALL DISPLAY
SJMP NB_W1
;-----------------------
N_B_Y:
CLR NB_G
NB_W2:
CJNE R4, #0, NB_DISP2
JMP D_X
NB_DISP2:
MOV A, R2
MOV C, ACC.3
MOV NB_Y, C
CALL DISPLAY
SJMP NB_W2
;***************************************
D_X:
MOV P3, #0 ;关闭全部红绿灯
SETB DX_G
SETB NB_R
MOV R3, #25
MOV R4, #20 ;东西通行时间
DX_W1:
CJNE R4, #0, DX_DISP
MOV R4, #5 ;东西黄灯时间
SJMP D_X_Y
DX_DISP:
CALL DISPLAY
SJMP DX_W1
;-----------------------
D_X_Y:
CLR DX_G
DX_W2:
CJNE R3, #255, DX_DISP2
JMP N_B
DX_DISP2:
MOV A, R2
MOV C, ACC.3
MOV DX_Y, C
CALL DISPLAY
SJMP DX_W2
;***************************************
DISPLAY:
MOV DPTR, #TAB1
MOV A, R3
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #1
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, B
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #2
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, R4
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #4
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
;----------------------
MOV A, B
MOVC A, @A + DPTR
MOV P0, A
MOV P2, #8
DJNZ R7, $
DJNZ R7, $
MOV P2, #0
RET
TAB1:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
;***************************************
END
;-------------------------------------------
相关文章推荐
- 51 汇编编程:多路延时开关
- 51 汇编编程:中断的现场保护与恢复
- 51 汇编编程:一种单片机抢答器
- 51 汇编编程:停留保持的流水灯
- 80x86汇编语言编程:求两个单元中,有多少个对应的位是不同的
- 80x86汇编语言编程:求素数
- C# socket编程实践——简单聊天室
- 80x86汇编语言编程:输入0到9,输出hello world
- 80x86汇编语言编程:宏指令
- 80x86汇编语言编程:二进制输入、十进制输出
- 80x86汇编语言编程:查找字符串中的最大、最小值
- 80x86汇编语言编程:三个数字进行比较
- C编程中阻止程序退出的方法
- 80x86汇编语言编程:在屏幕上显示彩色 ASCII 码
- Matlab入门学习(矩阵、函数、绘图的基本使用)
- 80x86汇编语言编程:在屏幕上模拟升旗的过程
- 80x86汇编语言编程:排序与显示
- 80x86汇编语言编程:求 10000 以内的《完数》
- 80x86汇编语言编程:输入格雷码、输出对应的十进制数字
- 一个 51 单片机的编程题