标题: C51十字路口交通信号灯单片机资料 源码+仿真+实物 [打印本页]

作者: XUEXIDIANZI    时间: 2017-10-13 10:59
标题: C51十字路口交通信号灯单片机资料 源码+仿真+实物
分享一个已经制作成功的C51单片机实现的十字路口交通信号灯的资料下载,包含源码+proteus仿真
实物图:


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:


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

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



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

  15. int main(void)
  16. {

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

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

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



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


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

  83. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
基于AT89C51的十字路口交通灯仿真.zip (1.31 MB, 下载次数: 279)



作者: 1057857915    时间: 2018-5-25 19:19
能不能代码写全啊
作者: happypr    时间: 2018-7-10 14:23
1057857915 发表于 2018-5-25 19:19
能不能代码写全啊

你需要花费5个黑币下载才能看全
作者: john。    时间: 2018-10-18 21:16
压缩包里的源程序代码打不开啊
作者: 空大丿魔王    时间: 2018-12-2 15:37
源代码打全就好了
作者: desparetion    时间: 2018-12-2 18:31
学习学习
作者: duanyalin    时间: 2018-12-3 08:10
新手报道,学习学习
作者: dayisjujia    时间: 2018-12-3 11:35
这个打开之后数码管显示不对啊怎么回事啊,楼主大大在吗,有人知道怎么回事吗
作者: qwe123456asd    时间: 2018-12-3 14:34
这个打开之后数码管显示不对啊怎么回事啊,楼主大大在吗,有人知道怎么回事吗
作者: 黄潘    时间: 2019-5-20 21:57
这个打开之后数码管显示不对啊怎么回事啊,楼主大大在吗,有人知道怎么回事吗
作者: 墨坊丶    时间: 2019-6-18 08:42
看的不明觉厉(⊙o⊙)!
作者: 1843404510    时间: 2019-6-18 09:57
数码管不动

作者: 2471730675    时间: 2019-6-27 08:44
可以,确实不错
作者: 2471730675    时间: 2019-6-27 08:57
可以。确实不错。
作者: 说出去    时间: 2019-11-14 18:32
需要学习单片机
作者: lslsls    时间: 2019-11-15 10:57
大佬厉害,我编程有点不行,还得多学习学习
作者: 15555777    时间: 2019-12-1 12:12
代码代码
作者: qqqdddccc    时间: 2019-12-9 16:44
proteus线有没有连好
作者: qqqdddccc    时间: 2019-12-9 17:04
线有没有连好
作者: 酷酷小森    时间: 2019-12-12 15:19
急用急用急用,感谢
作者: 非尘    时间: 2020-6-22 20:00
卑微萌新,在线学习
作者: 15975875172    时间: 2020-7-11 10:31
请问楼主怎么把黄灯五秒换成三秒?急




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