一. 系统概述
本系统以 STM32 单片机作为核心控制器,采用四个七段数码管来展示东西南北四个方向的交通灯状态。用户可以通过四个按键对交通灯进行控制。当按下开始按钮时,交通灯将进入自动模式。在此模式下,灯光会自动切换以允许东西或南北方向通行。用户还可以进入设置模式调整红绿灯的时长,设置完成后必须点击确定按钮才能返回到自动模式。
二. 仿真概述
- 按下开始按钮后,系统将启动运行,并根据数码管上显示的时间控制红绿黄灯的切换。
- 当按下南北通行按钮时,东西方向的灯将保持红色,允许南北方向的车辆正常通行。
- 按下东西通行按钮后,南北方向的灯将持续红色,以确保东西方向的车辆正常通行。
- 点击禁止通行按钮后,所有计时功能将暂停。
- 按下设置按钮,可以对各个灯亮起的时长进行自定义设置。
三.程序设计
#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