📄 jiaotongdeng.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit NSGreen=P1^0;
sbit NYellow=P1^1;
sbit SYellow=P2^0;
sbit NSRed=P1^2;
sbit NSBlue=P1^3;
sbit WEGreen=P1^4;
sbit WYellow=P1^5;
sbit EYellow=P2^1;
sbit WERed=P1^6;
sbit WEBlue=P1^7;
uchar code table_dula[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar table_deng[]={12,8,20};
uchar miltimes = 0;//记录十毫秒
uchar seccount = 0;//记录秒
uchar Redsec;
uchar NYellowsec;
uchar SYellowsec;
uchar Yellowsec;
uchar WYellowsec;
uchar EYellowsec;
uchar Greensec;
uchar time,flash,num,key;
void display_NS(uchar);
void display_WE(uchar);
uchar keyscan();
uchar keyshow();
void display(uchar);
/*****外部中断0初始化*********/
void ini_0()
{
EA=1;
EX0=1;
IT0=1;
}
void int0() interrupt 0
{
uchar i;
for(i=0;i<3;i++)
{
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--)
{}
}
}
void ini()
{
TMOD=0X01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void chushihua()
{
Greensec=table_deng[0];
Yellowsec=table_deng[1];
Redsec=table_deng[2];
NYellowsec=WYellowsec=Yellowsec/2;
}
void main()
{
ini();
ini_0();
chushihua();
time=100;
NSGreen=0;
WERed=0;
while(1)
{
if(miltimes==100)
{
miltimes=0;
seccount++;
display_NS(Greensec-seccount);
display_WE(Redsec-seccount);
if(seccount==Greensec)
{
NSGreen=1;
NYellow=0;
SYellow=0;
NSBlue=1;
}
if((seccount>Greensec)&&(seccount<=Greensec+Yellowsec))
{
display_NS(Greensec+Yellowsec-seccount);
}
if(seccount==Greensec+Yellowsec)
{
NYellow=1;
SYellow=1;
NSRed=0;
WERed=1;
WEGreen=0;
WEBlue=0;
}
if((seccount>Greensec+Yellowsec)&&(seccount<Greensec+Yellowsec+Redsec))
{
display_NS(Greensec+Yellowsec+Redsec-seccount);
if((seccount>Greensec+Redsec)&&(seccount<Redsec+Greensec+Yellowsec))
{
WYellow=0;
EYellow=0;
WEGreen=1;
WEBlue=1;
display_WE(Redsec+Greensec+Yellowsec-seccount);
}
else
display_WE(Redsec+Greensec-seccount);
}
if(seccount==Greensec+Yellowsec+Redsec)
{
WYellow=1;
EYellow=1;
WEGreen=1;
WEBlue=1;
WERed=0;
NSGreen=0;
NSRed=1;
NSBlue=0;
seccount=0;
}
}
}
}
void t0() interrupt 1
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
miltimes++;
if(miltimes%10==0)
{
flash++;
if(flash==255){flash=0;}
if((Greensec+NYellowsec-seccount)>0&&(Greensec+NYellowsec-seccount)<4)
{
SYellow=flash%2;
}
if((Greensec+Yellowsec-seccount)>0&&(Greensec+Yellowsec-seccount)<4)
{
NYellow=flash%2;
}
if((Redsec+Greensec+NYellowsec-seccount)>0&&(Redsec+Greensec+NYellowsec-seccount)<4)
{
EYellow=flash%2;
}
if((Redsec+Greensec+Yellowsec-seccount)>0&&(Redsec+Greensec+Yellowsec-seccount)<4)
{
WYellow=flash%2;
}
if((Greensec-seccount>0)&&(Greensec-seccount<5))
{
NSGreen=flash%2;
}
if(seccount<Greensec)
{
NSBlue=flash%2;
}
if((Redsec+Greensec-seccount)>0&&(Redsec+Greensec-seccount)<5)
{
WEGreen=flash%2;
}
if((seccount>Redsec)&&(seccount<Redsec+Greensec))
{
WEBlue=flash%2;
}
}
}
void display_NS(uchar k)
{
uchar i,j;
if(k>0&&k<100)
{
i=k/10;
j=k%10;
P0=table_dula[i];
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(time);
P0=table_dula[j];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
}
}
void display_WE(uchar k)
{
uchar i,j;
if(k>0&&k<100)
{
i=k/10;
j=k%10;
P0=table_dula[i];
dula=1;
dula=0;
P0=0x7f;
wela=1;
wela=0;
delay(time);
P0=table_dula[j];
dula=1;
dula=0;
P0=0xbf;
wela=1;
wela=0;
}
}
/*uchar keyscan()//循环扫描!!
{
uchar rcode , lcode;
P3=0xf0; //先将第四位置为0
if((P3&0xf0)!=0xf0) //按键后的P0与0xf0相与
{
delay(5);
if((P3&0xf0)!=0xf0)
{
rcode = 0xfe;
while((rcode&0x10)!=0)//rcode不能变为1110 1111
{
P3 = rcode;
if((P3&0xf0)!=0xf0)
{
lcode = P3&0xf0;
rcode = rcode&0x0f;
return(rcode|lcode);
}
else
rcode = (rcode<<1)|0x01;//1111 1110变为1111 1101
}
}
}
return(0);
}
void display(uchar k)
{
P0=table_dula[k];
dula=1;
dula=0;
}
uchar keyshow()
{
key = keyscan();
switch(key)
{
case 0xee: num=0;break;
case 0xde: num=1;break;
case 0xbe: num=2;break;
case 0x7e: num=3;break;
case 0xed: num=4;break;
case 0xdd: num=5;break;
case 0xbd: num=6;break;
case 0x7d: num=7;break;
case 0xeb: num=8;break;
case 0xdb: num=9;break;
case 0xbb: num=10;break;
case 0x7b: num=11;break;
case 0xe7: num=12;break;
case 0xd7: num=13;break;
case 0xb7: num=14;break;
case 0x77: num=15;break;
default :break;
}
return num;
delay(5);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -