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 加载到单片机中.
- 点击确定即可
- 开始运行
运行效果如下。