【毕业设计】_基于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、付费专栏及课程。

余额充值