奔驰C级使用转信号灯 *** 作如下:
短暂指示:沿箭头 2 或 4 的方向轻拨组合开关至阻力点。
相应的指示灯将闪烁三次。
永久指示:沿箭头 2 或 4 的方向拨动组合开关,使其越过阻力点。
配备主动式车道变更辅助系统的车辆:主动式车道变更辅助系统:
在驾驶员已启用指示灯时,可延长指示灯工作时间,直至变换车道结束。
在驾驶员打算立即转向但不可立即变换车道时,会自动启用转向信号指示灯。
//看看用AT89s52行不?//制作:晓军
#include <reg52.h>
#define ON 1
#define OFF 0
unsigned int t,t_Light
unsigned char flag
sbit SN_Green=P1^0
sbit SN_Yellow=P1^1
sbit SN_Red=P1^2
sbit EW_Green=P1^3
sbit EW_Yellow=P1^4
sbit EW_Red=P1^5
void init(void)
{
TMOD=0x01
EA=1
ET0=1
TR0=1
TH0=(65536-50000)/256
TL0=(65536-50000)%256
}
void main(void)
{
init()
while(1)
{
switch(flag)
{
case 1:
SN_Green=ON
SN_Yellow=OFF
SN_Red=OFF
EW_Green=OFF
EW_Yellow=OFF
EW_Red=ON
break
case 2:
SN_Green=OFF
SN_Yellow=ON
SN_Red=OFF
EW_Green=OFF
EW_Yellow=ON
EW_Red=OFF
break
case 3:
SN_Green=OFF
SN_Yellow=OFF
SN_Red=ON
EW_Green=ON
EW_Yellow=OFF
EW_Red=OFF
break
}
}
}
void timer(void) interrupt 1 using 0
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
t++
if(t==18)
{
t=0
t_Light++
if(t_Light<=30)
{
flag=1
}
else if(t_Light<=34)
{
flag=2
}
else if(t_Light<88)
{
flag=3
if(t_Light==88) t_Light=0
}
}
}
我有个这样的你可以参考一下哦#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K0=P3^0/*控制两道均为红灯*/
sbit SPK=P3^1/*报警灯亮*/
sbit K1=P3^2/*主道通行,支道禁行*/
sbit K2=P3^3/*支道通行,主道禁行*/
sbit red_a=P1^2
sbit yellow_a=P1^3
sbit green_a=P1^4
sbit red_b=P1^5
sbit yellow_b=P1^6
sbit green_b=P1^7
uchar a=0,m,k,h
uchar code dsy[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff}/*断码*/
void delay(uint x)
{
uchar i
while(x--)
for(i=0i<120i++)
}
void traffic()
{
while(1)
{
while(1)
{
int i
for(i=0i<3i++)
{
red_a=1yellow_a=0green_a=0
red_b=0yellow_b=0green_b=1
k=30h=25
while(1) /*主干道通行35s*/
{
if(K0==0) break /*判断K0是否被按下,如果按下跳出本循环*/
P2=0x08
P0=dsy[k/10]
delay(2)
P2=0x04
P0=dsy[k%10]
delay(2)
P2=0x02
P0=dsy[h/10]
delay(2)
P2=0x01
P0=dsy[h%10]
delay(2)
if(k==0) break
if(h==0)
{h=5yellow_a=1red_a=1yellow_b=1red_b=0}
}
if(K0==0) break /*再判断一次K0,跳出本循环*/
{
red_a=0yellow_a=0green_a=1
red_b=1yellow_b=0green_b=0
}
k=15h=20
while(1) /*支道通行25s*/
{
if(K0==0) break
P2=0x08
P0=dsy[k/10]
delay(2)
P2=0x04
P0=dsy[k%10]
delay(2)
P2=0x02
P0=dsy[h/10]
delay(2)
P2=0x01
P0=dsy[h%10]
delay(2)
if(h==0) break
if(k==0)
{k=5yellow_a=1red_a=0yellow_b=1red_b=1}
}
if(K0==0) break
}
if(K0==0)
{
while(1) /*全部禁止通行*/
{
red_a=1yellow_a=0green_a=0
red_b=1yellow_b=0green_b=0
P2=0X00
SPK=1
if(K0!=0) break
}
}
SPK=0
}
}
}
void INT() interrupt 0 /*主干道通行,支道禁止通行*/
{
EX0=0
m=P1
if(K1==0)
{ while(1)
{
green_a=0red_a=1yellow_a=0P2=0x00
red_b=0yellow_b=0green_b=1
if(K1!=0) break
}
}
P1=m
EX0=1
}
void IMTER1() interrupt 2 /*支道通行,主干道禁止通行*/
{
EX1=0
m=P1
if(K2==0)
{ while(1)
{
green_a=1red_a=0yellow_a=0P2=0x00
red_b=1yellow_b=0green_b=0
if(K2!=0) break
}
}
P1=m
EX1=1
}
void TIMER0() interrupt 1/*1s的定时*/
{
a=a+1
if(a==10)
{k--h--a=0}
TH0=0x3CTL0=0xB0
}
void main()
{
TMOD=0x01
TH0=0x3C
TL0=0xB0
ET0=1
TR0=1
EA=1
EX1=1
EX0=1
IT0=0
IT1=0
PX0=1
PX1=1
SPK=0
traffic()
while(1)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)