找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3867|回复: 2
收起左侧

基于51单片机的复杂路口的交通灯程序设计和proteus仿真

[复制链接]
ID:323191 发表于 2019-1-6 17:29 | 显示全部楼层 |阅读模式
     该交通灯能够实现对复杂路口交通灯的控制,每个方向都包括直行、左转、右转方向以及人行横道红、黄、绿三色指示灯,每个方向均设有两位数数码管显示倒计时的功能。通过中断设置有四个按键,分别行使时间加、时间减、东西方向强制通行、南北方向强制通行的功能。

电路仿真截图1

电路仿真截图1

电路仿真截图2

电路仿真截图2


部分单片机源程序:
  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.    
复制代码

0.png

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:671705 发表于 2020-4-16 11:08 | 显示全部楼层
感谢您的例子。冒昧请教您,如果想加入一个,全路口车辆禁行,东西南北向行人通行,假设紧急疏散这种功能,那这样的引脚设置,可能实现?需要修改人行道的引脚吗?
回复

使用道具 举报

ID:671705 发表于 2020-4-16 12:05 | 显示全部楼层
感谢您的例子。冒昧请教您,如果想加入一个,全路口车辆禁行,东西南北向行人通行,假设紧急疏散这种功能,那这样的引脚设置,可能实现?需要修改人行道的引脚吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表