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

📄 tlights.c

📁 智能交通灯控制 实验做的
💻 C
字号:
   #include<reg52.h>
    sfr  WDT=0xC0;
 
   sbit P0_0=0x80; 
   sbit P0_1=0x81;
   sbit P0_2=0x82;
   sbit P0_3=0x83;
   sbit P0_4=0x84;
   sbit P0_5=0x85;
   sbit P0_6=0x86;
   sbit P0_7=0x87;

   sbit P2_0=0xA0;
   sbit P2_1=0xA1;
   sbit P2_2=0xA2;
   sbit P2_3=0xA3;
   sbit P2_4=0xA4;
   sbit P2_5=0xA5;
   sbit P2_6=0xA6;
   sbit P2_7=0xA7;
 
   sbit P3_0=0xB0;
   sbit P3_1=0xB1;
   sbit P3_2=0xB2;
   sbit P3_3=0xB3;
   sbit P3_4=0xB4;
   sbit P3_5=0xB5;
   sbit P3_6=0xB6;
   sbit P3_7=0xB7;

void Delay5Ms(void)     //5ms延时
{  
   TMOD=0X01;
   TH0=0xEE;   
   TL0=0x00;         
   EA=0; 
   ET0=0;
   TF0=0;
   TR0=1;
   while(TF0!=1);  
}


void Delay1s(void)   //1s延时
{ 
  unsigned char i;
  for(i=0;i<150;i++){
                     Delay5Ms();
                     }
}

unsigned char left=0,straight=0,right=0;                      
void keyscan(){                                   //键盘扫描程序                      
  P0=0xFF;                                        //第一列 左转
    P0_4=0;
    if(P0_0==0){ 
                left=3;}
    if(P0_1==0){
                left=8;}
    if(P0_2==0){
                left=15;}
    if(P0_3==0){
                left=25;}	
  P0=0xFF;                                 // 第二列 直行 
    P0_5=0;
    if(P0_0==0){
                straight=3;}
    if(P0_1==0){
                straight=8;}
    if(P0_2==0){
                straight=15;}
    if(P0_3==0){
                straight=25;}	
  P0=0xFF;                                //第三列 右转  
    P0_6=0; 
    if(P0_0==0){
                right=3;}
    if(P0_1==0){
                right=8;}
    if(P0_2==0){
                right=15;}
    if(P0_3==0){
                right=25;}	
}           


unsigned char duanshi(unsigned char cls)                               //根据车流量判断显示时间
 {  
    if(0<=cls&&cls<=5) return(13);    //为了方便原来 30
    if(6<=cls&&cls<=10) return(17);    //为了方便原来 60
    if(11<=cls&&cls<=20) return(20);  
    else  return(25);                 //为了方便原来 85
}

unsigned char maxium(unsigned char i,unsigned char j)                  //左右转时选择最大车流量的时间
{     
      if(i>=j)  return(i);
      else  return(j);
}


