基于51单片机十字路口红绿灯交通灯

+无黄灯+紧急

仿真:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J010

目录标题

  • 基于51单片机十字路口红绿灯交通灯
    • 功能说明
    • 仿真图
      • 正常交通灯运行模式
      • 紧急运行模式
    • 程序设计
      • 程序讲解
        • 倒计时的产生
        • 红黄绿灯状态处理
        • 倒计时显示处理
        • 按键处理
    • 资料清单

功能说明

十字路口交通灯由红、绿两色LED显示器组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时(显示红色0)后,另一道开始绿色倒计时。

(1) 主千道(A道)先通行且通行时间为10s(加5秒红灯延时,共20秒);

(2) 支道(B道)通行时间为7s(加5秒红灯延时,共12秒);

(3) 主道与支道的车辆交错通;

(4) 若遇紧急情况,按开关K1时,主道与支道都为红灯20s;

(5) 根据实时交通堵塞情况人为控制时,按K2时,主道延时30s通行,按K3时,支道延时30s通行;

(6) 具体秒数可在程序改数字实现。

仿真图

正常交通灯运行模式

1.A方向绿灯通行,B方向红灯

2.A方向黄灯通行,B方向红灯

3.B方向绿灯通行,A方向红灯

4.B方向黄灯通行,A方向红灯

实时交通堵塞情况人为控制时,按K2时,主道延时30s通行,按K3时,支道延时30s通行;

紧急运行模式

遇紧急情况,按开关K1时,主道与支道都为红灯20s;

程序设计

主函数


void main()
{EA=1; //开总中断TMOD|= 0X01;TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0  while(1){    led_sacn();                     //LED和数码管显示,时刻刷新KeyDriver();if(flag1s)//正常倒计时模式一秒执行一次{flag1s=0;main_road_time--;            //红绿灯倒计时时间减secondary_road_time--;}if(all_one_sec_flag){//紧急模式倒计时all_one_sec_flag=0;if(run_mode==1){sec_20s_cnt--;if(sec_20s_cnt<=1){//倒计时时间到run_mode=0;state=0;main_road_time=0;}}}}
}

程序讲解

主要的核心点是倒计时,和LED灯亮灭控制

倒计时的产生

记住这个点就可以设计软件了。首先要有时间基础,倒计时从哪来呢?

一般两个来源:

1,延时

delay(1000ms);

通过死循环卡主软件的运行来达到延时效果,程序执行效率极低,不可取。

2,定时

通过定时器产生时基。软件设置50ms产生一次定时中断,在中断执行函数中做计数。

 EA=1;  //开总中断TMOD|= 0X01;TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0

