📄 traffic.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
char SN=30; //南北显示数值
char EW=25; //东西显示数值
uchar led[4];
uchar sbu[4];
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num;
uchar flagsn=0;
uchar flagew=0;
sbit sngreen=P3^4;
sbit snyellow=P3^3;
sbit snred=P3^2;
sbit ewgreen=P3^7;
sbit ewyellow=P3^6;
sbit ewred=P3^5;
/*--------延时8us子程序----------*/
void delay8us(uint t)
{
while(--t);
}
/*--------初始化程序-------*/
void init(void)
{
SCON=0x50;
PCON=0x00;
TMOD=0x21;
TL1=0xFD;
TH1=0xFD;
TR1=1;
EA=1;
//ES=1;
TH0=0X3c;
TL0=0xb0;
TR0=1;
ET0=1;
}
/*--------显示程序-------*/
void display(void)
{
uchar h,i;
P2=0xff;
i=0x01;
for(h=0;h<4;h++)
{
P1=led[h];
P2=P2^i;
i=i<<1;
delay8us(125);
P2=0xff;
}
}
/*--------更新程序-------*/
void update(void)
{
led[0]=table[SN%10];
led[1]=table[SN/10];
led[2]=table[EW%10];
led[3]=table[EW/10];
}
/*--------取值程序-------*/
void getdata(void)
{
sbu[0]=SN%10;
sbu[1]=SN/10;
sbu[2]=EW%10;
sbu[3]=EW/10;
}
/*--------发送程序-------*/
void send(void)
{
char i;
for(i=3;i>=0;i--)
{
SBUF=0X30+sbu[i];
while(TI==0);
TI=0;
}
}
void main(void)
{
init();
getdata();
send();
while(1)
{
getdata();
update();
display();
if(flagsn==0)
{
snred=0;
snyellow=1;
sngreen=1;
}
else if(flagsn==1)
{
snred=1;
snyellow=1;
sngreen=0;
}
else if(flagsn==2)
{
snred=1;
snyellow=0;
sngreen=1;
}
if(flagew==0)
{
ewred=1;
ewyellow=1;
ewgreen=0;
}
else if(flagew==1)
{
ewred=1;
ewyellow=0;
ewgreen=1;
}
else if(flagew==2)
{
ewred=0;
ewyellow=1;
ewgreen=1;
}
}
}
void time_0() interrupt 1
{
TH0=0X3c;
TL0=0xb0;
num++;
if(num==20)
{
num=0;
EW--;
SN--;
if(SN<0)
{
flagsn++;
if(flagsn==3)
{
flagsn=0;
}
if(flagsn==0)
SN=30;
else if(flagsn==1)
SN=25;
else if(flagsn==2)
SN=5;
}
if(EW<0)
{
flagew++;
if(flagew==3)
{
flagew=0;
}
if(flagew==0)
EW=25;
else if(flagew==1)
EW=5;
else if(flagew==2)
EW=30;
}
getdata();
send();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -