📄 红绿灯.asm
字号:
;程控数码显示倒计时红绿灯
;单片机AT89s52控制的倒计时控制电路, ;2005/3
;P2.2--红灯输出(继电器1)
;P2.3--绿灯输出(继电器2)
;P3.0--黄灯输出(继电器扩展)
;P1.7--指示灯,外接的发光二极管为状态LED,定时未开始时LED常亮,定时过程中LED闪烁
;P1.0--P1.6拨码开关输入
;P0----LED数码管(0.36英寸)数据输出
;P2.7、P2.6、P2.5、P2.4---LED数码管位控制输出
;K1为开始按钮,K2为停止按钮
;由接入P1口的8位拨码开关的4.5.6.组合控制
;000=40。001=50S。010=60S。011=70S。100=80S。101=90S。110=100S。111=110S。
;黄灯点亮的时间由8位拨码开关的7,8组合控制。
;00=2.0S。01=2.5S。10=3.0S。11=3.5S(秒)。
;停顿时间由8位拨码开关的2.3.组合控制:00=0.0S。01=0.5S。10=1.0S。11=1.5S。
首先从P1口读入拨码开关状态
;读拨码开关的状态,获得倒计时时间
SET1:;MOV A,#0;;首先对A清零
mov a,p1
rr a
rr a
anl a,#00000111b
mov b,#10
mul ab;
add a,#5;40
mov temp1,a;设置红绿灯时长拨码开关4.5.6位
;============
mov a,p1
anl a,#00000011b
mov b,#5
mul ab;
add a,#20
mov temp2,a;设置黄灯时长拨码开关7.8位
;========================
mov a,p1
rr a;逻辑右移
swap a
anl a,#00000011b
mov b,#5
mul ab
mov temp3,a;设置停顿时长由拨码开关2.3位控制
start1:
mov a,#01h
mov r6,a
mov r7,a
mov a,temp1
mov temp,a
;这时TEMP中的值就是倒计时时间
;数码管显示定时时间的子程序
timea:mov b,#100 ;
div ab
mov c_bit,a;百位
mov a,b
mov b,#10
div ab
mov b_bit,a;十位
mov a_bit,b;个位
ret
dpl1: mov dptr,#numtab ;指定查表启始地址
mov r0,#4
mov r1,#250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.4 ;开个位显示
ACALL DELY1;显示1毫秒
setb p2.4;关闭个位显示
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.7 ;开十位显示
ACALL DELY1;显示1毫秒
setb p2.7;关闭十位显示
mov a,c_bit ;取百位数
MOVC A,@A+DPTR ;查百位数的7段代码
mov p0,a ;送出百位的7段代码
clr p2.6 ;开百位显示
ACALL DELY1;显示1毫秒
setb p2.6;关闭百位显示
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -