📄 可编程交通灯控制系统.c
字号:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define lednum P2
#define ledwei P3
#define ew P1
#define sn P0
sbit setkey=P2^7;//2
sbit okkey=P1^7;
setkeyscan();
uchar code showway[]={0xde,0xbe,0xae,0xbd,0xb3,0xbb};
uchar code table1[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar code table2[2]={0x7f,0xbf};
uchar data table[]={0,0};
uchar data table3[]={0,0};
uchar fuwei;
uchar data con1s,set;
uchar time,ewsn=0,key=0,a,b,c,d,e;
uchar x11=8,x22=2,x33=2,x44=4,x55=5;
uchar way1,way2,way3,way4,num1,num2,num3,num4,numred;
uchar temp,wayt3;
uchar add1=0,add2=0,add3=0,add4=0,add5=0;
void delay(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=120;j>0;j--)
;
}
ewgledshan()
{ ew=0xfe;sn=0xbb;
delay(100);
ew=0xde;sn=0xbb;
delay(100);
}
sngledshan()
{
ew=0xbb;sn=0xfe;
delay(100);
ew=0xbb;sn=0xde;
delay(100);
}
yledshan()
{ while(1)
{
ew=0xfd;sn=0xfd;
delay(200);
if(okkey==0)
{
delay(100);
if(okkey==0)
{
break;
}
}
ew=0xff;sn=0xff;
delay(200);
}
}
display(uchar x)
{ uchar i;
table[0]=x%10;
table[1]=x/10;
for(i=0;i<2;i++)
{
lednum=~table1[table[i]];
ledwei=table2[i];
delay(5);
}
}
diskey1()
{
while(1)
{
if(add1==0)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {x11++;}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add1=1;}
break;
}
}
}
}
if(add1==1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {x11--;}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add1=0;}
break;
}
}
}
}
display(x11);
if(okkey==0)
{
delay(100);
if(okkey==0)
break;
}
}
}
diskey2()
{
while(1)
{
if(add2==0)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xe8: {x22++;b=x22+x11;display(b);}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add2=1;}
break;
}
}
}
}
if(add2==1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xe8: {x22--;b=x22+x11;display(b);}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add2=0;}
break;
}
}
}
}
display(b);
if(okkey==0)
{
delay(150);
if(okkey==0)
break;
}
}
}
diskey3()
{
while(1)
{
if(add3==0)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {x33++;}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add3=1;}
break;
}
}
}
}
if(add3==1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {x33--;}//2
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xd8: {add3=0;}
break;
}
}
}
}
display(x33);
if(okkey==0)
{
delay(150);
if(okkey==0)
break;
}
}
}
diskey4()
{
while(1)
{
if(add4==0)
{
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {x44++;}//4
break;
case 0xd8: {add4=1;}//6
break;
}
}
}
}
if(add4==1)
{
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {x44--;}//4
break;
case 0xd8: {add4=0;}
break;
}
}
}
}
display(x44);
if(okkey==0)
{
delay(150);
if(okkey==0)
break;
}
}
}
diskey5()
{
while(1)
{
if(add5==0)
{
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xe8: {x55++;}//4
break;
case 0xd8: {add5=1;}//6
break;
}
}
}
}
if(add5==1)
{
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xe8: {x55--;}//4
break;
case 0xd8: {add5=0;}
break;
}
}
}
}
display(x55);
if(okkey==0)
{
delay(150);
if(okkey==0)
break;
}
}
}
normalshow(uchar x1,uchar x2,uchar x3,uchar x4,uchar x5)
{
a=x1;b=a+x2;c=b+x3;d=c+x4;e=d+x5;
way1=b;way2=c;way3=d;way4=e;
num1=b;num2=x3;num3=x4;num4=x5;
if(set==1)
{ uchar k;
for(k=0;k<2;k++)
{
lednum=~table1[10];
ledwei=table2[k];
}
}
if(ewsn==0)
{ numred=x1+x2+x3+x4+x5;
while(time<=b)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[0];
sn=showway[5];
while(time>=(a-2)&&time<=a)
{ display(num1);
ewgledshan();
}
while(time>=a&&time<=b)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
display(num1+1);
ew=showway[1];
sn=showway[5];
}
display(num1);
}
while(time>=b&&time<=c)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[2];
sn=showway[5];
display(num2);
}
while(time>=c&&time<=d)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[3];
sn=showway[5];
display(num3);
}
while(time>=d&&time<=e)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[4];
sn=showway[5];
display(num4);
}
while(time>=e)
{time=0;ewsn=1;}
}
if(ewsn==1)
{ numred=x1+x2+x3+x4+x5;
while(time<=b)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
display(numred);
ew=showway[5];
sn=showway[0];
while(time>=(a-2)&&time<=a)
{
sngledshan();display(numred);
}
while(time>=a&&time<=b)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
display(numred);
ew=showway[5];
sn=showway[1];
}
}
while(time>=b&&time<=c)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[5];
sn=showway[2];
display(numred);
}
while(time>=c&&time<=d)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[5];
sn=showway[3];
display(numred);
}
while(time>=d&&time<=e)
{
if(setkey==0)
{
delay(150);
if(setkey==0)
{set=1;ewsn=2;
EA=0;
break;
}
}
ew=showway[5];
sn=showway[4];
display(numred);
}
while(time>=e)
{time=0;ewsn=0;}
}
}
timescan()
{
uchar timevor1,timevor2,timevor3,timevor4,timevor5;
for(timevor1=20;timevor1>0;timevor1--){display(x11);}
for(timevor2=20;timevor2>0;timevor2--){display(x22);}
for(timevor3=20;timevor3>0;timevor3--){display(x33);}
for(timevor4=20;timevor4>0;timevor4--){display(x44);}
for(timevor5=20;timevor5>0;timevor5--){display(x55);}
}
setkeyscan()
{ timescan();
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {diskey1();}//1
break;
case 0xe8: {diskey2();}//2
break;
case 0xd8: {diskey3();}//3
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(150);
if(temp!=0xf8)
{
switch(temp)
{
case 0xf0: {diskey4();}//4
break;
case 0xe8: {diskey5();}//5
break;
case 0xd8: {key=1;}//6
break;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf8;
if(temp!=0xf8)
{
delay(200);
if(temp!=0xf0)
{
switch(temp)
{
case 0xf0: {ew=0xbb;sn=0xbb;};
break;
case 0xe8: {
ew=0xbb;sn=0xbb;
wayt3++;
if(wayt3==2)
{
ew=0xbb;sn=0xde;
}
else if(wayt3==3)
{ wayt3=0;
ew=0xde;sn=0xbb;
}
};
break;
case 0xd8: {yledshan();};
break;
}
}
}
if(okkey==0)
{
delay(150);
if(okkey==0)
{ time=0;ewsn=0;
EA=1;
break;
}
}
}
}
void main()
{ EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
while(1)
{
normalshow(x11,x22,x33,x44,x55);
if(setkey==0)
{
delay(150);
if(setkey==0)
{setkeyscan();}
}
if(okkey==0)
{
delay(150);
if(okkey==0)
{EA=1;set=0;ewsn=0;}
}
}
}
void timer0(void) interrupt 1
{
ET0=0;
TR0=0;
TH0=0X3C;
TL0=0Xb0;
TR0=1;
con1s++;
if(con1s==20)
{ time++;
con1s=0;
if(time<=way4)
{ numred--;
if(time<=way1)
{num1--;}
else if(time>=way1&&time<=way2)
{num2--;}
else if(time>=way2&&time<=way3)
{num3--;}
else {num4--;}
}
}
ET0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -