一、基于STM32的四路红路灯控制系统
1、设计要求:
东西、南北两干道交于十字路口,各干道有一组红、绿、黄三个指示灯,指挥车辆和行人安全通行。南北方向为主干道,通行时间为9秒;东西方向为支干道,通行时间为15秒。通行时间最后2秒,绿灯灭,黄灯常亮,黄灯亮完变更通行车道。通行时间由数字显示器显示。
2、设计方案
运用单片机对交通灯系统进行实现,使用STM32单片机为主控核心,通过软件来控制过往车辆的正常运作。同时具有以下优点:
①、单片机体积小巧、使用灵活、成本低,易于真正产品化。组装各种智能式控制设备和仪器,能做到机电仪一体化。
②、面向控制。能有针对性地解决各种从简单到复杂的各类控制任务,因而能获得最佳的性能价格比。
③、抗干扰能力强,适应温度范围宽,在各种恶劣的环境下都能可靠的工作。这是其它微机集中无法比拟的。
④、可以方便的实现多机、分布式的集散控制,使整个控制系统的效率大大地提高。
⑤、单片机应用产品的研制周期短,所开发出来的样机就是以后批量生产的产品,可以避免不必要的二次开发过程。
3、proteus
4、程序设计
mian.c
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
// delay_init(10); //初始化延时函数
TIM3_Init(1800-1, 18-1); // 10ms,数码管刷新用
Key_Init(); //按键中断初始化
Led_Init(); //指示灯的初始化
SEG_Init(); //数码管引脚初始化
while(1)
{
if(time_update > SPEED && set_mode == 0) //计时达到1秒且未进入设置模式
{
time_update = 0; //重置1秒钟倒计时时间
if(mode) //mode=0,表示进入南北通行模式(南北绿灯+南北黄灯)
{
LED_NBR_OF();
LED_NBY_OF();
LED_NBG_ON(); //南北方向,亮绿灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //东西方向,亮红灯
if(temp_bei == 0) //南北方向,倒计时结束时
{
if(temp_xi == 0) //多出来3秒的东西方向,也倒计时结束了
{
mode = 0; //进入东西方向绿灯模式
temp_xi = xi_dong_time; //提前更新东西方向的倒计时时间
temp_bei = temp_xi + YELLOW_TIME; //更新南北方向的时间,为东西方向+3秒
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南北方向,亮红灯
LED_DXR_OF();
LED_DXY_OF();
LED_DXG_ON(); //东西方向,亮绿灯
}
else //南北方向已经结束,但是东西方向多出来的3秒未结束(3秒黄灯时间)
{
temp_xi--; //剩余的3秒,倒计时-1秒
// temp_bei = temp_xi;//南北方向黄灯时间
LED_NBR_OF();
LED_NBY_ON();
LED_NBG_OF(); //南北亮黄灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //东西亮红灯
}
}
else
{
temp_bei--; //南北方向。计时为-1秒
temp_xi = temp_bei + YELLOW_TIME; //更新东西方向的倒计时时间
}
}
else//mode=0,表示进入东西通行模式(东西绿灯+东西黄灯)
{
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南北方向,亮红灯
LED_DXR_OF();
LED_DXY_OF();
LED_DXG_ON(); //东西方向,亮绿灯
if(temp_xi == 0) //东西方向,倒计时结束时
{
if(temp_bei == 0) //多出来3秒的南北方向,也倒计时结束了
{
mode = 1; //进入南北方向绿灯模式
temp_bei = bei_nan_time; //提前更新南北方向的倒计时时间
temp_xi = temp_bei + YELLOW_TIME; //更新东西方向的时间,为南北方向+3秒
LED_NBR_OF();
LED_NBY_OF();
LED_NBG_ON(); //南北方向,亮绿灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //东西方向,亮红灯
}
else //东西方向已经结束,但是南北方向多出来的3秒未结束(3秒黄灯时间)
{
temp_bei--; //南北方向,剩余的3秒,倒计时-1秒
// temp_xi = temp_bei;
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南北亮红灯
LED_DXR_OF();
LED_DXY_ON();
LED_DXG_OF(); //东西亮黄灯
}
}
else
{
temp_xi--; //东西方向。计时为-1秒
temp_bei = temp_xi + YELLOW_TIME; //更新南北方向的倒计时时间
}
}
}
}
}
4路——
链接:https://pan.baidu.com/s/1jVyb57BMKTPNHqngoZrKCA 提取码:qab5
二、基于STM32的两路交通灯控制系统
2.1、protues
文章来源:https://www.toymoban.com/news/detail-506420.html
2.2、程序
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
// delay_init(10); //初始化延时函数
TIM3_Init(1800-1, 18-1); // 10ms,数码管刷新用
Key_Init(); //按键中断初始化
Led_Init(); //指示灯的初始化
SEG_Init(); //数码管引脚初始化
while(1)
{
if(time_update > SPEED && set_mode == 0) //计时达到1秒且未进入设置模式
{
time_update = 0; //重置1秒钟倒计时时间
if(mode) //mode=0,表示进入南北通行模式(南北绿灯+南北黄灯)
{
LED_NBR_OF();
LED_NBY_OF();
LED_NBG_ON(); //南方向,亮绿灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //西方向,亮红灯
if(temp_bei == 0) //南方向,倒计时结束时
{
if(temp_xi == 0) //多出来3秒的东西方向,也倒计时结束了
{
mode = 0; //进入西方向绿灯模式
temp_xi = xi_dong_time; //提前更新西方向的倒计时时间
temp_bei = temp_xi + YELLOW_TIME; //更新南方向的时间,为西方向+3秒
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南方向,亮红灯
LED_DXR_OF();
LED_DXY_OF();
LED_DXG_ON(); //西方向,亮绿灯
}
else //南方向已经结束,但是西方向多出来的3秒未结束(3秒黄灯时间)
{
temp_xi--; //剩余的3秒,倒计时-1秒
// temp_bei = temp_xi;//南方向黄灯时间
LED_NBR_OF();
LED_NBY_ON();
LED_NBG_OF(); //南亮黄灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //西亮红灯
}
}
else
{
temp_bei--; //南方向。计时为-1秒
temp_xi = temp_bei + YELLOW_TIME; //更新西方向的倒计时时间
}
}
else//mode=0,表示进入西通行模式(西绿灯+西黄灯)
{
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南方向,亮红灯
LED_DXR_OF();
LED_DXY_OF();
LED_DXG_ON(); //西方向,亮绿灯
if(temp_xi == 0) //西方向,倒计时结束时
{
if(temp_bei == 0) //多出来3秒的南北方向,也倒计时结束了
{
mode = 1; //进入南方向绿灯模式
temp_bei = bei_nan_time; //提前更新南方向的倒计时时间
temp_xi = temp_bei + YELLOW_TIME; //更新西方向的时间,为南方向+3秒
LED_NBR_OF();
LED_NBY_OF();
LED_NBG_ON(); //南方向,亮绿灯
LED_DXR_ON();
LED_DXY_OF();
LED_DXG_OF(); //西方向,亮红灯
}
else //西方向已经结束,但是南方向多出来的3秒未结束(3秒黄灯时间)
{
temp_bei--; //南方向,剩余的3秒,倒计时-1秒
// temp_xi = temp_bei;
LED_NBR_ON();
LED_NBY_OF();
LED_NBG_OF(); //南亮红灯
LED_DXR_OF();
LED_DXY_ON();
LED_DXG_OF(); //西亮黄灯
}
}
else
{
temp_xi--; //西方向。计时为-1秒
temp_bei = temp_xi + YELLOW_TIME; //更新南方向的倒计时时间
}
}
}
}
}
两路——
链接:https://pan.baidu.com/s/1QwmgxT_wf6yQq3piCBq2Kg 提取码:bofl
文章来源地址https://www.toymoban.com/news/detail-506420.html
到了这里,关于基于STM32的两路/四路红路灯控制系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!