基于51单片机的交通信号灯系统设计

发布时间:2023-02-09  

功能:

十字路口交通灯控制程序: 正常时,EW方向计时60s,SN方向计时40s 若按时间加按键(Add_Button)按钮,EW、SN方向各加5s,不可大于99s,79s 若按时间减按键(Reduces_Button)按键,EW、SN方向各减5s,不可小于40s,20s 若按EW方向强制通行(QZ_EW_Btton)按钮,EW方向强制通行,SN方向禁止通行 若按SN方向强制通行(QZ_SN_Btton)按钮,SN方向强制通行,EW方向禁止通行。


程序运行图:

仿真原理图:


部分程序:

/ #define TRAFFIC_GLOBAL 1

#include "TRAFFIC.H"

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

* 函数名称:延时子程序

* 功 能:延时,给LED显示的延时时间

* 入口参数:时间参数

* 出口参数:无

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

void Delay(uchar a)

{

uchar i;

i=a;

while(i--){;}

}



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

* 函数名称:显示子函数

* 功 能:EW方向,SN方向主干道数码管显示驱动

* 入口参数:无

* 出口参数:无

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

void Display(void)

{

char h,l;

h=Time_EW/10; //EW方向计时的十位数

l=Time_EW%10; //EW方向计时的个位数

P0=table[l]; //显示EW计时时间的低位

EW_LED2=1;

Delay(2);

EW_LED2=0;

P0=table[h]; //显示EW计时时间的高位

EW_LED1=1;

Delay(2);

EW_LED1=0;


h=Time_SN/10; //SN方向计时的十位数

l=Time_SN%10; //SN方向计时的个位数

P0=table[l]; //显示SN计时时间的低位

SN_LED2=1;

Delay(2);

SN_LED2=0;

P0=table[h]; //显示SN计时时间的高位

SN_LED1=1;

Delay(2);

SN_LED1=0;


h= EW1/10; //直行时间的十位

l= EW1%10; //直行时间的个位

P0=table[l]; //时间的个位显示

Time_Show_LED1=1;

Delay(2);

Time_Show_LED1=0;

P0=table[h]; //时间的十位显示

Time_Show_LED2=1;

Delay(2);

Time_Show_LED2=0;

}



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

* 函数名称:外部0中断服务程序

* 功 能:中断,检测按钮的类别,执行相应的操作;

若Add_Button==0,通行时间加5s ;

若Reduces_Button==0,通行时间减5s ;

若Busy_Btton==0,开繁忙信号灯,关特殊信号灯,通行时间45s,30s;

若Add_Button==0,关繁忙信号灯,开特殊信号灯,通行时间75s,55s;

* 入口参数:无

* 出口参数:无

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

void EXINT0(void) interrupt 0 using 0

{

EA = 0; //关中断

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

{

EW1+=5; //通行时间加5s

SN1+=5;

if(EW1>=100) //通行时间不得大于100s,80s

{

EW1=99;

SN1=79;

}

}

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

{

EW1-=5; //通行时间减5s

SN1-=5;

if(EW1<=40) //通行时间不得小于40s,20s

{

EW1=40;

SN1=20;

}

}

EA = 1; //开中断

}


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

* 函数名称:外部中断1

* 功 能:中断,当遇到紧急情况,需要人工控制时,强制直行的函数处理

若QZ_EW_Btton按下时,EW方向绿灯亮,SN方向红灯亮 ,并点亮QZ_EW_LED指示灯

若QZ_SN_Btton按下时,EW方向红灯亮,SN方向绿灯亮 ,并点亮QZ_SN_LED指示灯

* 入口参数:无

* 出口参数:无

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

void EXINT1(void) interrupt 2 using 2

{

EA = 0;


if(QZ_EW_Btton==0) //EW方向强制通行按键是否按下

{

QZ_EW = ~QZ_EW; //

QZ_SN = 0;

if(QZ_EW)

{QZ_EW_LED = 1;

QZ_SN_LED = 0;}

else QZ_EW_LED = 0;

}

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

{

QZ_SN = ~QZ_SN;

QZ_EW = 0;

if(QZ_SN)

{QZ_SN_LED = 1;

QZ_EW_LED = 0;}

else

QZ_SN_LED = 0;

}

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

* 函数名称:main()

* 功 能:主函数

* 入口参数:无

* 出口参数:无

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

void main(void)


{

QZ_EW_LED = 0;

QZ_SN_LED = 0;

QZ_EW = 0;

QZ_SN = 0;


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>