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

发布时间:2023-02-01  

要求

(1)利用51单片机设计一个交通灯控制系统,来实现行人与车流的分流的目的。该系统主要应用在十字路口,纵向为主干道,横向为支干道;

(2)主、支干道交替通行,两个干道上的交通灯工作方式同时进行,主干道每次绿灯放行15秒,支干道每次放行10秒,放行时间可通过按键更改;

(3)每次绿灯变红之前,黄灯先闪烁3秒,此时,另一干道上仍保持红灯;

(4)通过按键实现对十字路口交通管制功能;

(5)给出整个系统的结构图、软硬件流程图;

概述

东西主干道和南北支干道各由一组三色交通灯来控制,分别是主干道方向的红、黄、绿以及支干道方向的红、黄、绿。

逻辑分析可知,当主干道为绿灯通行时,支干道必须为红灯禁行;绿灯结束后,主干道进入黄灯闪烁等待状态,支干道红灯;黄灯结束后,主干道变为红灯禁行,支干道变为绿灯通行;支干道绿灯结束后,支干道进入黄灯闪烁等待状态,主干道红灯,如此循环。

从这个过程中可以看出,交通灯控制共分4个状态,分别为:S1状态,主干道方向为绿灯,支干道方向为红灯;S2状态,主干道方向为黄灯闪烁,支干道红灯;S3状态,主干道方向为红灯,支干道方向为绿灯;S4状态,支干道方向为黄灯闪烁,主干道红灯。这四个状态不断循环。由此我们可以列出4个状态的列表和做出4个状态的流程图。

系统设置有4个按键,分别为设置键,加键,减键和交通管制键。设置键是对设置的启动和确认,加键和减键是对通行时间做调整,交通管制键是对红绿灯系统进行强制设置。

当系统上电或手动复位之后,默认模式下会按照断电前程序里记录的参数运行。若此时设置键按下,则进入通行时间设置状态,数码管上显示原本记录的时间并闪烁,可通过加键或减键键对东西、南北干道等待时间进行修改,修改完成后,按下设置键将新参数保存。

交通管制键,用于对十字路口进行交通管制。有五种模式:东西、南北干道红灯;东西红灯,南北绿灯;东西绿灯,南北红灯;东西绿灯,南北绿灯;东西黄灯,南北黄灯。

仿真电路图

原理图及PCB

洞洞板实物图

仿真结果分析

在交通灯实物中,是竖着操作,纵向为南北;在仿真电路图中,从正视看纵向为东西,从左边斜着看和实物是一样的。因此,实物和仿真是一一对应的!

加载“基于毕业51单片机的交通灯设计.hex”文件到单片机,点击运行,交通灯开始工作(二极管显示红、黄、绿三色灯,LED显示倒计时)。

在程序里我们设置,东西主干道绿灯通行时间为15S,南北支干道通行时间为10S。系统自动进入状态S1:东西主干道绿灯亮,南北支干道红灯亮。

可以看出,东西主干道绿灯通行时间为15S,南北支干道红灯等待时间为15S。东西、南北干道LED倒计时12S后,系统进入S2状态:东西主干道黄灯闪烁3S,南北支干道红灯。

3S后,系统进入S3状态:东西主干道红灯,南北绿干道绿灯,通行时间为10S。仿真结果如下所示。

7S后,系统进入S4状态:南北干道黄灯闪烁3S,东西干道仍为红灯。然后进入S1状态,不断循环。

按下“设置”键后,系统进入设置模式,通过“加”键和“减”键设置东西干道绿灯通行时间。再次按下“设置”键,可以设置南北干道通行时间。通行时间设置完成后,再次按下“设置”键,系统回到运行状态。

从上图看出,东西主干道通行时间由原来的15S设置为16S。可以通过“交通管制”键,对交通灯系统进行管制。

部分C代码

u8 Key_Scan()

{    

    static u8 key_up=1;//按键按松开标志

    if(key_up&&(Key1==0||Key2==0||Key3==0||Key4==0))

    {

        delay_1ms(10);//去抖动 

        key_up=0;

        if(Key1==0)         return 1;

        else if(Key2==0)return 2;

        else if(Key3==0)return 3;

        else if(Key4==0)return 4;

    }

    else if(Key1==1&&Key2==1&&Key3==1&&Key4==1)

        key_up=1;       

    return 0;// 无按键按下

}



uchar flag_s;

uchar menu_1;//纵横加减标示



/********************设置函数*****************/

void key_with()

