⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stru.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
字号:
#include <stru.h>
/*****************************************************************************************************/
//    初始化函数
/*****************************************************************************************************/
extern uchar xdata loop_now[32],loop_last[32];
void init(void)
{
    uchar i,j;
    uint k;


    D12887A=0x2f;               /*对时钟中断进行设置 */
    D12887B=0x4e;
    XBYTE[0XC083]=0X8b;         //CPU板内8255设置,绿灯电源为输出,遥控为输入
    XBYTE[0XC080]=0X81;         //输出绿灯电源
    XBYTE[0Xc103]=0x80;         //灯输出板设置,都设为输出
    XBYTE[0Xc183]=0x80;
    XBYTE[0XC203]=0X9b;         //灯检测输入板设置,都设为输入
    XBYTE[0XC283]=0X9b;
    XBYTE[0XC303]=0X93;         //车辆检测输入板设置
    XBYTE[0XC383]=0X93;
    XBYTE[0X6D28]=0;            //强制标志为0
    force_flag=0;
    XBYTE[0X6D29]=0;
    EA=0;
    TMOD=0X21;        /*定时器0工作在方式1,定时器1工作在方式2*/
    TH0=-(18432/256);  /*10毫秒定时  9216*/
    TL0=-(18432%256);
    TH1=0XFd;
    TL1=0XFd;
    PCON=0X00;
    SCON=0X50;         /*串行口初始化*/

    IE=0X96;          /*允许串口中断,外部事件1中断,定时器0中断*/
    IP=0X10;
    IT1=1;             /*下降沿触发方式  */
    TR0=1;             /*允许T0计数*/
    TR1=1;
    ET0=1;             /*T0中断开*/
    EX1=1;
    PX1=1;
    PS=1;
    ES=1;
    IP=0X10;
    user_count=0;
    for(k=0;k<512;k++){
         RX_BUF[k]=0xee;
                       }


    for(i=0;i<32;i++){
          loop_now[i]=0;
          loop_last[i]=0;             }
    for(i=0;i<41;i++){
          period_sch[i]=0;
                       }
    for(i=0;i<6;i++){
       XBYTE[0XA030+i*5]=0x87;            //发送寄存器
                     }
    XBYTE[0XA021]=0X00;
    XBYTE[0XA022]=0X80;
    XBYTE[0XA023]=0;
    XBYTE[0XA024]=0;
    for(i=0; i<32; i++)
    {
        loop_error[i] = 0;
        forsense[i] = 0;
        liul[i] = 0;
        send_liul[i] = 0;
       // send_occ[i]=0;
       no_vehicle_step[i]=0;
    }
   //初始化协调路口数据
   //zone_count[5][60]; //5个路口,没个路口60个备用变化,每个阶段提供60秒的变化范围
   //zone_step_time[5][60];//对应的阶段时间
   // zone_now_step_key[5][60];//对应的阶段历时
     EA=0;
    for(i=0;i<5;i++){
           WatchDog = !WatchDog;
         for(j=0;j<60;j++){
           zone_count[i][j]=0;
           zone_step_time[i][j]=0;
           zone_now_step_key[i][j]=0;
                           }
                     }


    //start_counter = 0;
    period_update = 0;
    fuctioncounter=0;
    remote_state=0;
    hand_state=0;
    force_state=0;
    for(i=0;i<32;i++){    //mei
  	   	  for(j=0;j<70;j++){
  	   	  	  per[i][j]=0;
  	   	  	     	}
  	   	  }
    EA=1;

 }

void updatanv()
 {
  unsigned int i ;
  updatanvram=0;
  EA=0;
  for(i=0;i<0x1d1d;i++){
      WatchDog = !WatchDog;
      XBYTE[0X5000+i]=XBYTE[0X8050+i];
                 }
   EA=1;

}

/*****************************************************************************************************/
//   主函数
/*****************************************************************************************************/
void main (void)  using 1
{

    unsigned char i,j;
    unsigned int  addr_w,addr_r,addr_day;
    unsigned char cal_flag,day;
    unsigned char day_code;
    cal_flag=0x01;
    init();
    EA=1;
    IP=0X10;
    while(1)
    {
    XBYTE[0XC083]=0X8b;         //CPU板内8255设置,绿灯电源为输出,遥控为输入
    XBYTE[0XC080]=0X81;         //输出绿灯电源
    InternalLed = !InternalLed;
    WatchDog = !WatchDog;
    if(selcal_flag==0x01)tran_psh();

     if((start_counter==7)&&(cal_flag==0x01)){
     last_recetimeid=timeid;
     cal_flag=0;
    //根据方案表中内容对,自学习优化结果进行重新初始化
     day = XBYTE[0XC006]; /*星期*/
     if(day>7)day=3;
     addr_w=0x3f00+(day-1)*384+(timeid-1)*16;
     addr_r=0x5e8b+(day-1)*1312+(timeid-1)*41;
     for(j=0;j<7;j++){
          addr_day=0x6ce7+6*j;
          day_code=XBYTE[addr_day];         //日计划
          addr_day=0x63a6+day_code*74;
          day_code=XBYTE[addr_day];         //日计划中对应的方案
          addr_day=0x5e8b+day_code*41;
          addr_r=addr_day;
          for(i=0;i<16;i++){
         XBYTE[addr_w+i]=XBYTE[addr_r+i];
                      }
                      }
           }

       h_address=XBYTE[0X8000];
       l_address=XBYTE[0X8001];
      // EA=0;
       deal_fpgadram();
     //  deal_lcddram();
     //  EA=1;
       if(tran_count>=15){
                          bid_flag();
                          tran_count=0;
                          }
       read_time();
       if(updatanvram==1)updatanv();

       if(start_counter>=3)
       {
          nowforce=XBYTE[0X6D29];
          if(nowforce!=lastforce){
                 hand_counter=0;
                          }
         lastforce=nowforce;
         now_schemeid = search_scheme_yellow();
         cljc();                //车辆检测
         phase_loop();          //相位流量检测
         jude_looperror();

         if((last_schemeid!=now_schemeid)&&(last_schemeid==0x21))period_update=1;  //黄闪时段进入正常时段
         if(period_update)   //周期结束时算一次
         {
            alt_change=1;
            period_update = 0;
            g_error1=g_load1; /*驱而不亮的绿灯组*/
            y_error1=y_load1; /*驱而不亮的黄灯组*/
            r_error1=r_load1; /*驱而不亮的红灯组*/
            g_error2=g_load2; /*不驱而亮的绿灯组*/
            y_error2=y_load2; /*不驱而亮的黄灯组*/
            r_error2=r_load2; /*不驱而亮的红灯组*/
           // g_load1=0;y_load1=0;r_load1=0;
           // g_load2=0;y_load2=0;r_load2=0;
            if(now_day_planid==0)now_day_planid=0;
            
            search_sch();
           // max_clear_time();
           // trans_volum();         //周期更迭时传送流量信息
           // tran_psh();            //周期更迭时传送方案信息
            last_schemeid=now_schemeid;
            soft_greenconflic();     //判定软件绿冲突
            
         }
         deal_fpgadram();
         if((comm_state==head)&&(head!=tail)){
                           crc_main();
                                 }
         comm_state=head;
         deal_lcddram();
         if(run_state==0x01){
                             judge_lamp();
                             judge_lamp_error();  //判别灯组故障
                             }

       }

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -