📄 remote.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 + -