20ms执行一次中断函数,通过one_sec_flag累加到50判断时间过去了一秒。设置一秒标志位flag1s置一。

 TH0=0XBB;TL0=0X00;KeyScan();if(++one_sec_flag<50){return;//提前结束函数}one_sec_flag=0;all_one_sec_flag=1;if(run_mode==0){//不是正常运行时,不红绿灯数值不减一 flag1s=1;    }

在主函数while循环里判断标志位,如果是1,则倒计时计数值减一,即完成了倒计时的软件设计思路

if(flag1s)//正常倒计时模式一秒执行一次
{flag1s=0;main_road_time--;    //红绿灯倒计时时间减secondary_road_time--;
}

红黄绿灯状态处理

正常红绿灯运行分有四个模式

1.A方向绿灯通行,B方向红灯

2.A方向黄灯通行,B方向红灯

3.B方向绿灯通行,A方向红灯

4.B方向黄灯通行,A方向红灯

5.执行第一步

     if(run_mode==0)            //0 正常运行{if(main_road_time==0 || secondary_road_time==0)//当A车道或者B车道倒数到0,切换状态。//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次{switch(state)//改变红绿灯的状态{case 0:{state=1;//下次切换到下一个模式main_road_time=ns_green_cnt;//A车道绿灯通行时间secondary_road_time=ns_green_cnt+yellow_cnt; we_red    = ON;we_green  = OFF;ns_red    = OFF;ns_green  = ON;}break;case 1:{state=2;main_road_time = yellow_cnt;//A车道红灯延迟时间时间we_red   = ON;we_green  = OFF;ns_red   = ON;ns_green  = OFF;   }break;case 2:{state=3;main_road_time=we_green_cnt+yellow_cnt;//B车道绿灯通行时间secondary_road_time =we_green_cnt;we_red     = OFF;we_green  = ON;ns_red   = ON;ns_green  = OFF;   }break;case 3:{state=0;secondary_road_time=yellow_cnt;//B车道红灯延迟时间时间we_red   = ON;we_green  = OFF;ns_red   = ON;ns_green  = OFF;   }break;default:break;}}seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管}

倒计时显示处理

实际上倒计时显示就是显示main_road_time–; secondary_road_time–;设计函数通过数码管分别显示A方向的main_road_time和B方向的secondary_road_time即可

     seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管

按键处理

uchar keystr[]={1,1,1,1},backup[]={1,1,1,1};
void KeyScan()                                  //键盘扫描
{static uchar keybuf[4]={0XFF,0XFF,0XFF,0XFF};uchar i;keybuf[0]=(keybuf[0]<<1)|KEY1;keybuf[1]=(keybuf[1]<<1)|KEY2;keybuf[2]=(keybuf[2]<<1)|KEY3;for(i=0;i<3;i++){if(keybuf[i]==0X00)          keystr[i]=0;else if(keybuf[i]==0XFF)     keystr[i]=1;}
}
void KeyAction(uchar key)   //键盘执行
{switch(key){case 0:    //KEY3按下if(run_mode==0&&state==3){if (secondary_road_time<70&&main_road_time<70)//小于70才能+时间,否则超过100,显示错误{secondary_road_time=secondary_road_time+30;main_road_time=main_road_time+30;}}break;case 1:   //KEY2按下if(run_mode==0&&state==1){if (secondary_road_time<70&&main_road_time<70)//小于70才能+时间,否则超过100,显示错误{secondary_road_time=secondary_road_time+30;main_road_time=main_road_time+30;}}break;case 2: KEY1按下if(run_mode!=1){run_mode=1; sec_20s_cnt=20;}break;default:break;}
}
void KeyDriver()                                 //键盘驱动
{uchar i;for(i=0;i<3;i++){if(keystr[i]!=backup[i]){if(keystr[i]==0)KeyAction(i);//这里适当修改程序可以实现组合按键的效果}backup[i]=keystr[i];}
}

资料清单

–下载–

基于51单片机十字路口红绿灯交通灯+紧急模式相关推荐

  1. 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...

  2. B003 - 基于51单片机的蓝牙交通灯车流量控制系统

    摘要 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊.那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统.交通信号灯控制方式很多.本系统采用STC89C52单片机以及单片机最小系 ...

  3. 基于51单片机的简易交通灯仿真代码讲解

    J028 51单片机简易交通灯易懂版_仿真+代码+报告讲解 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 目录标题 工作状态 仿真图 程序 倒计时的产生 红黄 ...

  4. 基于51单片机的智能化交通灯控制系统防止堵车疏散系统方案原理图程序设计

    硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+LED灯指示电路+红外避障传感器电路+lcd1602显示+电源电路组成. ...

  5. 基于51单片机十字路口红绿灯管理系统

    设计要求 基本要求 ①单片机外接多个七段数码管和红黄绿LED: ② 实现基本的十字路口红绿灯管理: ③在每种颜色的灯在结束的10s内,显示倒计时时间: ④能够调节每种颜色灯闪烁的时间. 方案论证 方案 ...

  6. 基于51单片机设计的交通灯

    准备工作 Proteus仿真,Keil5软件,STC89C52芯片/1,74HC573锁存器,两位数码管4个,红绿高亮LED各四个,黄灯/4,470电阻20个备用,12M外部晶振,10k电阻& ...

  7. 基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s

    基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s (程序+仿真+参考报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号J011 目录标题 基于5 ...

  8. 基于51单片机十字路口交通灯_5s黄灯闪烁

    基于51单片机十字路口交通灯_5s黄灯闪烁 目录标题 基于51单片机十字路口交通灯_5s黄灯闪烁 功能要求 仿真图 程序 主要程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 倒计时显示处理 资料清 ...

  9. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

最新文章

  1. CODEFORCES 55D
  2. mysql 主从单表_MySQL主从复制单表或者多表
  3. python中字符串格式化%与.format
  4. 计算机视觉、机器学习、人工智能领域知识汇总
  5. [转载]Token原理以及应用
  6. 摄像头分辨率怎么调整_亿联CAM50 - 智能话机专属高清摄像头
  7. Python程序可打印今天的年,月和日
  8. html自动按键,VBS脚本和HTML DOM自动操作网页
  9. html5 deckview,六本木Hills出現超大型巨人?進擊的巨人展FINAL×頂樓Sky Deck的VR體驗...
  10. 居然还能这样——程序员加薪的新方法
  11. 整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划
  12. 关于拜读张鑫旭文章,了解的新属性
  13. Spring Cloud 配置中心中的native配置
  14. CiTRIX XenServer 6.5安装体验
  15. pytorch: nn.Sequential(func1,func2,func3)
  16. visio绘制自定义图形(完全零基础)
  17. 物联网是什么,华为云学院带你走进物联网的前世今生
  18. 修改阿拉伯语等语言下的数字显示
  19. IT业台风警报(一)——望天
  20. Python requests模块详解

热门文章

  1. for i in enumerate(): 解析
  2. 正则表达式:正负小数或正负整数
  3. 十四、nrf52832的pwm
  4. 虚拟机安装Win7(创建虚拟机)
  5. 《机器学习》及实战四、贝叶斯理论及实战
  6. 计算机的第一级存储器有,计算机等级考试题库重点!一级MS Office第二章“存储器”...
  7. 智能工厂整体解决方案 附下载地址
  8. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之软件的安装卸载说明
  9. python毕业设计 选题 - python 毕设选题 - python毕业论文 推荐
  10. ubuntu 安装phpstorm + 破解