您的位置首页百科问答

51单片机C程序实验LED灯:[5]模拟交通灯

51单片机C程序实验LED灯:[5]模拟交通灯

的有关信息介绍如下:

51单片机C程序实验LED灯:[5]模拟交通灯

名称:LED 模拟交通灯

目的:东西向绿灯亮若干秒,黄灯闪3次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁3次后变红灯,东西向变绿灯,如此重复。

分析一共有12个灯,每个与每个又有逻辑联系,但其实不是很复杂,分析比较重要,只要把交通灯的规律总结出来就很简单了,而且每个人总结规律是不同的,程序也就有更多种,所以这里算是一个比较广泛的例子。

LED灯方面的元器件不是很复杂,之前说了很多,也差不多,只是灯不一样。

51单片机

电容

瓷片电容

晶振

绿色二极管

红色二极管

黄色二极管

电阻

电路图:

1为总体图,2,3为大图

PS:图要是不会画也可以评论提问。。

说明分析(不想看请直接跳往下一步):通过思考我们发现灯的循环大致分为

1、横向绿灯亮,竖向红灯亮

2、横向黄灯闪三下,竖向红灯依旧亮

3、横向红灯亮,竖向绿灯亮

4、横向红灯依旧亮,竖向黄灯闪三下

由分析我们把程序也分为四个循环

【程序】图片版

按照程序顺序截图,前面是子程序,最后为主程序

【文字版】

/* 名称:LED 模拟交通灯

说明:东西向绿灯亮若干秒,黄灯闪3次后红灯亮, 红灯亮后,

南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁3次后变红灯,

东西向变绿灯,如此重复。*/

#include

#define uchar unsigned char

#define uint unsigned int

//规划好各个脚连接的灯,方便使用

sbit RED_1=P0^0; //东西向灯

sbit YELLOW_1=P0^1;

sbit GREEN_1=P0^2;

sbit RED_2=P0^3; //南北向灯

sbit YELLOW_2=P0^4;

sbit GREEN_2=P0^5;

uchar number=0,type=1; //闪烁次数,操作类型变量

//延时子程序

void Delay(uint x)

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

//交通灯切换程序

//总共分为四种情况,如此循环

//注:1为关灯,0为开灯

traffic()

{

switch(type)

{

case 1: //东西向绿灯与南北向红灯亮

RED_1=1;YELLOW_1=1;GREEN_1=0;

RED_2=0;YELLOW_2=1;GREEN_2=1;

Delay(2000);

type=2;

break;

case 2: //东西向黄灯闪烁,绿灯关闭

Delay(300);

YELLOW_1=~YELLOW_1;GREEN_1=1;

if(++number!=6) return; //闪烁3次

number=0;

type=3;

break;

case 3: //东西向红灯,南北向绿灯亮

RED_1=0;YELLOW_1=1;GREEN_1=1;

RED_2=1;YELLOW_2=1;GREEN_2=0;

Delay(2000);

type=4;

break;

case 4: //南北向黄灯闪烁3次

Delay(300);

YELLOW_2=~YELLOW_2;GREEN_2=1;

if(++number!=6) return;

number=0;

type=1;

}

}

//主程序,由于用了switch,为了便于循环选择,用一个traffic子函数写在外面

void main()

{

while(1) traffic();

}