📄 remote_pro.c
字号:
#include<REG51.H>
#include<INTRINS.H>
#include<STRING.H>
#include<STDIO.H>
#include<math.h>
#define uchar unsigned char
/***********************************************************************
遥控接收程序
/**********************************************************************/
//
//global: keynumb, ct_pulse, ct_press, remstep
//input: ct_pulse, ct_press,
//ouput: keynumb<g.>
bit F_rempress;
uchar data ct_pulse, ct_press, remstep;
uchar data remdat, remdat1, remkey;
uchar data keynumb;
const uchar REMOTEIDA0=0x00;
const uchar REMOTEIDA1=0xff;
const uchar REMOTEIDB0=0x00;
const uchar REMOTEIDB1=0xff;
const uchar REM200US0L=2, REM200US0H=8;
const uchar REM200US1L=9, REM200US1H=16;
uchar code list_remkey[]={ 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
//********************************************************************
//程序声明
void RemKeyAna(uchar x);
void RemProcess();
//********************************************************************
main()
{
uchar i;
P0=0xEE;
P1=0x00;
P2=0xFF;
P3=0xFF;
TH0=0xFF;
TL0=0x37; //200US
TCON=0x11; //TF1 TR1 | TF0 TR0 | IE1 IT1 | IE0 IT0
TMOD=0x01; //GATA C/T M1 M0 | GATA C/T M1 M0
IP=0x00; //.. .. .. PS PT1 PX1 PT0 PX0
IE=0x83; //EA .. .. ES ET1 EX1 ET0 EX0
/* while(1)
{ RemProcess();
}
*/
for (i=0; i<10; i++)
{ switch(i)
{ case 0:
{ break; break;}
default:
break;
}
ACC=2;
}
while(1)
ACC=1;
}
//********************************************************************
//遥控中断
//
//********************************************************************
void int0() interrupt 0 using 1
{
uchar x;
x=ct_pulse;
ct_pulse=0;
switch(remstep)
{ case 0:
remstep++;
break;
case 1:
{ if (x>=60 && x<=75) remstep++; }
break;
default:
{ if (remstep>=34) remstep=0;
else
{ if (x<REM200US0L || x>REM200US1H)
remstep=0;
else
{ F0=( (x>=REM200US0L && x<=REM200US0H) ? 0 : 1);
remdat= remdat>>1; //CY 不参与移位
if (F0)
{ remdat=remdat | 0x80;}
switch(remstep)
{ case 9:
if(remdat != REMOTEIDA0 && remdat != REMOTEIDB0)
remstep=0;
break;
case 17:
if(remdat != REMOTEIDA1 && remdat != REMOTEIDB1)
remstep=0;
break;
case 25:
remdat1=remdat;
break;
case 33:
{ remstep = -1;
if ( (remdat1 & remdat)==0 )
RemKeyAna(remdat1);
}
break;
default:
break;
}
remstep++;
}
}
break;
}
}
}
//---------------------------------------------------------------------
//遥控键速控制
void RemKeyAna(uchar x)
{
if (list_remkey[x] != remkey)
{ keynumb=remkey=list_remkey[x]; ct_press=0; F_rempress=0; }
else
{ if (!F_rempress)
{ if (ct_press > 4) // >400ms
{ F_rempress=1; ct_press=0; keynumb=remkey; }
}
else
switch (remkey)
{ case 1: // 连发键可以控制按键速度
case 2:
case 3:
case 4:
break;
default:
ct_press=0; // 单发键, 连续按不响应
break;
}
}
}
//--------------------------------------------------------------------
//定时中断相关处理
void RemProcess()
{
ct_pulse++; // +1/200us
if (ct_pulse > 240)
{ ct_pulse=0; remstep=0; remkey=0; F_rempress=0; }
ct_press++; // +1/100ms
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -