名称:交通信号灯
软件:proteus 8
keil 4
语言:C语言
使用说明:本例中,通过proteus模拟交通信号灯,南北和东西各一组交通信号灯,信号灯分红黄绿三色。具体效果可以看下图。
示例图:
程序:
/* 名称: L E D 模拟交通灯
说明:东西向绿灯亮若干秒,黄
灯闪烁 5 次后红灯亮, 红灯亮后,南
北向由红灯变为绿灯,若干秒后南北
向黄灯闪烁 5 此后变红灯,东西向变
绿灯,如此重复。
proteuseda.com
*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //东西向灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3; //南北向灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i
}
//交通灯切换
void Traffic_Light()
{
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000);
Operation_Type=2;
break;
case 2: //东西向黄灯闪烁,绿灯关闭
DelayMS(300);
YELLOW_A=~YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) return; //闪烁 5 次
Flash_Count=0;
Operation_Type=3;
break;
case 3: //东西向红灯,南北向绿灯亮
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000);
Operation_Type=4;
break;
case 4: //南北向黄灯闪烁 5 次
DelayMS(300);
YELLOW_B=~YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
}
}
//主程序
void main()
{
while(1) Traffic_Light();
}
/**********************************************************************************/
Proteus软件是英国Lab Center Electronics公司出版的电子设计自动化(EDA)工具软件。它不但能够设计原理图,还能通过软件中内置的单片机模拟器加载程序后,仿真单片机的运行效果,更能生成PCB版图用以制版。是一个涵盖电子设计全流程的软件,目前在国内该软件被越来越多的电子工程师和电子专业的学生所使用。本公众号主要致力于proteus教程和相关仿真资源的发布工作。
Proteus软件是英国Lab Center Electronics公司出版的电子设计自动化(EDA)工具软件。它不但能够设计原理图,还能通过软件中内置的单片机模拟器加载程序后,仿真单片机的运行效果,更能生成PCB版图用以制版。是一个涵盖电子设计全流程的软件,目前在国内该软件被越来越多的电子工程师和电子专业的学生所使用。本公众号主要致力于proteus教程和相关仿真资源的发布工作。
/***********************************************************************/
领取专属 10元无门槛券
私享最新 技术干货