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

上传人:b****1 文档编号:15065976 上传时间:2023-06-30 格式:DOCX 页数:20 大小:204.52KB
下载 相关 举报
基于单片机的交通灯控制系统.docx_第1页
第1页 / 共20页
基于单片机的交通灯控制系统.docx_第2页
第2页 / 共20页
基于单片机的交通灯控制系统.docx_第3页
第3页 / 共20页
基于单片机的交通灯控制系统.docx_第4页
第4页 / 共20页
基于单片机的交通灯控制系统.docx_第5页
第5页 / 共20页
基于单片机的交通灯控制系统.docx_第6页
第6页 / 共20页
基于单片机的交通灯控制系统.docx_第7页
第7页 / 共20页
基于单片机的交通灯控制系统.docx_第8页
第8页 / 共20页
基于单片机的交通灯控制系统.docx_第9页
第9页 / 共20页
基于单片机的交通灯控制系统.docx_第10页
第10页 / 共20页
基于单片机的交通灯控制系统.docx_第11页
第11页 / 共20页
基于单片机的交通灯控制系统.docx_第12页
第12页 / 共20页
基于单片机的交通灯控制系统.docx_第13页
第13页 / 共20页
基于单片机的交通灯控制系统.docx_第14页
第14页 / 共20页
基于单片机的交通灯控制系统.docx_第15页
第15页 / 共20页
基于单片机的交通灯控制系统.docx_第16页
第16页 / 共20页
基于单片机的交通灯控制系统.docx_第17页
第17页 / 共20页
基于单片机的交通灯控制系统.docx_第18页
第18页 / 共20页
基于单片机的交通灯控制系统.docx_第19页
第19页 / 共20页
基于单片机的交通灯控制系统.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《基于单片机的交通灯控制系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯控制系统.docx(20页珍藏版)》请在冰点文库上搜索。

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

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

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

一、实验目的

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

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

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

二、实验原理

通过对十字路口的观察,发现红绿灯的控制原理:

首先南北方向右转加直行的绿灯亮起。

此时,东西方向为红灯;当右转加直行绿灯倒计时进入最后5秒,

绿灯切换为黄灯并开始闪烁,东西方向红灯不变;接着南北方向切换为左转灯,东西方向依然是红灯;同样当倒计时进入最后5秒时,黄灯开始闪烁。

东西方向为红灯。

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

三、实验内容及程序

主程序:

voidmain(VOid)

Busy_LED=O;

SPeCiaLLED=O;

ITO=1;//INTO负跳变触发

TMOD=OxOI;//定时器工作于方式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;

WhiIe(Time_SN>=5)

{P仁S[0];/∕SN通行,EW红灯

DiSPIay();}

P仁0x00;

WhiIe(Time_SN>=0){Flag_SN_Yellow=1;

EW_Red=1;/∕SN

//sn开黄灯信号位

黄灯亮,等待左拐信号,EW红灯

DiSPIay();

}

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

Time_SN=SNL;

WhiIe(Time_SN>=5)

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

DiSPIay();}

P仁0x00;

WhiIe(Time_SN>=0){Flag_SN_YeIIow=1;

EW_Red=1;/∕SN

//sn开黄灯信号位

黄灯亮,等待停止信号,EW红灯

DiSPIay();}

 

*********

**********/

 

EW=EW1;

SN=SN1;EWL=EWLI;SNL=SNLI;

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

Time_EW=SN;

Time_SN=EW;

While(Time_EW>=5)

{P仁S[4];//EW通行,SN红灯

DiSPIay();}

P仁0X00;

WhiIe(Time_EW>=0)

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

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

DiSPIay();}

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

Time_EW=EWL;

WhiIe(Time_EW>=5)

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

DiSPIay();}

P仁0X00;

WhiIe(Time_EW>=0)

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

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

DiSPIay();}

 

}

程序框图:

/***********

EW=EW1;SN=SN1;

EWL=EWL1;SNL=SNL1;

}

赋值

*********

*/

 

主程序:

 

定时器TO:

CoUnt==10计时0.5s

定时器中断开始

Count==20计时Is

黄灯标志位

为1

黄灯标志位

为1

黄灯的值进行反转

东西,南北方向时间减1

重装初值

黄灯的值进行反转

 

中断返回

外部中断0:

减按键与加按键流程相同。

唯一不同的是,当东西方向的倒计时值<=40时。

会将东西倒计时的值置为40s,南北置为20s。

除此之外还有三个功能按键,当按下交通繁忙按键时,会触发繁忙状态。

计时器的值会比正常模式下缩小。

当按下特殊情况的按键时,会触发特殊状态。

计时器的值会比正常模式下的值增大。

还一个按键是返回正常模式。

原理图见附录:

四、心得体会

通过这次对单片机实验的学习,我们了解的单片机的一些基本的知识以及交通灯的控制方法。

在完成实验中遇到问题积极地讨论,感谢小组的每一个成员的付出。

附录:

1、晶振电路

2、复位电路

 

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

.P2

I"

1

正常

时间一

繁忙

F25

F2I

I-

!

'■

 

 

实验程序:

#inelude

#defineUCharUnSignedChar

#defineUintUnSignedint

SbitTime_Show_LED2=P2A5;//Time_Show_LED2控制位

SbitTime_Show_LEDI=P2^4;//Time_Show_LED1控制位

