AT89S52交通灯程序

发布者:快乐飞翔最新更新时间:2016-10-20 来源: eefocus关键字:AT89S52  交通灯 手机看文章 扫描二维码
随时随地手机看文章
课程设计题目:交通灯   

课程设计任务:利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并且用LED数码管显示时间。

要求:(1)能够调节定时时间:(2)能够实现全红灯的禁止通行状态和全绿灯的任意通行状态。

#include"reg51.h"
#define uchar unsigned char
   sbit key4= P3^3;
   sbit key1= P3^0;
   sbit key2= P3^1;
   sbit key3= P3^2;
  uchar  flag=1;  
uchar display_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar time[]={0,0,0,0};
uchar time1[]={30,30};
void delay(int n)  //延时
 {
  while(n--);
 }
void display()      //显示
{
  uchar i,k;
  k=0x80;
  for(i=0;i<4;i++)
     {
      P2=0;
      P0=display_code[time[i]/10];
      P2=k;
      k=k>>1;
      delay(50);

      P2=0;
      P0=display_code[time[i]%10];
      P2=k;
      k=k>>1;
      delay(50);
     }
   P2=0;
}

void display1()    //time1[0]  显示
{
  uchar i,k;
  k=0x80;
  for(i=0;i<4;i++)
     {
      P2=0;
      P0=display_code[time1[0]/10];
      P2=k;
      k=k>>1;
     //delay(50);

      P2=0;
      P0=display_code[time1[0]%10];
      P2=k;
      k=k>>1;
     //delay(50);
     }
   P2=0;
}
void display2()   ///time1[1]  显示
{
  uchar i,k;
  k=0x80;
  for(i=0;i<4;i++)
     {
      P2=0;
      P0=display_code[time1[1]/10];
      P2=k;
      k=k>>1;
     // delay(50);

      P2=0;
      P0=display_code[time1[1]%10];
      P2=k;
      k=k>>1;
     // delay(50);
     }
   P2=0;
}
////////////////////////////////////////////////////////////////////////////////
void calc()   // 计算
 {
  uchar j;
  
  for(time[3]=time1[0];time[3]>0;time[3]--)
   {
    if(time[3]>3)
     {
       P1=0xF1;
     }
    if(time[3]<4)
     {
       P1=0x5F;
     }
   for(j=0;j<250;j++)
     {
      //display();
         key3=1;
         if(key3==0)
         {
           delay(100);
         
          
            while(key3==0)
             { 
              display1();
                key1=1;
              if(key1==0)
                { 
                delay(100);
              
              
                if(key1==0)
                  {
                  time1[0]++;
                  if(time1[0]>99)
                     time1[0]=0;
                  while(key1==0);
                  }
                 }
               
           
///////////////////////
                    
               key2=1;
             if(key2==0)
             { 
              delay(100);
           
             if(key2==0)
              {
                if(time1[0]==0)time1[0]=99;
                else 
                time1[0]--;
                 while(key2==0);
                }
               }
             }    // while
           }///// 1 i
        
       display();
     }
   }
///////////////////
  if(time[3]==0)
   {
    for(time[2]=time1[1];time[2]>0;time[2]--)
     {
      if(time[2]>3)
       {
        P1=0x7F;
       }
      if(time[2]<4)
       {
         P1=0x5F;
       }
  
    for(j=0;j<250;j++)  //for
     {
     //display();
         key3=1;
         if(key3==0)
         {
           delay(100);
         
          
            while(key3==0)
             { 
              display2();
                key1=1;
              if(key1==0)
                { 
                delay(100);
              
              
                if(key1==0)
                  {
                  time1[1]++;
                  if(time1[1]>99)
                     time1[1]=0;
                  while(key1==0);
                  }
                 }
               
           
///////////////////////
                    
               key2=1;
             if(key2==0)
             { 
              delay(100);
           
             if(key2==0)
              {
                if(time1[1]==0)time1[1]=99;
                else 
                time1[1]--;
                 while(key2==0);
                }
               }
             }    
           }
        
      display();
      }
     }
    }
}
void light()

 P2=0x00;//数码管全亮
 P1=0xF1;//全红灯
}
 
void light1()

 P2=0x00;//数码管全亮
 P1=0x5F;//全绿灯
}   
 
  
 

void main()    
  {
  IT0=1; //外部中断0
  ET0=1;
  EX0=1;
  TR0=1;
  EA=1;
 //flag=1;
   while(1)
    {
     switch(flag)
    {
     case 1: calc();break;
     case 2: light();break;
     case 3: light1();break;
    }
    }
  }
void int0() interrupt 0
{
 delay(10);
 if(key4==0)
  { 
    delay(10);
       if(key4==0)
        {
         flag++;
         if(flag>3)flag=1;  
         }
  } 
}

关键字:AT89S52  交通灯 引用地址:AT89S52交通灯程序

上一篇:LCD显示的c51单片机频率计
下一篇:C51串口通讯定义

推荐阅读最新更新时间:2024-03-16 15:16

基于51的太阳能LED路灯的设计与实现
  随着科学技术的迅速发展,世界能源危机日益严重,利用常规能源已不能适应世界经济快速增长的需要,开发和利用新能源越来越引起各国的重视。太阳能作为一种 取之不尽,用之不竭 安全可靠、无噪声、无污染和可再生的能源越来越受到重视。   加之现今光伏技术的逐渐成熟,利用光伏发电成为解决能源问题的一大途经。随着可持续发展的不断深入,人们在积极开发各类可再生新能源的同时也在倡导节能减排的绿色环保技术而在照明领域,寿命长节能安全绿色环保色彩丰富微型化的LED固态照明也已被公认为世界一种节能环保的重要途径,太阳能LED路灯同时整合了这两者的优势。   1 系统的整体方案设计   本论文主要研究方向是太阳能LED路灯的研究,其核心部件为蓄电池控制
