• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: 单片机  

资源简介

利用红外传感器检测通过两个路口的车流量,然后根据算法以车流量为主要参数计算出合理的交通信号灯时间,将计算所得的时间赋予数码管,数码管进行“减一”操作,同时交通信号灯根据时间采用不同组合顺次变换。同时设计了紧急交通电路应用于紧急车辆通过,例如120、110等车辆。

资源截图

代码片段和文件信息

#include 
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f0x060x5b0x4f0x66
0x6d0x7d0x070x7f0x6f};
uchar shige;
uint dx_cllnb_cllclli;
sbit dx_jinji=P3^2;
sbit nb_jinji=P3^3;

void delay(uint z)                           //延时子程序4ms  
{
uint xy;
for(x=500;x>0;x--)                      //循环500次
for(y=z;y>0;y--);
}

void display(uchar shiuchar geuchar x)        //数码管显示子程序 
{       
P2=table[ge];             //显示个位
delay(x);                 //调用延时程序
P1=table[shi];            //显示十位
delay(x);                 //调用延时程序
}

void timer(uchar xuchar y)                      //显示倒计时程序
{

shi=x/10;
ge=x%10;
display(shigey);
}

uint suanfa(int m)                                //车流量算法
{
      uint xyz;
      x=TL0|(TH1<<8);    //X取值
      y=TL1|(TH1<<8);  //Y取值
      if(x<=20&&y<=20) return(30);    //如果两个路口车流量均小于20,则红绿灯时间返回为30秒。
      else if((20      {
         if(m==0) return(x);
         else if(m==1) return(y);
         
      }          
      else if(x>=60&&y>=50) //如果东西路口大于60,南北路口大于50经过以下算法
      {
   z=x/y; //计算两个路口车流量的比值范围。
z=z*100; //因为C语言中取整数,故乘一百。
         if(m==0)   //东西方向亮绿灯 ;
   {
    if(z>=50&&z<76) x=60+6;  //如果比值在50到76范围内,时间为66秒;
if(z>=76&&z<102) x=60+12;  //如果比值在76到102范围内,时间为72秒;
if(z>=102&&z<128) x=60+18;  //如果比值在102到128范围内,时间为78秒;
    if(z>=128&&z<154) x=60+24;  //如果比值在128到154范围内,时间为84秒;
if(z>=154&&z<180) x=60+30;  //如果比值在154到180范围内,时间为90秒;
  if(x>=90) x=90;   //如果东西路口车流量大于九十,时间显示为90秒。
 return(x) ;
   }
         else if(m==1) //南北方向亮绿灯;
 {
    if(z>=50&&z<76)   y=50+30;  //如果比值在50到76范围内,时间为80秒;
if(z>=76&&z<102)  y=50+24;  //如果比值在76到102范围内,时间为74秒;
if(z>=102&&z<128) y=50+18;  //如果比值在102到128范围内,时间为68秒;
    if(z>=128&&z<154) y=50+12;  //如果比值在128到154范围内,时间为62秒;
if(z>=154&&z<180) y=50+6;  //如果比值在154到180范围内,时间为56秒;
  if(y>=80) y=80;   //如果南北路口车流量大于八十,时间显示为80秒。
 return(y) ;
        }
       }
}

void jishuqi()
{
          TMOD=0x55;            //初始化定时器/计数器T0、T1为计数模式,工作于方式1,二进制计数
          TH0=0x00;
          TL0=0x00;             //THTL0清0
          TH1=0x00;
          TL1=0x00;             //TH1TL1清0
          TR0=1;                //启动

评论

共有 条评论