失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Arduino-Proteus仿真04-LED交通灯仿真

Arduino-Proteus仿真04-LED交通灯仿真

时间:2020-10-30 17:13:18

相关推荐

Arduino-Proteus仿真04-LED交通灯仿真

Arduino-Proteus仿真04-LED交通灯仿真

设计者:STCode(公众号同名)

前言:

Proteus是英国Labcenter公司开发的电路分析与实物仿真及印制电路板设计软件,它可以仿真、分析各种模拟电路和集成电路,其提供了大量模拟与数字元器件及外部设备,以及各种虚拟仪器(如电压表、电流表、示波器、逻辑分析仪、信号发生器等),特别是它具有对单片机及其外围电路组成的综合系统交互仿真功能,

目前,Proteus仿真系统支持的主流单片机有ARM7(LPC21xx)、8051/52、AVR、PIC 10/12/16/18/24、MSP430、CotexM0/M3、HC11等,其支持的开发环境有Keil u Vision2/3/4、MPLAB、Atmel Studio等。

提示:

Proteus仿真Arduino中,关于所需硬件获取、软件编译、HEX文件获取、代码导入等问题请参考文章:Arduino-Proteus仿真01-LED灯闪烁

1) 练习描述

这次做一个LED模拟交通灯的实验,实现的效果为:东西向绿灯亮若干秒后,黄灯闪烁,闪烁五次后亮红灯,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁,闪烁五次后亮红灯,东西向亮绿灯,如此往复,本例将延时时间设置得较短是为了调试的时候能较快的观察到运行效果。

2) 元器件选择

·Arduino Uno

·LED-GREEN

·LED-RED

·LED-YELLOW

·RES(220O欧姆)

在元件模式中点击P选项,在元件库中搜索所需的元件名称,双击后便可添加到元件清单中。

3) 电路连接

由电路连接可以看出,南北向的红灯同时接到IO5,绿灯同时接到IO7,黄灯同时接到IO6,东西向的红绿黄灯连接方法类似,所有LED灯共阳极。

4) 程序设计

5)#define RED_A 2 //东西向指示灯6)#define YELLOW_A 37)#define GREEN_A48)#define RED_B 5 //南北向指示灯9)#define YELLOW_B 610)#define GREEN_B711)12)//定义闪烁次数及操作类型变量定义13)uint8_t Flash_Count = 0, display_Type = 1;14)uint8_t YELLOW_State = HIGH;15)//定义黄色LED初始状态16)void setup()17){18) for(int i=2;i<8;i++) //设置led所接引脚为输出模式19) pinMode(i,OUTPUT);20)}21)22)void loop() 23){24) switch (display_Type) 25) {26) case 1://东西向绿灯与南北向红灯亮27) digitalWrite(RED_A,HIGH);28) digitalWrite(YELLOW_A,HIGH);29) digitalWrite(GREEN_A,LOW);30) digitalWrite(RED_B,LOW);31) digitalWrite(YELLOW_B,HIGH);32) digitalWrite(GREEN_B,HIGH);33) delay(3000);34) display_Type=2;35) break;36) case 2://东西向黄灯开始闪烁,绿灯关闭37) delay(200);38) if(YELLOW_State==HIGH) YELLOW_State=LOW;39) else YELLOW_State=HIGH;40) digitalWrite(YELLOW_A,YELLOW_State);41) digitalWrite(GREEN_A,HIGH);42) if(++Flash_Count != 10) return; //闪烁5次43) Flash_Count=0; //计数归零44) display_Type=3;45) break;46) case 3://东西向红灯与南北向绿灯亮47) digitalWrite(RED_A,LOW);48) digitalWrite(YELLOW_A,HIGH);49) digitalWrite(GREEN_A,HIGH);50) digitalWrite(RED_B,HIGH);51) digitalWrite(YELLOW_B,HIGH);52) digitalWrite(GREEN_B,LOW);53) delay(3000);54) display_Type=4;55) break;56) case 4://南北向黄灯开始闪烁57) delay(200);58) if(YELLOW_State==HIGH) YELLOW_State=LOW;59) else YELLOW_State=HIGH;60) digitalWrite(YELLOW_B,YELLOW_State);61) digitalWrite(GREEN_B,HIGH);62) if(++Flash_Count != 10) return; //闪烁5次63) Flash_Count=0; //计数归零64) display_Type=1; //回到第一种操作65) break;66) }67)}

程序说明:

源程序中用#define对东西向和南北向的指示灯分别进行了引脚定义,以便独立控制各路指示灯。源程序中的Flash_Count和display_Type分别标识闪烁次数与当前需要操作的类型,本例仿真中的交通指示灯切换时间设置得较短,以便在调试的时候较快地观察到运行效果。

5) 软件操作

程序编写完成后点击Arduino IDE编译器的文件—首选项,将编译选项勾选上。点击好以后进行编译,编译完成后复制HEX文件所在的路径,复制完成后返回Proteus软件,双击Arduino控制板,在Program File处粘贴HEX文件的路径。点击确定以后即可进行仿真,点击Proteus软件下方运行仿真按钮,可以看到仿真的效果。

源文件请关注公众号“STCode”获取~

如果觉得《Arduino-Proteus仿真04-LED交通灯仿真》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。