今天分享一个模拟交通灯实验,这个实验和我们平时真实的交通灯还是有些许差别的,比如说在稳定性方面,和真实的交通灯有着天壤之别,而马路上所用的交通灯是用工控(如PLC)的方式来实现的,在平时运行时极少出问题。

交通灯仿真教程(电子仿真模拟交通灯)(1)

由于电子实验的局限性,所以笔者更倾向于用电子仿真的方式来做实验,这样,大家看完之后也可以做出一样的实验现象,要想完成本次实验只需要两个软件,一个是仿真软件Proteus,另一个是编程软件Keil-C51。

物料清单

英文名字是电子元器件在Proteus中所对应的代号。

  • 51单片机-AT89C51

  • 电容-CAP

  • 电解电容-CAP-ELEC

  • 12M晶振-CRYSTAL

  • 黄色LED-LED-YELLOW

  • 电阻-RES

  • LED灯-LED

交通灯仿真教程(电子仿真模拟交通灯)(2)

程序源代码
  • #include <reg51.h> //头文件

  • sbit RED_A=P0^0; //把P0.0赋给RED_A

  • sbit YELLOW_A=P0^1; //把P0.1赋给YELLOW_A

  • sbit GREEN_A=P0^2; //把P0.0赋给GREEN_A

  • sbit RED_B=P0^3; //把P0.0赋给RED_B

  • sbit YELLOW_B=P0^4; //把P0.0赋给YELLOW_B

  • sbit GREEN_B=P0^5; //把P0.0赋给GREEN_B

  • uchar Flash_Count = 0;

  • Operation_Type = 1;

  • void Traffic_lignt()

  • {

  • 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(200);

  • YELLOW_A=~YELLOW_A;

  • if( Flash_Count !=10)

  • return;

  • 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:

  • DelayMS(200);

  • YELLOW_B=~YELLOW_B;

  • if( Flash_Count !=10)

  • return;

  • Flash_Count=0;

  • Operation_Type = 1;

  • break;

  • }

  • }

  • void main() //主函数

  • {

  • while(1)

  • {

  • Traffic_lignt();

  • }

  • }

实验现象

交通灯仿真教程(电子仿真模拟交通灯)(3)

,