📄 jiaotongdeng.txt
字号:
ORG 0000H
LJMP STAR1
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
TEMP EQU 22H ;计数器数值存放内存位置
STAR1: MOV TEMP,#20 ;初始化计数器,从60开始
CLR P1.0 ;南北方向红灯亮
CLR P1.5 ;东西方向绿灯亮
STLOP1: ACALL DISPLAY1 ;调用显示子程序
DEC TEMP ;对计数器减1
MOV A,TEMP ;
CJNE A,#0,STLOP1 ;判断计数器是否满0?
SETB P1.0 ;南北方向红灯灭
SETB P1.5 ;东西方向绿灯
ACALL SHAN ;调用黄灯闪烁程
STAR2: MOV TEMP,#20 ;重新开始开始60秒倒数
CLR P1.2 ;南北方向绿灯亮
CLR P1.3 ;东西方向红灯亮
STLOP2: ACALL DISPLAY2 ;调用数码管显示子程序
DEC TEMP ;计数器减一
MOV A,TEMP ;
CJNE A,#0,STLOP2 ;判断计数器是否为0?
SETB P1.2
SETB P1.3
ACALL SHAN ;调用黄灯闪烁子程?
SJMP STAR1 ;
DISPLAY1:MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,B ;个位在B
MOV A_BIT,A ;十位在A
MOV DPTR,#NUMTAB ;指定查表启始地址
MOV R0,#12 ;
DPL1: MOV R1,#250 ;
DPLOP1: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.3 ;开个位显示
ACALL D1MS ;显示162微秒
SETB P2.3 ;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.2 ;开十位显?
CLR P2.0
CLR P2.1
ACALL D1MS ;显示162微秒
SETB P2.2 ;关闭十位显示,防止鬼影
DJNZ R1,DPLOP1 ;循环执行250次
DJNZ R0,DPL1 ;循环执行250X4=1000次
RET
DISPLAY2:MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB ;
MOV A_BIT,B ;个位在B
MOV B_BIT,A ;十位在A
MOV DPTR,#NUMTAB ;指定查表启始地址
MOV R0,#12 ;
DPL2: MOV R1,#250 ;
DPLOP2: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.0 ;开个位显示
ACALL D1MS ;显示162微秒
SETB P2.0 ;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.1 ;开十位显
CLR P2.2
CLR P2.3
ACALL D1MS ;显示162微秒
SETB P2.1 ;关闭十位显示,防止鬼影
DJNZ R1,DPLOP2 ;循环执行250次
DJNZ R0,DPL2 ;循环执行250X4=1000次
RET
SHAN: MOV R3,#5 ;
ROUND: CLR P1.1 ;
CLR P1.4 ;
ACALL DELAY ;黄灯闪烁五次
SETB P1.1 ;每次间隔一秒
SETB P1.4 ;
ACALL DELAY
DJNZ R3,ROUND ;
RET ;
D1MS: MOV R7,#80 ;2+2X80=162微秒,延时按12MHZ计算
DJNZ R7,$ ;
RET ;
DELAY: MOV R6,#10 ;
YL3: MOV R4,#100 ;
XL2: MOV R5,#71 ;
DL1: NOP ;一秒延时子程序
NOP
NOP
NOP
NOP
DJNZ R5,DL1 ;
DJNZ R4,XL2 ;
DJNZ R6,YL3 ;
RET ;
;共阴数码管显示代码
NUMTAB: DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 007H ;7
DB 07FH ;8
DB 06FH ;9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -