【毕业设计】_基于STM32的交通灯控制(原理图+源码)

一. 系统概述

系统采用STM32单片机作为核心控制单元,利用四个七段数码管显示东西南北四个方向的交通信号灯。用户可以通过四个按键对信号灯进行控制。系统启动时,交通灯将进入自动模式。在自动模式下,可以实现东西方向通行或南北方向通行,同时禁止其他方向通行。用户还可以通过设置模式调整红绿灯的时间,设置完成后需按下确定键才能进入自动模式。

在这里插入图片描述

二. 仿真概述

  1. 按下开始键后,系统将启动,根据数码管上显示的时间进行红绿黄灯的切换控制。

在这里插入图片描述

  1. 按下南北通行键后,东西方向的信号灯将始终保持红灯,允许南北方向的车辆正常通行。

在这里插入图片描述

  1. 按下东西通行键后,南北方向的信号灯将保持红灯,允许东西方向的车辆正常通行。

在这里插入图片描述

  1. 按下禁止通行键后,所有计时器将暂停,停止红绿灯的切换。

在这里插入图片描述

  1. 按下设置键可以对交通灯的亮灯时间进行调整。

在这里插入图片描述

三.程序设计

#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "seg.h"
#include "EXTERN-Key.h"
#include "Timer.h"
uint16_t ATime;
uint16_t BTime;
uint16_t Time1;
uint16_t Time2;
uint16_t Time3;
uint8_t bian;
uint8_t exchange;

int main(void)
{
	LED_Init();
	seg_init();//数码管初始化函数
	Externkey_Init();
	Timer_Init2();
	Time3 = BTime-3;
	while (1)
	{
		if(BTime>=3)
		Time3 = BTime-3;
			if(bian==1)
			{
				if(BTime>=3&&exchange==0)
				{
					seg_display(ATime,Time3);
				GPIO_SetBits(GPIOC, GPIO_Pin_5);
				GPIO_ResetBits(GPIOC, GPIO_Pin_1);
				}
				else if(BTime<3&&exchange==0)
				{
					GPIO_SetBits(GPIOC, GPIO_Pin_4);
					GPIO_ResetBits(GPIOC, GPIO_Pin_5);
					seg_display(ATime,BTime);	
					
				}
			 if(exchange==0)
				{
					GPIO_SetBits(GPIOC, GPIO_Pin_2);
				GPIO_ResetBits(GPIOC, GPIO_Pin_3);
				}
				
				
				if(BTime>=3&&exchange==1)
				{
				seg_display(Time3,ATime);
				GPIO_SetBits(GPIOC, GPIO_Pin_0);
					GPIO_ResetBits(GPIOC, GPIO_Pin_4);
				}
				else if(BTime<3&&exchange==1)
				{
					GPIO_SetBits(GPIOC, GPIO_Pin_1);
					GPIO_ResetBits(GPIOC, GPIO_Pin_0);
					seg_display(ATime,BTime);	
					
				}
			 if(exchange==1)
				{
					GPIO_SetBits(GPIOC, GPIO_Pin_3);
					GPIO_ResetBits(GPIOC, GPIO_Pin_2);
				}
				
				
				if(BTime==0&&ATime==00)
				{
					ATime =Time1;
					BTime =Time2;
					if(exchange==0)
						exchange=1;
					else if(exchange==1)
						exchange=0;
						
				}
			}
			if(bian==2)
			{
				ATime =Time1;
				BTime =Time2;
				seg_display(ATime,Time3);
			}
			if(bian==3)
			{
			seg_nodisplay();
			}
			if(bian==4)
			{
				seg_dxdisplay(ATime);
			}
			if(bian==5)
			{
				seg_nbdisplay(BTime);
			}
			
	}		
	
}

24-32f-69

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值