【Proteus仿真】【STM32单片机】交通灯控制系统设计

这篇具有很好参考价值的文章主要介绍了【Proteus仿真】【STM32单片机】交通灯控制系统设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用数码管、按键、交通信号灯模块等。

系统运行后,交通灯系统开始运行,数码管显示初始时间,默认南北绿灯5S,东西红灯8S,绿灯过后南北黄灯3秒;然后切换东西绿灯5S,南北红灯8S,绿灯过后南北黄灯3秒;如此循环。
可使用K1键进入红绿灯时间设置,K2和K3进行加减调节,设定好后,K4键确定并继续运行。在运行过程中,可通过K2键禁止通行,此时东南西北方向红灯亮,K3键允许南北通行,此时南北绿灯亮,东西红灯亮。
K4键允许东西通行,此时南北红灯亮,东西绿灯亮。此时可按下K1键返回
交通灯自动控制模式运行。
主要功能如下:
1、东西南北红黄绿灯控制
2、交通灯时间设置
3、数码管显示
4、突发状况交通灯控制


二、软件设计

/*
作者:嗨小易(QQ:3443792007)
*/



/*******************************************************************************
* 函 数 名         : TIM2_IRQHandler
* 函数功能		   : TIM2中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void TIM2_IRQHandler(void)
{
	static u8 i=0;
	
	if(TIM_GetITStatus(TIM2,TIM_IT_Update))
	{
		i++;
		if(i>=100)//间隔1S
		{
			i=0;
			sys_ctrl.sec++;
			if(sys_ctrl.led_sta==0)//南北绿灯,东西红灯时间
			{
				sys_ctrl.nbled_time=sys_ctrl.gled_time-sys_ctrl.sec;
				sys_ctrl.dxled_time=sys_ctrl.rled_time-sys_ctrl.sec;
				//LED灯
				NB_GLED=1;NB_YLED=0;NB_RLED=0;
				DX_GLED=0;DX_YLED=0;DX_RLED=1;
				if(sys_ctrl.sec>=sys_ctrl.gled_time)
				{
					sys_ctrl.sec=0;
					sys_ctrl.led_sta=1;
					sys_ctrl.nbled_time=YLED_TIME-sys_ctrl.sec;
					sys_ctrl.dxled_time=YLED_TIME-sys_ctrl.sec;
					//LED灯
					NB_GLED=0;NB_YLED=1;NB_RLED=0;
					DX_GLED=0;DX_YLED=0;DX_RLED=1;
				}	
			}
			else if(sys_ctrl.led_sta==1)//南北黄灯,东西红灯时间
			{
				sys_ctrl.nbled_time=YLED_TIME-sys_ctrl.sec;
				sys_ctrl.dxled_time=YLED_TIME-sys_ctrl.sec;	
				if(sys_ctrl.sec>=YLED_TIME)
				{
					sys_ctrl.sec=0;
					sys_ctrl.led_sta=2;
					sys_ctrl.nbled_time=sys_ctrl.rled_time-sys_ctrl.sec;
					sys_ctrl.dxled_time=sys_ctrl.gled_time-sys_ctrl.sec;
					//LED灯
					NB_GLED=0;NB_YLED=0;NB_RLED=1;
					DX_GLED=1;DX_YLED=0;DX_RLED=0;
				}	
			}
			else if(sys_ctrl.led_sta==2)//南北红灯,东西绿灯时间
			{
				sys_ctrl.nbled_time=sys_ctrl.rled_time-sys_ctrl.sec;
				sys_ctrl.dxled_time=sys_ctrl.gled_time-sys_ctrl.sec;
				if(sys_ctrl.sec>=sys_ctrl.gled_time)
				{
					sys_ctrl.sec=0;
					sys_ctrl.led_sta=3;
					sys_ctrl.nbled_time=YLED_TIME-sys_ctrl.sec;
					sys_ctrl.dxled_time=YLED_TIME-sys_ctrl.sec;
					//LED灯
					NB_GLED=0;NB_YLED=0;NB_RLED=1;
					DX_GLED=0;DX_YLED=1;DX_RLED=0;
				}	
			}
			else if(sys_ctrl.led_sta==3)//南北红灯,东西黄灯时间
			{
				sys_ctrl.nbled_time=YLED_TIME-sys_ctrl.sec;
				sys_ctrl.dxled_time=YLED_TIME-sys_ctrl.sec;
				if(sys_ctrl.sec>=YLED_TIME)
				{
					sys_ctrl.sec=0;
					sys_ctrl.led_sta=0;
					sys_ctrl.nbled_time=sys_ctrl.gled_time-sys_ctrl.sec;
					sys_ctrl.dxled_time=sys_ctrl.rled_time-sys_ctrl.sec;
					//LED灯
					NB_GLED=1;NB_YLED=0;NB_RLED=0;
					DX_GLED=0;DX_YLED=0;DX_RLED=1;
				}	
			}
		}
	}
	TIM_ClearITPendingBit(TIM2,TIM_IT_Update);	
}


//系统数据显示
void sys_data_show(void)
{
	u8 buf[8];

	//正常显示
	while(sys_ctrl.mode==0)
	{
		buf[0]=gsmg_code[sys_ctrl.nbled_time/10];
		buf[1]=gsmg_code[sys_ctrl.nbled_time%10];
		buf[2]=gsmg_code[sys_ctrl.nbled_time/10];
		buf[3]=gsmg_code[sys_ctrl.nbled_time%10];
		buf[4]=gsmg_code[sys_ctrl.dxled_time/10];
		buf[5]=gsmg_code[sys_ctrl.dxled_time%10];
		buf[6]=gsmg_code[sys_ctrl.dxled_time/10];
		buf[7]=gsmg_code[sys_ctrl.dxled_time%10];
		smg_display(buf,1);
		break;	
	}
	//时间设置模式显示
	while(sys_ctrl.mode==1)
	{
		buf[0]=gsmg_code[sys_ctrl.gled_time/10];
		buf[1]=gsmg_code[sys_ctrl.gled_time%10];
		buf[2]=gsmg_code[sys_ctrl.gled_time/10];
		buf[3]=gsmg_code[sys_ctrl.gled_time%10];
		buf[4]=gsmg_code[sys_ctrl.rled_time/10];
		buf[5]=gsmg_code[sys_ctrl.rled_time%10];
		buf[6]=gsmg_code[sys_ctrl.rled_time/10];
		buf[7]=gsmg_code[sys_ctrl.rled_time%10];
		smg_display(buf,1);
		break;
	}
	//禁止通行显示、//南北通行显示、//东西通行显示
	while(sys_ctrl.mode==2 || sys_ctrl.mode==3 || sys_ctrl.mode==4)
	{
		buf[0]=0x40;
		buf[1]=0x40;
		buf[2]=0x40;
		buf[3]=0x40;
		buf[4]=0x40;
		buf[5]=0x40;
		buf[6]=0x40;
		buf[7]=0x40;
		smg_display(buf,1);
		break;	
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=KEY_Scan(0);
	if(sys_ctrl.mode==0)
	{
		//时间设置
		if(key==KEY1_PRESS)
		{
			sys_ctrl.mode=1;
			TIM_Cmd(TIM2,DISABLE);//关闭定时器
		}	
	}
	//非时间设置模式
	if(sys_ctrl.mode!=1)
	{
		if(key==KEY1_PRESS)
		{
			sys_ctrl.mode=0;
			TIM_Cmd(TIM2,ENABLE);//打开定时器	
		}
		//禁止通行
		else if(key==KEY2_PRESS)
		{
			sys_ctrl.mode=2;
			TIM_Cmd(TIM2,DISABLE);//关闭定时器
			//LED灯
			NB_GLED=0;NB_YLED=0;NB_RLED=1;
			DX_GLED=0;DX_YLED=0;DX_RLED=1;
		}
		//南北通行
		else if(key==KEY3_PRESS)
		{
			sys_ctrl.mode=3;
			TIM_Cmd(TIM2,DISABLE);//关闭定时器
			//LED灯
			NB_GLED=1;NB_YLED=0;NB_RLED=0;
			DX_GLED=0;DX_YLED=0;DX_RLED=1;
		}
		//东西通行
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=4;
			TIM_Cmd(TIM2,DISABLE);//关闭定时器
			//LED灯
			NB_GLED=0;NB_YLED=0;NB_RLED=1;
			DX_GLED=1;DX_YLED=0;DX_RLED=0;
		}	
	}
	//时间设置模式
	if(sys_ctrl.mode==1)
	{
		if(key==KEY2_PRESS)//加
		{
			sys_ctrl.gled_time++;
			if(sys_ctrl.gled_time>90)sys_ctrl.gled_time=0;
			sys_ctrl.rled_time=sys_ctrl.gled_time+YLED_TIME;		
		}
		else if(key==KEY3_PRESS)//减
		{
			sys_ctrl.gled_time--;
			if(sys_ctrl.gled_time<0)sys_ctrl.gled_time=90;
			sys_ctrl.rled_time=sys_ctrl.gled_time+YLED_TIME;	
		}
		else if(key==KEY4_PRESS)//确定
		{
			sys_ctrl.mode=0;
			TIM_Cmd(TIM2,ENABLE);//打开定时器		
		}		
	}
}


//应用控制系统
void appdemo_show(void)
{
	LED_Init();
	KEY_Init();
	smg_init();
	SMG_DATAPORT(0);
	sys_parm_init();//系统参数初始化
	TIM2_Init(500-1,79);//定时10ms
	
	while(1)
	{
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置		
	}
}




三、实验现象

演示视频:https://space.bilibili.com/444388619

【Proteus仿真】【STM32单片机】交通灯控制系统设计
【Proteus仿真】【STM32单片机】交通灯控制系统设计
【Proteus仿真】【STM32单片机】交通灯控制系统设计
【Proteus仿真】【STM32单片机】交通灯控制系统设计
【Proteus仿真】【STM32单片机】交通灯控制系统设计
【Proteus仿真】【STM32单片机】交通灯控制系统设计


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。文章来源地址https://www.toymoban.com/news/detail-514114.html

到了这里,关于【Proteus仿真】【STM32单片机】交通灯控制系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于51单片机的交通灯Protues仿真设计

    目录 一、设计背景 二、实现功能 三、 硬件电路设计说明 3.1 主控模块电路设计 3.2 数码管显示电路设计 ​​​​​​​3.3 键盘电路设计 ​​​​​​​3.4 复位电路设计 ​​​​​​​3.5 时钟电路设计 三、仿真演示 四、源程序        交通是城市经济活动的生命线,

    2024年02月09日
    浏览(33)
  • 51单片机的交通灯控制系统(仿真+程序+报告+原理图)

    该系统由AT89C51单片机+数码管模块+LED指示灯模块+按键模块构成。 可实现基本功能: 1、红绿灯正常切换,黄灯会闪烁 2、红灯30s,绿灯25s,黄灯5s(时间不同只需修改变量,简单) 按键功能: 1、南北向红灯时间可调,东西向绿灯时间可调 2、东西方向紧急模式:按下东西方向变

    2024年02月05日
    浏览(42)
  • 【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真

      博主最近进行单片机的仿真,本篇文章主要利用了STM32CubeMX、Keil和Proteus三个软件,为后期的硬件打下基础。文章主要目的是学习软件的使用和单片机的仿真。   本文是我在学习proteus软件和STM32CubeMX过程当中的心得和学习笔记,在学习时已经有C, C++的基础。文章附上了

    2024年02月16日
    浏览(44)
  • 15-基于单片机的交通灯系统设计(原理图+仿真+说明书)

    资料包含:设计全套资料(精品) 原理图工程文件 原理图截图 仿真模型工程文件 仿真截图 说明书19236字 英文文献及翻译 答辩PPT visio流程图工程 资料链接 本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆的通

    2024年02月10日
    浏览(27)
  • 基于AT89C51单片机的交通灯设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87763760?spm=1001.2014.3001.5503 源码获取 主要内容: 设计一个能够控制十二盏交通信号灯的模拟系统,:利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并用LED灯显示倒计时间。 基本要

    2024年02月08日
    浏览(39)
  • 【毕业设计】15-基于单片机的交通灯系统设计(原理图+仿真+论文)

    本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆的通行提供便利。 1、设计定时器或采用相关的定时芯片给系统提供时间参考信号。 2、单片机依据时间信号,控制指示灯的亮灭控制车辆和行人的通行,同时显示

    2023年04月08日
    浏览(28)
  • 【Proteus仿真】【STM32单片机】环境监测系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、蜂鸣器、按键模块、DHT11温湿度传感器、继电器加热祛湿加湿模块等。 主要功能: 系统运行后,LCD1602显示传感器检测的温度、湿度及有害气体浓度值;若按下K3键进入阈值设置模式,默认以温度下限开始位置闪烁

    2024年02月01日
    浏览(82)
  • 【Proteus仿真】【STM32单片机】多功能智能台灯

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1604液晶、按键、蜂鸣器、语音识别模块、PCF8591 ADC模块、DHT11温湿度传感器、光线传感器、台灯、人体红外传感器等。 主要功能: 系统运行后,LCD1604液晶显示温湿度和光线强度、时间日期,系统工作模式;系统默认为自动模式

    2024年02月07日
    浏览(42)
  • 【Proteus仿真】【STM32单片机】智能窗帘控制系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、按键模块、HC05蓝牙、DHT11温湿度、PCF8591 ADC模块、光线传感器、28BYJ48步进电机等。 主要功能: 系统运行后,LCD1602显示温湿度和光线强度值和系统模式状态。 系统模式以自动模式运行,当按下K4键切换为手动模式

    2023年04月24日
    浏览(27)
  • 基于STM32单片机的密码锁(Proteus仿真、程序)

    由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块 1、采用STM32F103为主控芯片 2、通过4*4矩阵键盘实现密码输入、功能键等排列如下 1     2    3     删除 4     5    6     修改密码 7     8    9     重新输入 返回  0   确认   紧急开锁键 3、每按下一次

    2024年02月07日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包