001 基于51单片机的交通灯设计
东西向绿灯亮若干秒,黄灯闪烁 5 次后红灯亮, 红灯亮后, 南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁 5 此后变红灯,东西向变绿灯,如此重复
准备工作
keil+proteus 完成最小系统,点亮led 灯实验_吴小凹的博客-CSDN博客
首先我们下载附件中的文件,或者我们可以到公众号吴小凹免费获取。

打开proteus修改原理图
- 打开 demo_led 文件夹。
 

- 点击工程文件,如果没有安装proteus 请先安装proteus
 

- 删除单独的led ,添加其他led。其中电阻是一样的,但是灯有三种。
 

  根据图片上的添加元件即可。
打开keil 修改代码
- 找到工程文件。
 

- 双击打开文件,如果没有安装也请先安装软件
 

- 写入代码如下:
 
/*51单片机的头文件*/
#include <reg51.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; 
//延时
void DelayMS(uint x)
{
	uchar i;
	while(x--) for(i=0;i<120;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();
}
 
- 编译成功即可.
 

调试
- 将生成的hex 加载到单片机中.
 

- 点击确定即可
 

- 开始运行
 

 运行效果如下。



















