|
|
|
|
|
| |
| 红 绿 灯 程 序 |
| 程控数码显示倒计时红绿灯(NS-1型51单片机试验板程序范例) ;单片机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 | | | 更新时间:2007-6-1 11:17:40 |  |
|
|
|
|
|
|