标题: 基于51单片机的复杂路口的交通灯程序设计和proteus仿真 [打印本页]

作者: 醉清风129    时间: 2019-1-6 17:29
标题: 基于51单片机的复杂路口的交通灯程序设计和proteus仿真
     该交通灯能够实现对复杂路口交通灯的控制,每个方向都包括直行、左转、右转方向以及人行横道红、黄、绿三色指示灯,每个方向均设有两位数数码管显示倒计时的功能。通过中断设置有四个按键,分别行使时间加、时间减、东西方向强制通行、南北方向强制通行的功能。


部分单片机源程序:
  1. /***************************************************
  2. 项目:复杂路口交通灯
  3. 功能:本程序能够实现对复杂路口交通灯的控制,每个方向
  4.       都包括直行、左转、右转方向以及人行横道红、黄、
  5.    绿三色指示灯,每个方向均设有两位数数码管显示倒
  6.    计时的功能。通过中断设置有四个按键,分别行使时
  7.    间加、时间减、东西方向强制通行、南北方向强制通
  8.    行的功能。  
  9. 姓名:醉清风
  10. 注意:各端口意义详见注释!
  11. ***************************************************/
  12. #include <reg51.h>  
  13. #define uchar unsigned char
  14. #define uint unsigned int

  15. /*****定义控制位**********************/
  16. sbit   EW_LED2=P2^3;           //EW_LED2控制位
  17. sbit   EW_LED1=P2^2;           //EW_LED1控制位
  18. sbit   SN_LED2=P2^1;           //SN_LED2控制位
  19. sbit   SN_LED1=P2^0;           //SN_LED1控制位
  20. sbit    SNstraight_Green=P1^3;  //南北直行绿灯
  21. sbit    EWstraight_Green=P1^0;  //东西直行绿灯
  22. sbit    SNstraight_Yellow=P1^4; //南北直行黄灯
  23. sbit    EWstraight_Yellow=P1^1; //东西直行黄灯
  24. sbit    SNstraight_Red=P1^5;    //南北直行红灯
  25. sbit    EWstraight_Red=P1^2;    //东西直行红灯
  26. sbit    SNright_Green=P2^7;    //南北右拐绿灯
  27. sbit    EWright_Green=P1^6;    //东西右拐绿灯
  28. sbit    SNright_Red=P3^4;      //南北右拐红灯
  29. sbit    EWright_Red=P2^4;      //东西右拐红灯
  30. sbit    SNleft_Green=P3^5;    //南北左拐绿灯
  31. sbit    EWleft_Green=P2^5;    //东西左拐绿灯
  32. sbit    SNleft_Red=P3^7;      //南北左拐红灯
  33. sbit    EWleft_Red=P2^6;      //东西左拐红灯
  34. sbit    SNturn_Yellow=P3^6;     //南北转向黄灯
  35. sbit    EWturn_Yellow=P1^7;     //东西转向黄灯

  36. sbit    Time_Button=P3^0;       //时间加减按钮判断输入端
  37. sbit    QZ_Button=P3^1;         //强制通行方向判断输入端
  38. bit     Flag_SNstraight_Yellow;  //SN直行黄灯标志位
  39. bit     Flag_EWstraight_Yellow;  //EW直行黄灯标志位
  40. bit     Flag_SNturn_Yellow;      //SN转向黄灯标志位
  41. bit     Flag_EWturn_Yellow;      //EW转向黄灯标志位
  42. bit     QZ_EW;              //EW强制通行标志
  43. bit     QZ_SN;              //SN强制通行标志
  44. bit     QZ_flag;                 //数码管强制标志
  45. char Time_EW;                //东西方向倒计时单元
  46. char Time_SN;                //南北方向倒计时单元
  47. uchar EW=30,SN=30,EWL=60,SNL=60; //倒计时时长</div><div>uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~~~~9段选码
  48. /*********************延时函数**********************/
  49. void Delay(uchar  a)
  50. {
  51.   while(a--);
  52. }
  53. /*******************显示函数,显示倒计时的值**********************/
  54. void Display(void)
  55. {
  56.   char h,l;
  57.   h=Time_EW/10;  //EW方向计时的十位数
  58.   l=Time_EW%10;  //EW方向计时的个位数
  59.    P0=table[l];  //显示EW计时时间的低位
  60.   EW_LED2=1;
  61.   Delay(2);
  62.   EW_LED2=0;
  63.    P0=table[h];  //显示EW计时时间的高位
  64.   EW_LED1=1;
  65.   Delay(2);
  66.   EW_LED1=0;</div><div>  h=Time_SN/10;  //SN方向计时的十位数
  67.   l=Time_SN%10;  //SN方向计时的个位数
  68.   P0=table[l];  //显示SN计时时间的低位
  69.   SN_LED2=1;
  70.   Delay(2);
  71.   SN_LED2=0;
  72.    P0=table[h];  //显示SN计时时间的高位
  73.   SN_LED1=1;
  74.   Delay(2);
  75.   SN_LED1=0;
  76.   
  77. }
  78. /*******************显示函数,强制通行的值**********************/
  79. void Display1(void)
  80. {
  81.    P0=table[8];
  82.    if(QZ_flag==1)
  83.   {
  84.     EW_LED2=1;   
  85.     EW_LED1=1;  
  86.     SN_LED2=1;   
  87.     SN_LED1=1;
  88.    
  89.   }
  90.   else
  91.     {
  92.     EW_LED2=0;
  93.     EW_LED1=0;
  94.     SN_LED2=0;
  95.     SN_LED1=0;
  96.   }   
  97.    
复制代码



全部资料51hei下载地址:
复杂路口交通灯设计.zip (100.61 KB, 下载次数: 141)

作者: 乱石穿空    时间: 2020-4-16 11:08
感谢您的例子。冒昧请教您,如果想加入一个,全路口车辆禁行,东西南北向行人通行,假设紧急疏散这种功能,那这样的引脚设置,可能实现?需要修改人行道的引脚吗?
作者: 乱石穿空    时间: 2020-4-16 12:05
感谢您的例子。冒昧请教您,如果想加入一个,全路口车辆禁行,东西南北向行人通行,假设紧急疏散这种功能,那这样的引脚设置,可能实现?需要修改人行道的引脚吗?




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