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

这篇具有很好参考价值的文章主要介绍了基于51单片机十字路口红绿灯交通灯+紧急模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

+无黄灯+紧急

仿真:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J010

功能说明

十字路口交通灯由红、绿两色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通行;

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

紧急运行模式

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

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

程序设计

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

主函数


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.执行第一步

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

     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单片机十字路口红绿灯交通灯+紧急模式文章来源地址https://www.toymoban.com/news/detail-443833.html

到了这里,关于基于51单片机十字路口红绿灯交通灯+紧急模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Verilog的十字路口交通灯控制电路设计

    设计并实现一个简单的十字路口交通灯控制电路。以4个红色指示灯、4个绿色指示灯和4个黄色指示灯模拟路口东西南北4个方向的红绿黄交通灯。控制这些灯,使它们安下列规律亮灭。 1、东西方向绿灯亮,南北方向红灯亮。东西方向通车,时间30秒; 2、东西方向黄灯闪烁,南

    2024年02月03日
    浏览(58)
  • 基于高云FPGA开发板的十字路口交通灯

    结合高云MiniStar_Nano EDA开发板,完成设计十字路口交通信号灯控制系统。 1.要求该交通灯为三色灯控制器,红灯亮表示禁止通行,绿灯亮表示允许通行,黄灯亮表示要求压线车辆快速穿越。主干道和次干道灯的亮灭时序按照交通规则设置。 2.可以调整主干道和次干道绿灯和红

    2024年01月19日
    浏览(80)
  • 基于Openmv H7 Plus 的红色巡线+十字路口+多数字识别算法

    由于是采用命令集的方式控制openmv,摄像头不需要接收太多的数据,我采用的是判断串口接收的长度来区分命令集。flag为接收数据的长度,通过发送不同长度数据来改变openmv的工作模式 1.巡线 在openmv的开源库中有色块识别的关键函数blob(),可以传回识别出的矩形色块的中心

    2024年02月16日
    浏览(76)
  • 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    (程序+仿真+仿真视频) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J002 51单片机十字路交通灯仿真_黄灯闪烁+夜间+紧急 通过单片机模拟交通灯,东西方向黄绿红,南北方向黄绿红的工作方式。 1、显示时间倒计时; 2、夜晚能够进行所有黄灯闪烁;

    2024年02月10日
    浏览(40)
  • 【毕业设计】基于PLC的十字路口交通灯控制系统设计【仿真+源码+论文】

    摘 要 本次设计的课题是基于PLC的十字路口交通灯控制系统设计,传统的十字路口交通灯多采用单片机集成电路作为控制系统,单片机系统虽然在功能上能够实现十字路口交通灯的各种控制需求,但是单片机控制系统在设计时需要数字电路与模拟电路的完美结合,这样的控制

    2024年02月08日
    浏览(63)
  • FPGA十字路口红绿灯控制器

    课程设计:十字路口红绿灯控制器 1.要求双方向8个灯的时序控制 2.要求显示倒计时 verilog hdl代码模块 测试程序模块 注意: 选择比较好的器件 测试文件命名为testbench.vt,否则不行。 采用BCD倒计时,经测试时序无错,代码结构清晰。 EDA课设,感谢论坛其他大佬的代码,基于

    2024年02月11日
    浏览(55)
  • DE0开发板交通灯十字路口红绿灯VHDL

    名称:基于DE0开发板的交通灯十字路口红绿灯 软件:Quartus 语言:VHDL 要求: 设计一个十字路口交通信号灯的控制电路。分为两种情况,正常状态和报警状态。 1.正常状态:要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。 绿灯

    2024年02月07日
    浏览(58)
  • 电赛智能送药小车_OpenMV巡线&识别十字路口完整代码

      整体思路 :通过划分ROI区域分区进行识别,中央 ROI 区域为巡线,左右两侧的 ROI_L 和 ROI_R 为十字路口识别 . 主程序如下 : # 本文代码中所导入的pid.py就是OpenMV官网上例程的代码 需要完整源码请私信我。

    2024年02月12日
    浏览(58)
  • Web3游戏的十字路口:沿用传统IP还是另起炉灶?

    人们经常问我对 Web3 游戏有什么看法。因此,我想以书面形式概述一下我目前的想法。 让我先澄清一下:我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究,这反映我在游戏领域关注的焦点。 为什么选择游戏

    2024年02月04日
    浏览(265)
  • apollo自动驾驶进阶学习之:如何实现十字路口左转障碍物绕行

    首先需要理解Planning模块是基于Scenario、Stage、Task这样的层次来进行的,即:场景-步骤-具体的决策方法。Apollo可以应对自动驾驶所面临的不同道路场景,都是通过Scenario统一注册与管理。Scenario通过一个有限状态机来判断选择当前行车场景,每个Scenario下又有多个Stage,指当前

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包