今天分享一个模拟交(jiao)通灯实验,这个实验和(he)我们平时真实的交通灯(deng)还是有些许差别的,比如说在稳(wen)定性方面,和真实的交通灯有着天壤(rang)之别,而马路上所用的交通(tong)灯是用工控(如PLC)的方式来(lai)实现的,在平时运行时极少(shao)出问题。
由于电子实验的局(ju)限性,所以笔者更倾向于用(yong)电子仿真的方式来做实验,这样,大家看完之后也可以做出一样(yang)的实验现象,要(yao)想完成本次实验只需(xu)要两个软件,一个是仿真软(ruan)件Proteus,另一个是编程软件Keil-C51。
物料(liao)清单英文名字是电子(zi)元器件在Proteus中所对应的代号。
51单片机-AT89C51
电容-CAP
电解电容-CAP-ELEC
12M晶振-CRYSTAL
黄色LED-LED-YELLOW
电阻-RES
LED灯-LED
情(qing)降和合术图片
原理图(tu)单片机左侧为单(dan)片机的最小系统,右侧是交通灯的连接(jie)方式,他们以共阳极方式连接,所谓(wei)共阳极方式是LED灯(deng)的阳极都接电源,而阴极接地的方(fang)式。当单片机I/O口输出高电平(ping)的时候,由于I/O口之间和VCC之间没有压差,所以不会有电流(liu)通过,而当I/O口(kou)输出低电平的时候,由于电源和I/O口之间有压差存在,此时会有电(dian)流通过,LED灯会被点亮(liang)。
程序源代码#include <reg51.h> //头(tou)文件
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赋给(gei)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();
}
}
实验现(xian)象情降能多做吗