[单片机]
基于51的太阳能LED路灯的设计与实现
LED点阵屏(上移)C51程序
先来张效果,图比较酷吧 电路原路图 以下程序有部分删减,请从以下地址下载.单片机型号是at89s52,晶振为11.0592.本人测试成功. 完整程序下载:http://www.51hei.com/ziliao/file/dianzhen2.rar //***************************************************** //程序功能: // LED点阵显示屏,每行显示字数为 LED_NUM个, // 总共可显示字数为DISP_NUM个, // 最大可显示字数为65536/32=2048个。 // 行数最多可为65536/16=4096行。 // 循环时间参数为DI
[单片机]
LED点阵屏(上移)C51程序
智能交通灯的潜力可缓解拥堵水平10%
      不管车流量多大,交通信号灯一般都按照固定的时间间隔改变颜色。但是在治理交通拥堵的方法中,很少人会在交通灯上动脑筋。      镶嵌于公路、路边摄像头、停车场、公交车的传感器,配合历史交通数据、季节性交通数据、天气情况,结合起来就能用于预测每个十字路口的车流量。交通事故或其他突发情况的实时数据还能提高预测的准确性。由此带来的交通流量提升达到10%。      根据Cubic交通系统公司副总裁Matthew Cole的说法:“分析复杂环境的新技术,如交通分析技术(包括行人交通、停车场、公交管理、需求管理等),刚刚开始成熟。它结合了信号配时、实时管理和复杂的预测分析方法。目前的交通灯仅能根据时段调整信号灯间隔
[汽车电子]
单片机交通灯控制程序和设计原理
同学们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。有些时候你考虑的和真理就差一点点了,没有坚持下去,别人告诉你后才恍然大悟。这样得到的结论,可以让你学到知识,但是却培养不了你的逻辑思维能力。不是不能问,而是要在认真思考的基础上再发问。 有同学有疑问,板子上只有 8 个流水灯,那如果我要做很多个流水灯一起花样显示怎么办呢?那我们在讲课的时候其实都提到过了,板子上是有 8 个流水灯,还有 6 个数码管,还有 1 个点阵 LED,一个数码管相当于 8 个小灯,一个点阵相当于 64 个小灯,那如果全部算上的话,我们板子上实际共接了 8+6*8+64=120 个小灯,你如果单独只接小灯,花样灯就做出来了。 还有同学问,
[单片机]
基于AT89S52单片机的超声波测距系统电路设计
  超声波是一种频率在20KHz 以上的机械波,在空气中的传播速度约为340 m/s(20 C时)。超声波可由超声波传感器产生,常用的超声波传感器两大类:一类是采用电气方式产生超声波,一类是用机械方式产生超声波,目前较为常用的是压电式超声波传感器。由于超声波具有易于定向发射,方向性好,强度好控制,对色彩、光照度不敏感,反射率高等特点,因此被广泛应用于无损探伤,距离测量、距离开关、汽车倒车防撞、智能机器人等领域。   本设计的整体框图如图所示,主要由超声波发射,超声波接收与信号转换,按键显示电路与温度传感器电路组成。超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差T,然后求出距离S=CT/2,
[单片机]
基于<font color='red'>AT89S52</font>单片机的超声波测距系统电路设计
AT89S52与DS18B20数字温度传感器测试结束
/*********************************************************************** * 采用四位共阴极数码管琒R42056K,P1口接数码管段码。P0.0接第一位 * P0.1接第二位,p0.2接第三位,p0.3接第四位。 * 单片机AR89S52,晶振7.3728M * DS18B20接P2.0。 * ***********************************************************************/ #include reg52.h #include intrins.h #define uchar unsigned ch
[单片机]
一种正弦信号发生器的设计与实现
  0 引言   正弦信号源在实验室和电子工程设计中有着十分重要的作用,而传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,工程实用性较差。本文的设计以较低的成本制作正弦信号发生器,可用作核磁共振中引发磁场测量仪的激励一般的正弦信号,也可作为调制用的教学演示信号源。   正弦信号发生器主要由两部分组成:正弦波信号发生器和产生调幅、调频、键控信号。正弦波信号发生器采用直接数字频率合成DDS技术,在CPLD上实现正弦信号查找表和地址扫描,经D/A输出可得到正弦信号。具有频率稳定度高,频率范围宽,容易实现频率步进100 Hz。全数字化结构便于集成,输出相位连续,频率、相位和幅度均可实现程控。   调幅、
[单片机]
一种正弦信号发生器的设计与实现
基于程控开关稳压电源设计
  开关电源是利用现代电力电子技术,控制开关管开通和关断的时间比率,维持稳定输出电压的一种电源。由于拥有较高的效率和较高的功率密度,开关电源在现代电子系统中的使用越来越普及。开关电源高频化、模块化和智能化是其发展方向。其中,步进可调、实时显示是开关电源智能化研究方向之一。现设计开关电源,技术指标为:输出电压30V至36V可调,最大输出电流2A,有过流保护功能,能对输出电压进行键盘设定和步进调整、步进值1V,并能实时显示输出电压和电流的开关稳压电源。   1 总体设计方案   采用AT89S52单片机为控制核心,对普通的开关电源控制部分进行优化设计,并通过软件编程实现了对开关电源的智能控制。设计中采用隔离变压器将市电变压后通过整流滤
[单片机]
基于程控开关稳压电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved