标题: 基于51单片机的十字路口交通仿真 程序和原理图 [打印本页]

作者: qqqqqqdsd    时间: 2016-5-6 17:05
标题: 基于51单片机的十字路口交通仿真 程序和原理图
里面包含程序和原理图及仿真
单片机交通灯实物图:


十字路口交通灯的仿真图原理图:


所有文件打包下载:

下载地址: 基于AT89C51的十字路口交通灯仿真.zip (1.31 MB, 下载次数: 48)

交通灯程序:

  1. /*****************************************************
  2. *   王瑾毕设-交通灯
  3. *
  4. *
  5. *
  6. *****************************************************/
  7. #include<include.h>

  8. sbit NS_GRE = P2^5;      
  9. sbit NS_YEL = P2^4;
  10. sbit NS_RED = P2^3;   
  11. sbit EW_GRE = P2^2;  
  12. sbit EW_YEL = P2^1;  
  13. sbit EW_RED = P2^0;   



  14. uint8  EW_Timer = unused8;  //东西方向红灯定时器
  15. uint8  NS_Timer = unused8;  //南北方向红灯定时器
  16. uint8  YEL_Timer = unused8; //黄灯 5s定时器

  17. int main(void)
  18. {

  19.     Timer_Init();    //定时器初始化
  20.     INT0_Init();     //外部中断初始化   
  21.     EA=1;            //打开全局中断
  22.    
  23.     NS_GRE = OFF;    //所有的灯都灭   
  24.     NS_YEL = OFF;
  25.     NS_RED = OFF;   
  26.     EW_GRE = OFF;  
  27.     EW_YEL = OFF;  
  28.     EW_RED = OFF;   
  29.     P3 = 0xFF;      //所有显示灭

  30.     //先让东西方向红灯亮 南北方向通行
  31.     EW_Timer = EWTime_Count;//东西方向开始计时

  32.     while(1)
  33.     {
  34.            
  35.            if((EW_Timer != unused8) && (EW_Timer != 0)){ //东西方向做红灯倒计时
  36.                 display1(EW_Timer/10, EW_Timer%10);      //东西方向显示时间 南北方向不显示
  37.                 EW_RED_ON();                             //东西方向保持红灯
  38.                 NS_GRE_ON();                             //南北方向保持绿灯
  39.            }
  40.            else if((EW_Timer != unused8) && (EW_Timer == 0) && (YEL_Timer == unused8)){//东西方向红灯计时到 东西方向保持红灯 南北方向变黄灯 开始黄灯5s计时
  41.                 EW_RED_ON();                             //东西方向红灯
  42.                 NS_YEL_ON();                             //南北方向黄灯
  43.                 YEL_Timer = YELTime_Count;               //5s计时
  44.            }
  45.            if((EW_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
  46.                 display1(YEL_Timer/10, YEL_Timer%10);    //东西方向显示时间 南北方向不显示
  47.            }
  48.            if((EW_Timer != unused8) && (YEL_Timer == 0)){    //东西方向红-南北方向黄灯5s计时到 东西红灯定时器关 黄灯定时器关 南北红灯 东西绿灯 南北计时器开
  49.                 EW_Timer = unused8;                      //东西红灯定时器关
  50.                 YEL_Timer = unused8;                     //黄灯定时器关
  51.                 NS_RED_ON();                             //南北变红灯
  52.                 EW_GRE_ON();                             //东西变绿灯
  53.                 NS_Timer = NSTime_Count;                 //南北红灯定时器开
  54.            }



  55.            if((NS_Timer != unused8) && (NS_Timer != 0)){ //南北红灯定时器正在计时
  56.                 display2(NS_Timer/10, NS_Timer%10);      //南北方向显示时间 东西方向不显示
  57.                 EW_GRE_ON();                             //东西保持绿灯
  58.                 NS_RED_ON();                             //南北保持红灯
  59.            }
  60.            else if((NS_Timer != unused8) && (NS_Timer == 0) && (YEL_Timer == unused8)){ //南北方向红灯计时到 南北方向保持红灯 东西方向变黄灯 开始黄灯5s计时
  61.                 NS_RED_ON();                             //南北方向保持红灯
  62.                 EW_YEL_ON();                             //东西方向变黄灯
  63.                 YEL_Timer = YELTime_Count;               //5s计时
  64.            }
  65.            if((NS_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){   
  66.                 display2(YEL_Timer/10, YEL_Timer%10);   //南北方向显示时间 东西方向不显示
  67.            }
  68.            if((NS_Timer != unused8) && (YEL_Timer == 0)){  //南北方向红-东西方向黄灯5s计时到 南北方向定时器关 黄灯定时器关 东西方向变红灯 南北方向变绿灯 东西方向红灯计时器开始计时
  69.                 NS_Timer = unused8;
  70.                 YEL_Timer = unused8;
  71.                 EW_RED_ON();                           //东西方向变红灯
  72.                 NS_GRE_ON();                           //南北方向变绿灯
  73.                 EW_Timer = EWTime_Count;               //东西方向开始计时
  74.            }


  75.            if(Flag_Key == 1){        //如果急停按键按下 则全红灯 显示灭
  76.                 P3 = 0xFF;           //所有显示灭
  77.                 EW_RED_ON();         //东西方向红灯
  78.                 NS_RED_ON();         //南北方向红灯
  79.                
  80.                 EW_Timer = unused8;  //关闭所有定时器
  81.                 NS_Timer = unused8;
  82.                 YEL_Timer = unused8;
  83.            }
  84.     }
  85. }
复制代码



作者: 浅若清风    时间: 2016-5-18 19:20
支持楼主,抢沙发,楼主棒棒哒

作者: 烛龙    时间: 2016-6-28 15:29
不错,很详细,值得参照与学习




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1