首页 » 软件开发 » 小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真)

小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真)

南宫静远 2024-07-23 21:00:34 软件开发 0

扫一扫用手机浏览

文章目录 [+]

其实如果红绿灯设计得合理,将会大大提高我们的通行效率,也会更大程度地避免交通事故的发生。

于是我突发奇想,红绿灯的控制其实并不复杂,我能不能用我最爱的单片机来做一个红绿灯实验呢?说干咱就干

鉴于时间和手头材料的原因,我没有做成实物,只是用仿真软件实现了我需要的功能,其实PROTEUS上实现了,放到实物上调一下应该就可以了。

小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真) 小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真) 软件开发
(图片来自网络侵删)

程序功能很简单,模拟十字路口的交通信号灯,先是绿灯亮,然后黄灯亮三秒后,红灯亮禁行(每一个路口控制方向相同)。

仿真模拟图如下:

小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真) 小项目:利用单片机和仿真软件模拟汽车红绿灯项目 附效果图(方向红绿灯单片机模拟仿真) 软件开发
(图片来自网络侵删)

模拟东西通行,南北禁行:

模拟东西禁行,南北通行:

程序C语言源代码如下:

/模拟交通灯/

#include <reg51.h>

typedef unsigned char uint8;

typedef unsigned int uint16;

void delay(uint16 x)

{

uint16 i,j;

for(i = x; i > 0; i --)

for(j = 114; j > 0; j --);

}

#define RED_EW_ON() P0 &= ~0x01 //东西方向指示灯开

#define YELLOW_EW_ON() P0 &= ~0x02

#define GREEN_EW_ON() P0 &= ~0x04

#define RED_EW_OFF() P0 |= 0x01 //东西方向指示灯关

#define YELLOW_EW_OFF() P0 |= 0x02

#define GREEN_EW_OFF() P0 |= 0x04

#define RED_SN_ON() P0 &= ~0x08 //南北方向指示灯开 0000100 1111011

#define YELLOW_SN_ON() P0 &= ~0x10

#define GREEN_SN_ON() P0 &= ~0x20

#define RED_SN_OFF() P0 |= 0x08 //南北方向指示灯关

#define YELLOW_SN_OFF() P0 |= 0x10

#define GREEN_SN_OFF() P0 |= 0x20

#define YELLOW_EW_BLINK() P0 ^= 0x02 //东西方向黄灯闪烁

#define YELLOW_SN_BLINK() P0 ^= 0x10 //南北方向黄灯闪烁

uint8 Flash_Count = 0, Operation_Type = 1; //闪烁次数,操作类型变量

void Traffic_Light() //交通灯切换子程序

{

switch (Operation_Type)

{

case 1://东西方向绿灯与南北方向红灯亮

RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();

RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();

delay(2000); //延时

Operation_Type = 2; //下一个操作

break;

case 2://东西方向黄灯开始闪烁,绿灯关闭

delay(120);

YELLOW_EW_BLINK();

GREEN_EW_OFF();

//闪烁5次

if( ++Flash_Count != 10) return;

Flash_Count = 0;

Operation_Type = 3; //下一个操作

break;

case 3://东西方向红灯与南北方向绿灯亮

RED_EW_ON(); YELLOW_EW_OFF(); GREEN_EW_OFF();

RED_SN_OFF(); YELLOW_SN_OFF(); GREEN_SN_ON();

//南北方向绿灯亮若干秒后切换

delay(2000);

Opeation_Type = 4; //下一个操作

break;

case 4://南北方向红灯开始闪烁

delay(120);

YELLOW_SN_BLINK();

GREEN_SN_OFF()

//闪烁5次

if( ++ Flash_Count != 10) return;

Flash_Count = 0;

Operation_Type = 1; //回到第一种操作

}

}

//主程序

int main()

{

while(1) Traffic_Light();

}

程序结束

通过仿真后基本上实现了所需要的功能,后续还可以改进,例如根据车流量来适当增加或者减少绿灯时间等,由于无法上传附件 如果需要设计文件请留言或者私信,看到后会第一时间回复。
谢谢!

喜欢请关注哦!

标签:

相关文章