void showtime(unsigned int times,unsigned int PP,unsigned char fx)                     //显示倒计时,并且时刻进行键扫描  fx:0表示南北方向 1表示东西方向 3为                                                                                          //两个方向
{   
   unsigned char  xima[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
   unsigned int s, g,i,j;
   if(fx==0){for(i=times;0<=i&&i<86;i--){
                          s=i/10;            //取显示时间十位数
                          g=i%10;            //取显示时间个位数
                              for(j=0;j<100;j++){
                                                 P2=PP&0xF8;
                                                 P1=xima[s];
                                                 Delay5Ms();
                                                
                                                 P2=PP&0xF4;
                                                 P1=xima[g];
                                                 Delay5Ms();
                                                 keyscan();
                                                 }
                                       }
            }
   if(fx==1){ 
           for(i=times;0<=i&&i<86;i--){
                          s=i/10;         //取显示时间十位数
                          g=i%10;         //取显示时间个位数
                              for(j=0;j<100;j++){
                                                 P2=PP&0xF2;
                                                 P1=xima[s];
                                                 Delay5Ms();

                                                 P2=PP&0xF1;
                                                 P1=xima[g];
                                                 Delay5Ms();
                                                 keyscan();
                                                 }
                                                 
                                   }
       }
  if(fx==3){
         for(i=times;0<=i&&i<86;i--){
                          s=i/10;         //取显示时间十位数
                          g=i%10;         //取显示时间个位数
                              for(j=0;j<50;j++){
                                                 //P2=PP&0xF8;
                                                 P2=PP&0xF2;
                                                 P1=xima[s];
                                                 Delay5Ms();

                                                // P2=PP&0xF4;
                                                 P2=PP&0xF1;
                                                 P1=xima[g];
                                                 Delay5Ms();
                                                 keyscan();

                                                 P2=PP&0xF8;
                                                 P1=xima[s];
                                                 Delay5Ms();
                                                
                                                 P2=PP&0xF4;
                                                 P1=xima[g];
                                                 Delay5Ms();
                                                 keyscan();
                                                 }
                                          //keyscan();
                                                 
                                   }

      }   
}
void main()			
{ 
 unsigned char time,max;
 unsigned char i;
 WDT=0x00;
 IE=0x00;
 keyscan(); 
 do{
     P2_4=0x00;                  //南北直行  1
     P2_5=0x01;
     P2_6=0x00;
     P2_7=0x01;
     P3=0xA9; 
     time=duanshi(straight);                 
     showtime(time,0xAF,0);
     straight=0;
     keyscan(); 
   
     P1=0xFF;
     for(i=0;i<3;i++){                 //黄灯闪烁
                      P3_0=0;
                      P3_1=0;
                      Delay1s(); 
                      P3_0=1;
                      P3_1=1;
                      Delay1s();
                      }  
     keyscan();
     P3=0x66;                //东西左右转 2
     P2_4=0x01;
     P2_5=0x00;
     P2_6=0x00;
     P2_7=0x01;
     max=maxium(left,right);
     time=duanshi(max);
     showtime(time,0x9F,3);
     left=0; right=0;
     keyscan(); 
     
      P1=0xFF;
      for(i=0;i<3;i++){                 //黄灯闪烁
                      P2_4=0;
                      P2_5=0;
                      P3_2=0;
                      P3_3=0;
                      P3_6=0;
                      P3_7=0;
                      Delay1s(); 
                      P2_4=1;
                      P2_5=1;
                      P3_2=1;
                      P3_3=1;
                      P3_6=1;
                      P3_7=1;
                      Delay1s();
                      }  
 
     keyscan();
     P3=0x9A;               //东西直行 3
     P2_4=0x00;
     P2_5=0x01;
     P2_6=0x00;
     P2_7=0x01;
     time=duanshi(straight); 
     showtime(time,0xAF,1);
     straight=0; 
     keyscan();

     P1=0xFF;
     for(i=0;i<3;i++){                 //黄灯闪烁
                      P3_4=0;
                      P3_5=0;
                      Delay1s(); 
                      P3_4=1;
                      P3_5=1;
                      Delay1s();
                      }
     
     keyscan();
     P3=0xA6;             //南北左右转  4
     P2_4=0x01;
     P2_5=0x00;
     P2_6=0x01;
     P2_7=0x00;
     max=maxium(left,right);
     time=duanshi(max); 
     showtime(time,0x5F,3);
     left=0; right=0; 
     keyscan(); 
     
     P1=0xFF;
     for(i=0;i<3;i++){                 //黄灯闪烁
                      P2_4=0;
                      P2_5=0;
                      P2_6=0;
                      P2_7=0;
                      P3_2=0;
                      P3_3=0;
                      Delay1s(); 
                      P2_4=1;
                      P2_5=1;
                      P2_6=1;
                      P2_7=1;
                      P3_2=1;
                      P3_3=1;
                      Delay1s();
                      } 
     keyscan();  
 
   }while(1) ;
}

⌨️ 快捷键说明

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