基于单片机的交通灯控制系统方案Word格式文档下载.docx

上传人:b****6 文档编号:19124875 上传时间:2023-01-04 格式:DOCX 页数:18 大小:177.32KB
下载 相关 举报
基于单片机的交通灯控制系统方案Word格式文档下载.docx_第1页
第1页 / 共18页
基于单片机的交通灯控制系统方案Word格式文档下载.docx_第2页
第2页 / 共18页
基于单片机的交通灯控制系统方案Word格式文档下载.docx_第3页
第3页 / 共18页
基于单片机的交通灯控制系统方案Word格式文档下载.docx_第4页
第4页 / 共18页
基于单片机的交通灯控制系统方案Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于单片机的交通灯控制系统方案Word格式文档下载.docx

《基于单片机的交通灯控制系统方案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯控制系统方案Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

基于单片机的交通灯控制系统方案Word格式文档下载.docx

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;

=0)

{Flag_SN_Yellow=1;

//SN开黄灯信号位

EW_Red=1;

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

Display();

}

Flag_SN_Yellow=0;

//SN关黄灯显示信号

Time_SN=SNL;

{P1=S[2];

//SN左拐绿灯亮,EW红灯

Display();

P1=0x00;

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

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

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

Flag_SN_Yellow=0;

Time_EW=SN;

Time_SN=EW;

while(Time_EW>

{P1=S[4];

//EW通行,SN红灯

P1=0X00;

while(Time_EW>

{Flag_EW_Yellow=1;

//EW开黄灯信号位

SN_Red=1;

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

Flag_EW_Yellow=0;

Time_EW=EWL;

{P1=S[6];

//EW左拐绿灯亮,SN红灯

//EN开黄灯信号位

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

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

EW=EW1;

}

}

程序框图:

 

定时器T0:

外部中断0:

东西,南北计时器加5s

N

结束

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

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

=40时。

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

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

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

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

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

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

原理图见附录:

四、心得体会

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

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

附录:

1、晶振电路

2、复位电路

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

4、功能按键电路

实验程序:

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitTime_Show_LED2=P2^5;

//Time_Show_LED2控制位

sbitTime_Show_LED1=P2^4;

//Time_Show_LED1控制位

sbitEW_LED2=P2^3;

//EW_LED2控制位

sbitEW_LED1=P2^2;

//EW_LED1控制位

sbitSN_LED2=P2^1;

//SN_LED2控制位

sbitSN_LED1=P2^0;

//SN_LED1控制位

sbitSN_Yellow=P1^6;

//SN黄灯

sbitEW_Yellow=P1^2;

//EW黄灯

sbitEW_Red=P1^3;

//EW红灯

sbitSN_Red=P1^7;

//SN红灯

sbitSpecial_LED=P2^6;

//交通特殊指示灯

sbitBusy_LED=P2^7;

//交通繁忙指示灯

sbitNomor_Button=P3^5;

//交通正常按键

sbitBusy_Btton=P3^6;

//交通繁忙按键

sbitSpecial_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;

//程序初始化赋值,正常模式

ucharEW1=60,SN1=40,EWL1=19,SNL1=19;

//用于存放修改值的变量

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//1~~~~9段选码

ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};

//交通信号灯控制代码

/**********************延时子程序************************/

voidDelay(uchara)

{

uchari;

i=a;

while(i--){;

/*****************显示子函数**************************/

voidDisplay(void)

charh,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=0;

Delay

(2);

EW_LED2=1;

P0=table[h];

EW_LED1=0;

EW_LED1=1;

h=Time_SN/10;

l=Time_SN%10;

SN_LED2=0;

SN_LED2=1;

SN_LED1=0;

SN_LED1=1;

h=EW1/10;

l=EW1%10;

Time_Show_LED1=0;

Time_Show_LED1=1;

P0=table[h];

Time_Show_LED2=0;

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)

{

EW1=99;

SN1=79;

if(Reduces_Button==0)

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

EW1-=5;

SN1-=5;

if(EW1<

=40)

EW1=40;

SN1=20;

}

if(Nomor_Button==0)

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

EW1=60;

SN1=40;

EWL1=19;

SNL1=19;

Busy_LED=0;

//关繁忙信号灯

Special_LED=0;

//关特殊信号灯

if(Busy_Btton==0)

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

EW1=45;

SN1=30;

EWL1=14;

SNL1=14;

Special_LED=0;

Busy_LED=1;

//开繁忙信号灯

if(Special_Btton==0)

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

EW1=75;

SN1=55;

Special_LED=1;

//开特殊信号灯

}

EX0=1;

//开中断

/**********************T0中断服务程序*******************/

voidtimer0(void)interrupt1using1

{

staticucharcount;

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)//测试南北黄灯标志位

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

count=0;

/*********************主程序开始**********************/

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1