欢迎光临散文网 会员登陆 & 注册

51单片机100例实例之05例

2021-01-19 18:56 作者:技术流阿宅  | 我要投稿

//项目名称:LED模拟交通灯

//项目再创作者:科技小宅神

//说明:东西向绿灯闪烁若干秒,黄灯闪烁5次后红灯亮,南北向由红灯变为绿灯,

//若干秒后南北向黄灯闪烁5次后变红灯,东西向变绿灯,如此反复。

proteus仿真图


#include <reg52.h>

#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;//操作类型变量

//1毫米延时子程序

void DelayMS(uint x)

{

  uchar t;

while(x--)

{

for(t=120;t>0;t--);

}

}

//交通灯切换程序 此设计采用共阳极接法,所以低电平0有效

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) //闪烁5次

return;//如果Flash_Count自增赋值没有达到10,返回到黄灯取反

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

YELLOW_B=~YELLOW_B;

if(++Flash_Count !=10) // 闪烁5次

return;//如果Flash_Count自增赋值没有达到10,返回到黄灯取反

Flash_Count=0;

Operation_Type = 1;

break;

}

}

//主程序

void main()

{

  while(1)//死循环

{

Traffic_lignt();//不断执行交通灯切换程序

}

}

//如何改变闪烁次数,可通过对case2,case4里面的判断句if里面++Flash_Count的改变实现

//例如10就是运用2次5秒相加的结果,20就是运用2次10秒相加的结果,相信其他的你也会了!


51单片机100例实例之05例的评论 (共 条)

分享到微博请遵守国家法律