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

📄 jiaotongdeng.c

📁 用C语言编写的AT89C51控制实现可控交通灯功能的程序
💻 C
字号:
     #include<reg51.h>
   #define uchar unsigned char
	#define uint  unsigned int
	#define led P0
	#define light 0xcc
   #define smg P2
   uchar code key_rl[]={0,0,1,0,2,0,0,0,3,};
   uchar led_f=0;
   uchar sec=24; 
   uchar sec_num=20;
   uchar sec_bufer=24;
   uchar key_num=0;
   uchar key_bufer=0;
  void delay(uint ms)
  {while(ms--);
  }
    
   void set_timer()
	{TMOD=0x01;
	 TH0=0x3C;
	 TL0=0xB0;
	 TR0=1;
	 ET0=1;
	 EA=1;
	}
   
	void timer0() interrupt 1
   {uchar new;
     if(sec_num)
      {sec_num--;goto over;}
    else  {sec_num=20;}
	if(sec){sec--;
	        new=(sec/10)<<4 | sec%10;
			P2=new;
			goto over;}
    else {sec=sec_bufer;
	      new=(sec/10)<<4 | sec%10;
		  P2=new;
		  led=~led;
	      goto over;}
	 over:TH0=0x3C;
	      TL0=0xB0;
	}

	uchar get_key() 
   {uchar key_h,key_l,key,k,j;
	 P1=0xf0;
    if(P1==0xf0){key=0xff;goto back;}
    delay(2000);
    P1=0xf0;
    if(P1==0xf0){key=0xff;goto back;}
    P1=0xf0;key_h=~P1;
    P1=0x0f;key_l=~P1;
    key_h>>=4;
    key_h=key_rl[key_h];
    key_l=key_rl[key_l&0x0f];
    key=key_h*4+key_l;     //键值为0~15

  waiton:  P1=0xf0;
    if(P1!=0xf0)goto waiton;

    back:return (key);
	 }

    deal_key(uchar key)
    {  if(key==10);
        else if (key==11)
		  {sec=key_bufer;
		   sec_bufer=key_bufer;
		   key_num=0;
		   sec_num=20;
		   }
		else
		  { if(key_num==0)
            {key_bufer=key;key_num=1;}
			else if(key_num==1)
			key_bufer=key_bufer*10+key;
			else if(key_num==2);
			else ;
		  } 
     }

    void  main()
	 {uchar key;
	  delay(5000);
	  P0=light;
     smg=0;
	  set_timer();
 judge: do 
      key=get_key();
     while(key==0xff);
     deal_key(key);
     goto judge;
	 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -