0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STC89C52单片机的智能交通灯设计

精通单片机与嵌入式 来源:精通单片机与嵌入式 2023-09-04 09:52 次阅读

功能

1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机

2、数码管倒计时显示时间。

3、东西和南北方向各有两个数码管,分别显示时间,东西和南北的时间是不一样的哦,要相差黄灯的时间才是正确的。

4、可以分别设置主干道和支干道的通行时间。

5、有紧急模式,可以特种车辆优先通行或交通事故应急处理。

操作说明

按键依次功能:黄灯长亮(深夜模式)、红灯长亮(禁行)、确定调时时间、时间加、时间减、切换调时方向(东西和南北均可以分别设置通行时间)。单独的是复位按键。

参考论文

206cf92a-4a5b-11ee-97a6-92fbcf53809c.png

原理图

20ad5326-4a5b-11ee-97a6-92fbcf53809c.png

程序源代码

//主程序
void main()
{
  TMOD=0X11;             //定时器设置
  TH1=0X3C;    
  TL1=0XB0;
  TH0=0X3C;          //定时器0置初值 0.05S
  TL0=0XB0;
  EA=1;            //开总中断
  ET0=1;            //定时器0中断开启
  ET1=1;             //定时器1中断开启
  TR0=1;            //启动定时0
  TR1=0;               //关闭定时1
    logo();            //开机初始化
  P2=0Xc3;          // 开始默认状态,东西绿灯,南北黄灯   
    sec_nb=sec_dx+5;       //默认南北通行时间比东西多5秒
  while(1)            //主循环
  {   
    key();           //调用按键扫描程序
    display();         //调用显示程序
  }  
}
//函数的定义部分
void key(void)  //按键扫描子程序
{   
  if(k1!=1)              //当K1(时间加)按下时
  {
    display();               //调用显示,用于延时消抖
    if(k1!=1)              //如果确定按下
    {
        TR0=0;                 //关定时器  
      shanruo=0;          //闪烁标志位关
      P2=0x00;          //灭显示
      TR1=0;              //启动定时1
      if(set==0)          //设置键按下
        set_timedx++;       //南北加1S
      else
        set_timenb++;        //东西加1S
      if(set_timenb==100)
        set_timenb=1;
      if(  set_timedx==100)
        set_timedx=1;       //加到100置1
      sec_nb=set_timenb ;     //设置的数值赋给东西南北
      sec_dx=set_timedx;      
        do
       { 
        display();         //调用显示,用于延时
      }
      while(k1!=1);       //等待按键释放
    }
  }


  if(k2!=1)              //当K2(时间减)按键按下时
  {    
    display();               //调用显示,用于延时消抖  
    if(k2!=1)            //如果确定按下
    {  
       TR0=0;                 //关定时器0  
      shanruo=0;          //闪烁标志位关
      P2=0x00;          //灭显示
      TR1=0;            //关定时器1  
      if(set==0)
        set_timedx--;        //南北减1S
      else
        set_timenb--;        //东西减1S
      if(set_timenb==0)
        set_timenb=99;  
      if(  set_timedx==0 )
        set_timedx=99;       //减到1重置99
      sec_nb=set_timenb ;       //设置的数值赋给东西南北
      sec_dx=set_timedx;
        do  
        { 
        display();           //调用显示,用于延时
      }
      while(k2!=1);         //等待按键释放
    }
  }


  if(k3!=1)              //当K3(确认)键按下时
  {  
    display();               //调用显示,用于延时消抖
    if(k3!=1)            //如果确定按下
    {
      TR0=1;              //启动定时器0
      sec_nb=set_timenb;        //从中断回复,仍显示设置过的数值
      sec_dx=set_timedx;        //显示设置过的时间
      TR1=0;              //关定时器1  
      if(set==0)            //时间倒时到0时
      { 
        P2=0X00;           //灭显示
        Green_dx=1;            //东西绿灯亮
        Red_nb=1;          //南北红灯亮
        sec_nb=sec_dx+5;       //回到初值
      }
      else 
      { 
        P2=0x00;          //南北绿灯,东西红灯
        Green_nb=1;
        Red_dx=1;
        sec_dx=sec_nb+5; 
      }
    }
  }


  if(k4!=1)              //当K4(切换)键按下
    {
    display();               //调用显示,用于延时消抖
    if(k4!=1)            //如果确定按下
    {  
       TR0=0;            //关定时器0  
      set=!set;          //取反set标志位,以切换调节方向
      TR1=0;            //关定时器1
      dx_nb=set;
      do
      {
        display();          //调用显示,用于延时
      }        
      while(k4!=1);        //等待按键释放
    }
  }  


  if(k5!=1)              //当K5(禁止)键按下时
  {
       display();               //调用显示,用于延时消抖
       if(k5!=1)            //如果确定按下
       {   
        TR0=0;            //关定时器
      P2=0x00;          //灭显示
      Red_dx=1;
      Red_nb=1;          //全部置红灯
      TR1=0;
      sec_dx=00;          //四个方向的时间都为00
      sec_nb=00;
      do
      {
        display();         //调用显示,用于延时
      }  
      while(k5!=1);      //等待按键释放  
       }
  }
  if(k6!=1)              //当K6(夜间模式)按下 
  {
       display();               //调用显示,用于延时消抖 
       if(k6!=1)            //如果确定按下
       {   
        TR0=0;            //关定时器
      P2=0x00;
      TR1=1;
      sec_dx=00;          //四个方向的时间都为00
      sec_nb=00;
      do
      {
        display();         //调用显示,用于延时
      }  
      while(k6!=1);      //等待按键释放  
       }
  }
}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6034

    文章

    44531

    浏览量

    633864
  • STC89C52
    +关注

    关注

    41

    文章

    330

    浏览量

    82024
  • 数码管
    +关注

    关注

    32

    文章

    1879

    浏览量

    91027
  • 智能交通灯
    +关注

    关注

    0

    文章

    15

    浏览量

    9574

原文标题:【毕业设计004】-基于STC89C52的智能交通灯(程序、原理图、视频讲解、操作说明、参考lunwen)

文章出处:【微信号:精通单片机与嵌入式,微信公众号:精通单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎样去设计基于STC89C52单片机的霓虹

    基于STC89C52单片机的霓虹1、设计要求使用PWM驱动8个LED 人眼不能观察到灯光全灭 灯光要有动画效果2、设计概述 本实验所用芯片为ST
    发表于 12-02 07:03

    基于单片机STC89C52的摇摇棒

    基于单片机STC89C52的摇摇棒设计,有电路图和源程序
    发表于 11-23 14:38 28次下载

    基于STC89C52单片机交通灯控制系统设计

    基于STC89C52单片机交通灯控制系统设计 论文类
    发表于 12-14 15:44 168次下载

    单片机STC89C52程序

    单片机STC89C52源程序。
    发表于 01-11 18:16 112次下载

    基于STC89C52单片机智能交通灯控系统设计

    基于STC89C52单片机智能交通灯控系统设计
    发表于 02-22 11:37 107次下载

    基于STC89C52单片机智能窗帘控制系统

    基于STC89C52单片机智能窗帘控制,但没有程序图和连线图。
    发表于 04-28 18:02 31次下载

    基于STC89C52单片机智能循迹小车设计

    基于STC89C52单片机智能循迹小车设计,做毕业设计的人很有用。
    发表于 05-09 10:59 88次下载

    STC89C52单片机介绍

    STC89C52单片机介绍。
    发表于 05-20 13:55 257次下载

    基于单片机STC89c52 GSM的智能家居报警系统设计

    基于单片机STC89c52 GSM的智能家居报警系统设计,分享给大家。
    发表于 05-05 08:40 81次下载

    基于STC89C52单片机智能小车设计

    基于STC89C52单片机智能小车设计方法介绍。
    发表于 05-28 10:57 103次下载

    基于单片机STC89C52控制的智能小车简介

    基于单片机STC89C52控制的智能小车简介(单片机原理图)-该文档为基于单片机STC89C52
    发表于 07-22 14:21 68次下载
    基于<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52</b>控制的<b class='flag-5'>智能</b>小车简介

    STC89C52单片机

    STC89C52单片机STC89C52STC89C52看到涛哥这篇文章了,纪念一下还在搞嵌入式的我们!硬件实物图实物抽象化的图为:这个STC89C52名字是什么意思呢?
    发表于 11-23 17:06 111次下载
    <b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>

    STC89C52_51单片机_例程4_交通灯_C语言代码

    STC89C52_51单片机_例程3_交通灯_C语言代码代码及文件下载链接审核通过后挂上交通灯需要设置一个flag标志位,当到达1s时调用d
    发表于 11-23 17:06 22次下载
    <b class='flag-5'>STC89C52</b>_51<b class='flag-5'>单片机</b>_例程4_<b class='flag-5'>交通灯</b>_<b class='flag-5'>C</b>语言代码

    基于STC89C52单片机的霓虹

    基于STC89C52单片机的霓虹1、设计要求 使用PWM驱动8个LED 人眼不能观察到灯光全灭 灯光要有动画效果2、设计概述 本实验所用芯片为
    发表于 11-23 17:21 29次下载
    基于<b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>的霓虹<b class='flag-5'>灯</b>

    STC89C52单片机器件手册

    STC89C52系列单片机的内部结构框图如下图所示。STC89C52单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、I/
    发表于 09-05 10:41 8次下载