001 基于51单片机的交通灯设计

001 基于51单片机的交通灯设计

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

准备工作

keil+proteus 完成最小系统,点亮led 灯实验_吴小凹的博客-CSDN博客

首先我们下载附件中的文件,或者我们可以到公众号吴小凹免费获取。

打开proteus修改原理图

  • 打开 demo_led 文件夹。

001 基于51单片机的交通灯设计_第1张图片

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

001 基于51单片机的交通灯设计_第2张图片

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

001 基于51单片机的交通灯设计_第3张图片
​ 根据图片上的添加元件即可。

打开keil 修改代码

  • 找到工程文件。

001 基于51单片机的交通灯设计_第4张图片

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

001 基于51单片机的交通灯设计_第5张图片

  • 写入代码如下:
/*51单片机的头文件*/
#include 
#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();
}
  • 编译成功即可.

001 基于51单片机的交通灯设计_第6张图片

调试

  • 将生成的hex 加载到单片机中.

001 基于51单片机的交通灯设计_第7张图片

  • 点击确定即可

001 基于51单片机的交通灯设计_第8张图片

  • 开始运行

001 基于51单片机的交通灯设计_第9张图片
运行效果如下。

001 基于51单片机的交通灯设计_第10张图片

你可能感兴趣的:(仿真调试),付费资源说明,51单片机,单片机,嵌入式硬件)