SbitEW.LED2=P2^3;〃EW_LED控制位

SbitEW_LEDI=P2^2;〃EW_LED控制U位

SbitSNLED2=P2^1;//SNLED2空制位

SbitSN_LEDI=P2^0;〃SN_LED1空制位

SbitSN_Yellow=PM6;//SN黄灯

SbitEW_Yellow=PM2;//EW黄灯

红灯

红灯

交通特殊指示灯

交通繁忙指示灯

SbitEW_Red=P1^3;//EW

SbitSN_Red=P1^7;//SN

SbitSPeCiaI_LED=P2^6;//

SbitBUSy_LED=P2^7;//

SbitNomor_BUttOn=P3^5;//交通正常按键

SbitBUSy_Btton=P3^6;//交通繁忙按键

SbitSPeCiaI_BttOn=P3^7;//交通特殊按键

SbitAdd_Button=P3^3;//时间加

SbitRedUCeS_Button=P3^4;//时间减bitFlag_SN_Yellow;//SN黄灯标志位

bitFlag_EW_Yellow;//EW黄灯标志位

CharTime_EW;//东西方向倒计时单元

CharTime_SN;//南北方向倒计时单元

UCharEW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式

UCharEW仁60,SN仁40,EWL1=19,SNL1=19;/用于存放修改值的变量

code

UChar

table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~

9段选码

UCharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码

voidDeIay(UChara)

UChari;i=a;while(i--){;}}

voidDiSPIay(VOid){

Charh,l;h=Time_EW/10;I=Time_EW%10;

P0=table[l];

EW_LED2=0;Delay

(2);

EW_LED2=1;

P0=table[h];

EW_LED仁0;Delay

(2);

EW_LED1=1;

h=Time_SN/10;I=Time_SN%10;P0=table[l];

SN_LED2=0;

Delay

(2);

SN_LED2=1;

P0=table[h];

SN_LED1=0;

Delay

(2);

SN_LED1=1;

h=EW1/10;l=EW1%10;

P0=table[l];

Time_Show_LED1=0;

Delay

(2);

Time_Show_LED1=1;

P0=table[h];

Time_Show_LED2=0;

Delay

(2);

Time_Show_LED2=1;

}

外部0中断服务程序

 

VOidEXINT0(void)interrupt0USing1

{

EX0=0;//关中断

if(Add_Button==0)

Delay(5);

if(Add_Button==0)//时间加

{_

EW1+=5;

SN1+=5;

if(EW1>=100)

{EW仁99;SN1=79;

}

}

if(Reduces_BUtton==0)

Delay(5);

if(Reduces_Button==0)//时间减

EW1-=5;

SN1-=5;

if(EW1<=40)

{

EW仁40;

SN1=20;

}

}

if(Nomor_Button==0)

Delay(5);

if(Nomor_BUttOn==0)//测试按键是否按下,按下为正常状态

{

EW仁60;

SN1=40;

EWL仁19;

SNL1=19;

BUSy_LED=0;//关繁忙信号灯

SPeCiaI_LED=0;//关特殊信号灯

}

if(Busy_Btton==0)

Delay(5);

if(Busy_BttOn==0)//测试按键是否按下,按下为繁忙状态

{

EW仁45;

SN1=30;

EWL仁14;

SNL1=14;

SPeCiaI_LED=0;//关特殊信号灯

BUSy_LED=1;//开繁忙信号灯

}

if(SpeCiaLBttOn==0)

Delay(5);

if(Special_BttOn==0)//测试按键是否按下,按下为特殊状态

{

EW仁75;

SN1=55;

EWL仁19;

SNL1=19;

BUSy_LED=0;//关繁忙信号灯

SPeCiaI_LED=1;//开特殊信号灯

}

EXO=I;//开中断}

VOidtimerO(void)interrupt1USing1{

StatiCUCharcount;

TH0=(65536-50000)∕256;

TL0=(65536-50000)%256;count++;

if(count==10)

{

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

}

if(count==20)

{

Time_EW--;

Time_SN--;

if(Flag_SN_Yellow==1)//测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

count=0;

}

}

/*********************

voidmain(VOid)

{

BUSy_LED=0;

SPeCiaI_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(I)

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

Time_EW=EW;

Time_SN=SN;

WhiIe(Time_SN>=5)

{P仁S[0];//SN通行,EW红灯

DiSPIay();}

P仁0x00;

WhiIe(Time_SN>=0)

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

EW红灯

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

DiSPIay();

}

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

Time_SN=SNL;

WhiIe(Time_SN>=5)

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

DiSPIay();}

P仁0x00;

WhiIe(Time_SN>=0)

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

EW红灯

EW_Red=1;//SN黄灯亮,等待停止信号,

DiSPIay();}

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

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

Time_EW=SN;

Time_SN=EW;

WhiIe(Time_EW>=5)

{P仁S[4];//EW通行,SN红灯

DiSPIay();}

P仁0X00;

WhiIe(Time_EW>=0)

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

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

DiSPIay();}

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

Time_EW=EWL;

WhiIe(Time_EW>=5)

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

DiSPIay();}

P仁0X00;

WhiIe(Time_EW>=0)

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

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

DiSPIay();}

EW=EW1;SN=SN1;EWL=EWL1;SNL=SNL1;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2