一. 系统概述
系统采用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