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

📄 remote.c.bak

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 BAK
字号:
#include <absacc.h>
#define   uchar  unsigned char
#define   uint   unsigned int
unsigned char remote_number;
unsigned char remote_phase;
unsigned char remote_other;
unsigned char re_phase[8],re_other[4];
unsigned char re_message[12];
unsigned char reph_number;
unsigned char re_first;
bit re_control;
extern bit remote_start;
//bit force_flag;
extern unsigned int xdata use_lamp;
extern unsigned char xdata lamp_state[16];   //灯色状态
extern unsigned char xdata step_num;
extern uint  xdata inuse_lamp_temp;
extern uint  xdata now_phase_temp;
extern uint  xdata now_phase_tempn;
extern uint  xdata now_lamp_temp;
extern uint  xdata now_lamp;
extern uint  xdata inuse_phase[32];          //阶段用到的相位
extern uint  xdata inuse_phasen[32];         //下阶段用到的相位
extern uint  xdata baseaddr_now_phasesch;
extern uchar xdata  max_yellow,max_red_clear;
extern uchar now_uncount; 
extern void read_time();
extern void search_sch();
extern void cacu_dif();
unsigned char data old_key;
/*秒中断,灯色分配之前执行*/
remote_ph()  using 1
{

unsigned char  i,j;
unsigned int data toto,toto1;
   //re_control=0;
   reph_number=0;
   for(i=0;i<8;i++){    /*确认当前被遥控的相位数*/
   if(re_message[i]==20){
                         reph_number=(i+1);
                         remote_start=1;
                         }
                 }
   for(i=8;i<12;i++){    /*确认当前被遥控的相位数*/
   if(re_message[i]==20){
                         reph_number=(i+1);
                         }
                 }

  if((reph_number>0)&&(reph_number<12)) {

                                                                     re_control=1;
                                                                    // old_key=key;
                                                                    // force_flag=1;
                                                                      }


  if((re_control==1)&&(reph_number<=step_num))
                          {
                                          ///key=sch_plan[reph_number*2-1]-g_flash[now_step]/*XBYTE[0X80CA]*/-1;
                       //now_uncount = step_time-now_step_key;      //阶段倒计时
                     
              
                      now_uncount = max_yellow+max_red_clear;    //查表的阶段时间与当前历时的倒计时
                   
                       for(i=0; i<16; i++)                            //此循环用于查找当前阶段用到的相位
                       {
                               toto = 0x0001;
                               toto = toto<<i;

                               now_phase_temp = toto&inuse_phase[reph_number-1];   //当前阶段是否包含该相位
                               now_phase_tempn = toto&inuse_phasen[reph_number-1];

                               if(now_phase_temp!=0)                        //
                               {
                                  now_lamp_temp = XBYTE[baseaddr_now_phasesch+18*i];
                                  now_lamp_temp = now_lamp_temp<<8;
                                  now_lamp = now_lamp_temp|XBYTE[baseaddr_now_phasesch+18*i+1];

                                 }

                               for(j=0; j<16; j++)                   //此循环用于查找当前相位用到的灯组
                               {
                                  toto1 = 0x0001;
                                  toto1 = toto1<<j;
                                  inuse_lamp_temp =  toto1&now_lamp;
                                  if(inuse_lamp_temp!=0)
                                      lamp_state[j]=1;         /*当前阶段用的灯组置成绿色*/
                                  else
                                      lamp_state[j]=4;
                               }

                     }



              }




 /* re_first=0;


  if(re_control==1)re_first++;
  if(re_first==1){
                  old_key=key-old_key;
                  period=period-old_key;
                  }   */
 }
/*秒中断,灯色分配之后执行*/
re_ye_allred()    
{
  unsigned char  data kkk=0;
  unsigned int   toto;

  if(reph_number==11){  /*黄闪*/
                      for(kkk=0;kkk<16;kkk++){
                        toto = 0x0001;
                        toto = toto<<kkk;
                        if((use_lamp&toto)==toto)
                                                 lamp_state[kkk]=4;      /*使用的灯组置成黄闪先*/
                                             else
                                                 lamp_state[kkk]=7;
                                            }
                      }
   if(reph_number==10){  /*全红*/

                        for(kkk=0;kkk<16;kkk++){
                        toto = 0x0001;
                        toto = toto<<kkk;
                        if((use_lamp&toto)==toto)
                                                 lamp_state[kkk]=5;      /*使用的灯组置成红色先*/
                                             else
                                                  lamp_state[kkk]=7;
                                   }
                      }

   if(reph_number==12){  /*解除*/

                      re_control=0;
                      
                      }

}


/*本函数在毫秒中断中运行,只有遥控按键的状态保持20个毫秒中断才生效*/
far_detect()    using 1
{
  unsigned char data loop_var;
  unsigned char data i;

  XBYTE[0XC083]=0X8B;
  remote_phase=XBYTE[0XC082];
  remote_other=XBYTE[0XC081];
  XBYTE[0XC080]=0X81;
   for(i=0;i<8;i++){
       loop_var=0x01;
       loop_var=(loop_var<<i);
    /*   flag=loop_var%256; */
       if((remote_phase&loop_var)==0)
                            re_phase[i]++;
                          else
                           re_phase[i]=0;
       if(re_phase[i]>20)
                         re_phase[i]=20;
                   }
  for(i=0;i<4;i++){
       loop_var=0x10;
       loop_var=(loop_var<<i);
   /*    flag=loop_var%256;   */
       if((remote_other&loop_var)==0)
                                     re_other[i]++;
                                else
                                     re_other[i]=0;
       if(re_other[i]>20)
                         re_other[i]=20;
                   }

 for(i=0;i<12;i++){
   if(i<8)re_message[i]=re_phase[i];
     else re_message[i]=re_other[i-8];
                  }
}

⌨️ 快捷键说明

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