精华内容
下载资源
问答
  • 2022-01-14 20:50:14

    交通灯

    一、 系统功能分析

    • 交通灯由AT89C52单片机、13个LED灯,4个7SEG—COM数码管,2个按键构成。一组红绿灯由一个数码管和红黄绿的led灯构成,有东西南北四组。

    • 北方和南方的数码管接P2口,西方和东方的数码管接P0口,P3口主要接LED灯。即北方和南方控制显示相同,东方和西方控制相同。

    • 规则指定:红灯亮15秒,黄灯亮3秒,绿灯亮12秒,按下紧急停止按键时,所有的交通灯熄灭,紧急灯(红灯)亮。当按下恢复的按钮时,交通灯开始恢复:开始状态,南北方向绿灯12秒,西北方向红灯15秒。

    二、 系统方案设计(功能框图)

    img

    电路图

    image-20220114204434475

    简要说明

    • 按下紧急停止按键时,所有的交通灯熄灭,紧急灯(红灯)亮。当按下恢复的按钮时,交通灯开始恢复:开始状态,南北方向绿灯12秒,西北方向红灯15秒。
    • 在实现操作的时候感觉,交通灯有点卡,可能是代码问题,可能还需要进一步的优化吧。

    源代码

    红绿灯转换过程主要是标志量来转换

    #include<reg52.h>
    //定义数码管位选择
    #define LSE_choice P1
    
    //急停与恢复
    sbit Key_stop=P3^2;
    sbit Key_continue=P3^3;
    
    //红绿灯
    sbit Led1_g=P3^0;//上下绿灯
    sbit Led1_y=P3^1;//上下黄灯
    sbit Led1_r=P3^6;//上下红灯
    sbit Led2_g=P3^7;//左右绿灯
    sbit Led2_y=P3^4;//黄灯
    sbit Led2_r=P3^5;//红灯
    
    sbit RED_LED=P1^7;//警告灯
    
    //定义按键
    sbit Key_0=P3^2;//
    sbit Key_1=P3^3;
    typedef unsigned char u8;//8指8位,1个字节
    typedef unsigned int u16;//定义关键字;16指16位,2字节
    sbit L0=P1^0;
    sbit L1=P1^1;
    u8 second0=15;//上下起始秒
    u8 second1=12;//左右起始秒
    
    u8 key=0;//键值
    
    //全局标志量
    u8 sign0=0;//上下全局标志
    u8 sign1=2;//左右
    
    u8 sign_0=2;//上下:2表示绿到红,1表示红到绿
    u8 sign_1=1;//左右
    u8 timer0=0;//中断0次数
    u8 timer1=0;//中断1次数
    
    
    u8 code smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    
    void delay(u16 i)//延时函数
    {
        while(i--);
    }
    
    void Statu()//停止和是否继续判断
    {
        if(Key_stop==0)//停止判断
            key=1;
        if(Key_continue==0)//继续
            key=2;
    }
    
    void Get(u8 led11,u8 led12)//数码管显示
    {
        TR0=1;//定时器0开启
        LSE_choice=0xf5;//位选
        led11=0;//上下led
        led12=0;//左右
        P0=smgduan[second1/10];//上下十位数
        P2=smgduan[second0/10];//左右
        delay(100);
        LSE_choice=0xfa;
        P0=smgduan[second1%10];//上下个位数
        P2=smgduan[second0%10];
        delay(100);
    }
    
    void Choice_sign()//标志
    {
        if(second0==0 && sign0==0)//判断上下绿灯时间是否为0
        {
            TR0=0;
            sign0=1;//黄灯
            second0=3;//转黄灯3S
        }
        if(second1==0 && sign1==0)//判断左右时间绿灯时间
        {
            sign1=1;
            second1=3;
        }
        if(second0==0 && sign0==1)//判断上下黄灯
        {
            if(sign_0==2)//判断黄到红
            {
                TR0=0;
                sign0=2;
                second0=15;//红灯15S
                sign_0=1;
            }
            else//等价sign_0=1;判断黄到绿
            {
                TR0=0;
                sign0=0;
                second0=12;//绿灯12S
                sign_0=2;
            }
        }
        if(second1==0 && sign1==1)//判断左右黄灯
        {
            if(sign_1==2)//判断黄到红
            {
                sign1=2;
                second1=15;//红灯15S
                sign_1=1;
            }
            else//等价sign_1=1;判断黄到绿
            {
                sign1=0;
                second1=12;//绿灯12S
                sign_1=2;
            }
        }
        if(second0==0 && sign0==2)//判断上下红灯
        {
            TR0=0;
            sign0=1;//黄灯
            second0=3;//转黄灯3S
        }
        if(second1==0 && sign1==2)//判断左右红灯
        {
            sign1=1;//黄灯
            second1=3;//转黄灯3S
        }
    }
    
    void Display()//显示函数
    {
        if(sign0==0 && sign1==0)//上下绿,左右绿
        {
            Led1_g=0;Led2_g=0;
            Get(Led1_g,Led2_g);
            Led1_g=1;Led2_g=1;
        }
        if(sign0==0 && sign1==1)//上下绿,左右黄
        {
            Led1_g=0;Led2_y=0;
            Get(Led1_g,Led2_y);
            Led1_g=1;Led2_y=1;
        }
        if(sign0==0 && sign1==2)//上下绿,左右红
        {
            Led1_g=0;Led2_r=0;
            Get(Led1_g,Led2_r);
            Led1_g=1;Led2_r=1;
        }
        if(sign0==1 && sign1==0)//上下黄,左右绿
        {
            Led1_y=0;Led2_g=0;
            Get(Led1_y,Led2_g);
            Led1_y=1;Led2_g=1;
        }
        if(sign0==1 && sign1==1)//上下黄,左右黄
        {
            Led1_y=0;Led2_y=0;
            Get(Led1_y,Led2_y);
            Led1_y=1;Led2_y=1;
        }
        if(sign0==1 && sign1==2)//上下黄,左右红
        {
            Led1_y=0;Led2_r=0;
            Get(Led1_y,Led2_r);
            Led1_y=1;Led2_r=1;
        }
        if(sign0==2 && sign1==0)//上下红,左右绿
        {
            Led1_r=0;Led2_g=0;
            Get(Led1_r,Led2_g);
            Led1_r=1;Led2_g=1;
        }
    
        if(sign0==2 && sign1==1)//上下红,左右黄
        {
            Led1_r=0;Led2_y=0;
            Get(Led1_r,Led2_y);
            Led1_r=1;Led2_y=1;
        }
        if(sign0==2 && sign1==2)//上下红,左右红
        {
            Led1_r=0;Led2_r=0;
            Get(Led1_r,Led2_r);
            Led1_r=1;Led2_r=1;
        }
        Choice_sign();
        Statu();
    }
    
    
    void main()
    {
        TMOD=0x01;
        EA=1;
        ET0=1;
        TH0=0xee;//一次5ms
        TL0=0x00;
        TR0=1;
        while(1)
        {
            switch(key)
            {
                case 0:Display();break;
                case 1://全面停止
                {
                    Statu();
                    RED_LED=0;
                    TR0=0;
                    LSE_choice=0x7f;
                    break;
                }
                case 2:
                {
                    ET0=1;
                    TH0=0xee;
                    TL0=0x00;
                    TR0=1;
                    second0=15;//上下起始秒
                    second1=12;//左右起始秒
                    sign0=0;//上下全局标志
                    sign1=2;//左右
                    sign_0=2;
                    sign_1=1;//左右
                    key=0;
                    break;
                }
            }
        }
    }
    
    void Int_T0() interrupt 1
    {
        timer0++;
        if(timer0==200)//判断一秒
        {
            timer0=0;
            second0--;
            second1--;
        }
        TH0=0xee;//一次5ms
        TL0=0x00;
    }
    
    

    资源电路图和代码下载

    更多相关内容
  • 适用于初学嵌入式单片机,设计交通灯的代码及仿真
  • 单片机ppt,可参考使用,欢迎下载
  • 同学们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。有些时候你考虑的和真理就差一点点了,没有坚持下去,别人告诉你后才恍然大悟。这样得到的结论,可以让你学到知识,但是却培养不了你的逻辑思维...
  • 单片机交通灯设计(基于proteus和keil5),内附源代码.hex ,,与.DNS图(在proteus仿真)
  • 利用C51单片机做的一个关于交通灯的设计,其中包含按键中断的扩展,压缩文件内包含代码、Proteus仿真和实验报告。(C语言)
  • 基于51单片机设计的一个红绿灯控制系统,有Proteus仿真电路,C源码,以及设计报告。需要的朋友赶紧下载吧!(声明:此文档中所有内容仅供学习,请勿做他用,如违反导致损失的本人不承担任何责任!)
  • 51单片机交通灯的设计 分析看https://blog.csdn.net/qq_47311204/article/details/122502069
  • 完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯课程设计完美51单片机交通灯...
  • 基于AT89C51单片机交通灯,带数码管倒计时功能;带Proteus仿真图。代码内有详细注释,适合新手学习。
  • 包含交通灯仿真图与仿真程序,pcb封装,元件清单,设计论文,实物图,制作详解,芯片资料等等
  • 51单片机交通灯实训

    2020-10-19 14:48:40
    基于51单片机的实训代码,已经经过测试可以直接使用,如果有需要硬件电路以及对代码有疑问可留言或联系博主
  • 摘要:本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮...
  • 能实现51单片机红黄绿led及数码管计时功能的交通灯系统程序。
  • 经过几天的整理,终于将网络上得到交通灯仿真文件,用汇编自己编写了一个程序,实验结果完全符合本人的思路,实验成功。程序比较长,估计还会用更好的办法重新写。
  • 51单片机交通灯.zip

    2019-12-04 19:25:01
    这是51单片机做的仿真交通灯,总共16个灯,每一个方向4个灯,分别为红灯绿灯黄灯和转向灯。代码简易逻辑清晰,供初学者参考。有什么问题评论区评论,共同进步,共同学习。
  • 51单片机 交通灯

    2018-04-11 20:04:56
    学校实训项目,51单片控制交通灯,有需要的可以下载下来参考。
  • 模拟十字路口交通灯,设有紧急按钮,当有紧急情况能改变红绿灯状态。(如救护车需优先通过时)
  • 汇编单片机交通灯 信息与电气工程学院 1403计算机(CDIO) 基于单片机交通灯设计 项目报告 (2015 /2016 学年第 二 学期) 软件总体设计 姓名: ...... 学号: …………. 成绩: 2016年6月 汇编单片机交通灯全文共18页...
  • 单片机 交通灯单片机 交通灯
  • 单片机交通灯代码

    2018-07-07 15:43:22
    单片机课程设计,交通灯,这里是代码,剩下的用软件自己仿真
  • 单片机交通灯

    2018-07-23 16:25:11
    交通信号分布于东南西北,每个路口均有三个。南北方向绿灯和东西方向的绿灯不能同时亮;如果同时亮,则应自动立即关闭信号系统,并立即发出报警信号。系统工作后,首先南北红灯亮并维持30s;与此同时,东西绿灯...
  • 本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及...
  • 单片机交通灯c程序

    2018-12-25 13:29:07
    单片机型号是stc,89c51类的,内有夜间模式和紧急通行模式等,可自由设置红路灯闪烁时间
  • 交通灯单片机交通灯课程设计报告.pdf交通灯单片机交通灯课程设计报告.pdf交通灯单片机交通灯课程设计报告.pdf交通灯单片机交通灯课程设计报告.pdf交通灯单片机交通灯课程设计报告.pdf交通灯单片机交通灯课程设计报告...
  • 单片机交通灯控制系统,含报告
  • 单片机交通灯设计单片机交通灯设计
  • 单片机交通灯翻译单片机交通灯翻译
  • 单片机交通灯程序单片机交通灯程序
  • 单片机交通灯报告单片机交通灯报告

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,658
精华内容 2,263
关键字:

单片机交通灯

友情链接: b.zip