{

    if(key_can == 4)   //交通管制按键

    {

        flag_jdgz ++;

        if(flag_jdgz > 5)

            flag_jdgz = 0;  

        if(flag_jdgz == 1)   //  全部亮红灯 

        {

            dx_red    = 0;  //亮 

            nb_red    = 0;  //亮 

            dx_green  = 1;  //灭

            dx_yellow = 1;  //灭

            nb_green  = 1;  //灭

            nb_yellow = 1;  //灭         

        }

        if(flag_jdgz == 2)   //  东西绿灯  南北红灯

        {

            dx_red    = 0;  //亮 

            nb_green  = 0;  //亮

            dx_green  = 1;  //灭

            dx_yellow = 1;  //灭

            nb_red    = 1;  //灭 

            nb_yellow = 1;  //灭         

        }

        if(flag_jdgz == 3)   //  南北绿灯  东西红灯

        {

            dx_green  = 0;  //亮

            nb_red    = 0;  //亮 

            dx_red    = 1;  //灭 

            dx_yellow = 1;  //灭

            nb_green  = 1;  //灭

            nb_yellow = 1;  //灭         

        }

        if(flag_jdgz == 4)   //  南北绿灯  东西绿灯

        {

            dx_green  = 0;  //亮

            nb_green  = 0;  //亮

            dx_red    = 1;  //灭 

            dx_yellow = 1;  //灭

            nb_red    = 1;  //灭 

            nb_yellow = 1;  //灭         

        }

        if(flag_jdgz == 5)   //  南北黄灯  东西黄灯

        {

            dx_red    = 1;  //灭 

            dx_green  = 1;  //灭

            nb_red    = 1;  //灭 

            nb_green  = 1;  //灭

            nb_yellow = 0;  //亮         

            dx_yellow = 0;  //亮

        }

    }

    if(key_can == 1)      //设置键

    {

        menu_1 ++;

        if(menu_1 >= 3)

        {

            menu_1  = 0;

        }

    }


    if(menu_1 == 1)    //设置东西的时间

    {

        if(key_can == 2)

        {

            dx_time ++ ;        //加1

            if(dx_time > 99)//时间最大值为99s

                dx_time = 99;

        }

        if(key_can == 3)

        {

            dx_time -- ;        //减1

            if(dx_time <= 5)//时间最小值为5s

                dx_time = 5;

        }

        dis_smg[0] = DisplayOther[2] ;  //显示为B

        dis_smg[1] = DisplayOther[2] ;  //显示为B

        dis_smg[2] = smg_du[(dx_time-1) % 10] ;     //显示东西设置的时候

        dis_smg[3] = smg_du[(dx_time-1) / 10] ; 

    }


    if(menu_1 == 2)    //设置南北的时间

    {

        if(key_can == 2)

        {

            nb_time ++ ;        //加1

            if(nb_time > 99)    //时间最大值为99s

                nb_time = 99;

        }

        if(key_can == 3)

        {

            nb_time -- ;        //减1

            if(nb_time <= 5)//时间最小值为5s

                nb_time = 5;

        }

        dis_smg[0] = smg_du[(nb_time-1) % 10] ; //显示为A

        dis_smg[1] = smg_du[(nb_time-1) / 10] ; //显示为A

        dis_smg[2] = DisplayOther[2] ;      //显示东西设置的时候

        dis_smg[3] = DisplayOther[2] ;  

    }   


}


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

相关文章

    内存数据; 5)PLC设置数据。 2.编写一个梯形图程序 下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→红灯和和黄灯同时→只有绿灯→只有黄灯。 编写......
    )IO表; 4)PLC内存数据; 5)PLC设置数据。 2.编写一个梯形图程序 下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→红灯和和黄灯同时→只有......
    无线手持智能交通灯控制系统;城市道路交错分布,车辆穿梳,行人熙攘。那么靠什么来实现这井然秩序呢?靠的是交通信号灯的自动指挥系统。交通灯是城市交通的重要指挥系统。交通信号灯作为管制交通流量、提高......
    基于AT89C52的多功能交通灯控制系统设计与仿真实现;本文介绍的交通灯控制系统与目前国内一般的交通灯控制系统相比较,具有一定的优势,具体体现在以下几方面: 1)控制参数可以灵活调整。目前,城市......
    51单片机上实现的交通灯程序;  这是我前几天无聊自己写的交通灯程序,在51单片机上实现的。基本的定时的交通灯转换是实现了,根据时间来改变交通灯的变换。可以下载下来看看的,电路图和原程序都有,代码......
    交通信号灯系统51单片机设计;要求 (1)利用51单片机设计一个交通灯控制系统,来实现行人与车流的分流的目的。该系统主要应用在十字路口,纵向为主干道,横向为支干道; (2)主、支干道交替通行,两个干道上的交通灯......
    基于实时操作系统RTX51和AT89C52单片机实现智能交通灯的设计;介绍一种基于车流量变化动态调节时间的智能交通灯的设计方法;在进行流量统计的同时,对违章情况进行监测;根据......
    AT89C52单片机为控制器的多功能交通灯控制系统;汽车数量越来越多,而现在的红绿灯处的交通灯模式采用的是定时控制,由于车流量是随时变化的,当此时没有车通过,而相......
    求一种STM32单片机交通灯控制系统设计方案;一、功能简介 本项目使用Proteus8.12仿真STM32单片机控制器,使用数码管、按键、交通信号灯模块等。 系统运行后,交通灯系统开始运行,数码......
    AT89C52单片机智能交通灯的设计;引言 随着城市汽车保有量的越来越多,城市的交通拥挤问题正逐渐引起人们的注意。交通灯是交管部分管理城市交通的重要工具。目前绝大部分交通灯其时间都是设定好的,不管......

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

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

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

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

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

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

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