基于STM32单片机的交通灯系统设计

描述

一.系统概

本次设计的智能交通灯控制系统设计有硬件数据采集控制和上位机监控两部分,通过单片机作为核心控制器,控制红外传感器可以对十字路口东南西北的车流量进行监测,设计有显示的功能,可以将监测到的流量显示,设计有2个档位,当某个方向的车流量超过档位值后,通行时问增加。设计有时钟计时功能,每个方向设计有红、绿、黄三个灯。可以通过声音传感器对警车和救护车进行识别,当识别到之后,控制所有灯变红,优先警车和救护车。通过按钮进行故障模拟,当出现故障的时候,进行蜂鸣器报警。

交通灯

二.仿真概述

1. 通过OLED显示屏实时的显示时间,显示东西南北各个方向的车流量以及水平和竖直方向红、绿黄灯的时间,按下故障模拟按键后就开始进行报警。

交通灯

2.  按下救护车警车检测的按键就会在显示屏端进行显示,此时水平方向和竖直方向的交通灯都变成了红灯。

交通灯

3. 每个方向都有一个人流量的控制开关,通过一开一合来模拟检测到一个车,检测到有车相应的方向的绿灯时间就会增加,另外方向的红灯时间也会增加。

交通灯

4.  交通灯的顺序就是绿黄红,一个方向为绿和黄灯则另一个方向为红灯。

交通灯

三.程序设计

 

#include 
//
u8 Key;//按键检测
u8 Rxdat;
u8 dat[3];
u8 beepflag;
u8 mode=0;
u8 e,w,n,s;
u8 rtime=10,gtime=8,flag=0;
//
u8 time[3]={13,14,15};
 
//
 
//
 
 
int main(void)
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2:2
  OLED_Init();      
  Key_Init();  
  TIM2_Init();
  LedA_Init();  
  Beep_Init(); Beep_1;
//  Display(4);
  while(1)
  {
    OLED_ShowNum(1,5,time[0],2);OLED_ShowString(1,7,":");OLED_ShowNum(1,8,time[1],2);OLED_ShowString(1,10,":");OLED_ShowNum(1,11,time[2],2);
    
    if(Key5==0)Beep_1;else Beep_0;
    
    if(Key6==0)
    {
      OLED_ShowString(2,1,"EmergencyPassage");
      OLED_ShowString(3,1,"                ");
      OLED_ShowString(4,1,"                ");
      LedA1_1;LedA2_0;LedA3_0;  LedA4_1;LedA5_0;LedA6_0;
    }
    else
    {
      
      OLED_ShowString(2,1,"  Traffic Flow  ");
      OLED_ShowString(3,1,"E");OLED_ShowString(3,5,"W");OLED_ShowString(3,10,"N");OLED_ShowString(3,14,"S");
      if(Key1==0) s++;if(Key2==0) n++;if(Key3==0) e++;if(Key4==0) w++;
      OLED_ShowNum(3,2,e,2);OLED_ShowNum(3,6,w,2);OLED_ShowNum(3,11,n,2);OLED_ShowNum(3,15,s,2);
      
      
      OLED_ShowString(4,3,"R:");OLED_ShowNum(4,5,rtime,2);OLED_ShowString(4,7,"s");OLED_ShowString(4,10,"G:");OLED_ShowNum(4,12,gtime,2);OLED_ShowString(4,14,"s");
      
      if(flag)//南北通行
      {
        if(gtime>0 && gtime<9)
        {
          LedA1_0;LedA2_0;LedA3_1;  LedA4_1;LedA5_0;LedA6_0;
        }
        if(gtime==0)
        {
          LedA1_0;LedA2_1;LedA3_0;  LedA4_1;LedA5_0;LedA6_0;          
        }
        if(rtime==0)
        {
          LedA1_1;LedA2_0;LedA3_0;  LedA4_0;LedA5_0;LedA6_1;  
        }
      }
      else//东西通行
      {
        if(gtime>0&& gtime<9)
        {
          LedA1_1;LedA2_0;LedA3_0;  LedA4_0;LedA5_0;LedA6_1;  
        }
        if(gtime==0)
        {
          LedA1_1;LedA2_0;LedA3_0;  LedA4_0;LedA5_1;LedA6_0;  
        }
        if(rtime==0)
        {
          LedA1_0;LedA2_0;LedA3_1;  LedA4_1;LedA5_0;LedA6_0;  
        }
      }
      
 
    }  
  }
}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分