⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traffic.c

📁 交通灯演示c程序
💻 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 + -