基于单片机的交通灯控制系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的交通灯控制系统

一、实验目的

1、了解交通灯的控制方法

2、掌握8051单片机基本操作

3、掌握keil和proteus软件的使用

二、实验原理

通过对十字路口的观察,发现红绿灯的控制原理:首先南北方向右转加直行的绿灯亮起。此时,东西方向为红灯;当右转加直行绿灯倒计时进入最后5秒,绿灯切换为黄灯并开始闪烁,东西方向红灯不变;接着南北方向切换为左转灯,东西方向依然是红灯;同样当倒计时进入最后5秒时,黄灯开始闪烁。东西方向

为红灯。然后东西方向的右转加直行绿灯亮起,以此类推。

三、实验内容及程序

主程序:

void main(void)

{

Busy_LED=0;

Special_LED=0;

IT0=1; //INT0负跳变触发

TMOD=0x01;//定时器工作于方式1

TH0=(65536-50000)/256;//定时器赋初值

TL0=(65536-50000)%256;

EA=1; //CPU开中断总允许

ET0=1;//开定时中断

EX0=1;//开外部INTO中断

TR0=1;//启动定时

while(1)

{

Flag_EW_Yellow=0; //EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5)

{P1=S[0]; //SN通行,EW红灯

Display();}

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1; //SN开黄灯信号位

EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯

Display();

}

Flag_SN_Yellow=0; //SN关黄灯显示信号

Time_SN=SNL;

while(Time_SN>=5)

{P1=S[2];//SN左拐绿灯亮,EW红灯

Display();}

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1; //SN开黄灯信号位

EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯Display();}

/***********赋值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

Flag_SN_Yellow=0; //SN关黄灯显示信号

Time_EW=SN;

Time_SN=EW;

while(Time_EW>=5)

{P1=S[4]; //EW通行,SN红灯

Display();}

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1;//EW开黄灯信号位

SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯Display();}

Flag_EW_Yellow=0; //EW关黄灯显示信号

Time_EW=EWL;

while(Time_EW>=5)

{P1=S[6];//EW左拐绿灯亮,SN红灯

Display();}

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1; //EN开黄灯信号位

SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯Display();}

/***********赋值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

}

}

程序框图:主程序:

定时器T0:

外部中断0:

减按键与加按键流程相同。唯一不同的是,当东西方向的倒计时值<=40时。会将东西倒计时的值置为40s ,南北置为20s 。除此之外还有三个功能按键,当按下交通繁忙按键时,会触发繁忙状态。计时器的值会比正常模式下缩小。当按下特殊情况的按键时,会触发特殊状态。计时器的值会比正常模式下的值增大。还一个按键是返回正常模式。

原理图见附录:

四、心得体会

通过这次对单片机实验的学习,我们了解的单片机的一些基本的知识以及交通灯的控制方法。在完成实验中遇到问题积极地讨论,感谢小组的每一个成员的付出。

附录:

1、晶振电路

2、复位电路

3、红绿灯及数码管显示电路

4、功能按键电路

实验程序:

#include

#define uchar unsigned char

#define uint unsigned int

sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位sbit EW_LED2=P2^3; //EW_LED2控制位

sbit EW_LED1=P2^2; //EW_LED1控制位

sbit SN_LED2=P2^1;//SN_LED2控制位

sbit SN_LED1=P2^0;//SN_LED1控制位

sbit SN_Yellow=P1^6;//SN黄灯

sbit EW_Yellow=P1^2;//EW黄灯

sbit EW_Red=P1^3;//EW红灯

相关文档
最新文档