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

📄 remote.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
字号:
  #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=0;
unsigned char re_first;
unsigned char last_door;
extern unsigned char c080;
bit re_control;
extern uchar xdata remote_state,force_flag,hand_state;
extern bit  period_update;    /*周期更迭标志*/
//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,max_green_flash;
extern unsigned char error_type;
extern uchar now_uncount;
extern unsigned char xdata door,door_front,door_back;
extern void read_time();
extern void search_sch();
extern void cacu_dif();
extern void save_to_error();
extern  uchar xdata step_counter;              //阶段号
unsigned char data old_key;
unsigned char xdata hand_step_count,hand_step,user_count;
bit hand_step_flag;
unsigned char xdata  hand_lase_state,hand_now_state;
/*秒中断,灯色分配之前执行*/

/*秒中断,灯色分配之后执行*/
re_ye_allred() using 1
{
  unsigned char  data kkk=0;
  unsigned int   toto;

  if((reph_number==10)||(XBYTE[0X6D28]==0X02)){  /*黄闪*/
                      remote_state=5;
                      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==11)||(XBYTE[0X6D28]==0X03)){  /*全红*/
                        remote_state=5;
                        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;
                                   }
                      }


}


far_detect() using 1
{
  unsigned char data loop_var;
  unsigned char data i;

  XBYTE[0XC083]=0X8B;
  remote_phase=XBYTE[0XC082];
  remote_other=XBYTE[0XC081];
  hand_lase_state=hand_now_state;
  if(remote_other&0x04)door_front++;
                 else  door_front=0;
  if(door_front>200)door_front=200;
  if(door_front==50)door=0xc0;
  
  if(remote_other&0x08)door_back++;
                 else  door_back=0;
  if(door_back>200)door_back=200;
  if(door_back==50)door=0x03;
  if(door!=last_door){  
              error_type=0x04;
              save_to_error(); 
                      }
  last_door=door;
  
  if(remote_other&0x01)           //手动标志
  {
    hand_step_flag=1;             //手动标志
                                  //检测到手动标志的一瞬间,获得当前手动阶段号
    if(user_count==0)hand_step=step_counter+1;
    user_count++;
    if(user_count>20)user_count=20;
    if(remote_other&0x02)hand_step_count++; //点动计数开始
                    else{
                    hand_step_count=0;
                    hand_now_state=0;
                         }

    if(hand_step_count>10)
           {
            hand_step_count=10;
            hand_now_state=1;
            }
   }
  else                //解除手动控制
  {
   hand_step_flag=0;  //手动标志

   if(hand_state==2)
                       hand_state=3;
/*    if(hand_state==5)
                        {
                         period_update = 1;
                         step_counter=1;
                         hand_state=0;
                         }
                              */
   }

if(hand_lase_state==1&&hand_now_state==0)
{
    hand_step++;
    if(hand_step>step_num)
    hand_step=1;
   if(hand_state!=2&&hand_state!=4)
   hand_state=1;
}
//else if(remote_other&0x01)
//hand_step=step_counter;


 //读取遥控器控制结果,确认遥控的位置1-12
  XBYTE[0XC080]=c080;
   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 + -