📄 remote_drv.c
字号:
//REMOTE_DRIVE
#include "config.h" /* lib configuration header */
#include "remote_drv.h"
#include "lib_mcu\timer\timer_drv.h" /* timer driver definition */
#include "lib_mcu\lcd\lcd_drv.h"
uchar bbp;
uchar ri;
uchar rmt,rmtend;
unsigned long tempchar; /*用于存放接收到的遥控信号*/
void remote_disable(void)
{
EX1 = 0;
}
void remote_enable(void)
{
rmtend = 0xff;
EX1 = 1;
}
void t1_remote_init(void)
{
T1_init(0,0,0x10); //T1工作于方式1,16BIT计数器
T1_start(); //开计数器1,用于判断遥控脉冲周期
IT1 = 1; //外部中断INT1管脚电平下降沿触发中断
EX1 = 1; //外部中断1允许
}
/**********************************************************
*函数名称:键盘和遥控值识别函数 *
*用途:获取并返回键值 *
***********************************************************/
uchar Remote_Cmd(void)
{
uchar value;
value=0xff;
if(rmtend!=0xff)//如果遥控接收值不为0xff,则将接收到的值判断变换后赋给value
{
switch(rmtend)
{
case 0x90: value=0;break;
case 0x00: value=1;break;
case 0x10: value=2;break;
case 0x08: value=3;break;
case 0x18: value=4;break;
case 0x04: value=5;break;
case 0x14: value=6;break;
case 0x0c: value=7;break;
case 0x1c: value=8;break;
case 0x80: value=9;break;
case 0x50: value=10;break;
case 0x48: value=11;break;
case 0x4c: value=12;break;
case 0x40: value=13;break;
case 0x44: value=14;break;
case 0x54: value=15;break;
case 0xd8: value=16;break;
case 0xcc: value=17;break;
case 0xdc: value=18;break;
case 0x88: value=19;break;
case 0xe8: value=20;break;
case 0xec: value=21;break;
default :value=255;break;
}
bbp=0;
ri=0;
return(value);
}
return (0xff);
}
Interrupt(remote_int (void), IRQ_INT1)
{
uchar bb,i;
uint timetemp;
// uchar a,b,c,d,e;
EX1 = 0; //关中断
T1_stop(); //关定时器
timetemp = TH1*256 + TL1; //取定时器值
TH1 = 0x00;
TL1 = 0x00;
T1_start(); //开定时器
/* a = timetemp/10000;
b = (timetemp%10000)/1000;
c = (timetemp%1000)/100;
d = (timetemp%100)/10;
e = timetemp%10;
ReadBusy();
putcomm(0x82);
ReadBusy();
putchar(0x30+a);
ReadBusy();
putchar(0x30+b);
ReadBusy();
putcomm(0x83);
ReadBusy();
putchar(0x30+c);
ReadBusy();
putchar(0x30+d);
ReadBusy();
putcomm(0x84);
ReadBusy();
putchar(0x30+e);
ReadBusy();
*/
if((timetemp > 2000)&&(timetemp < 3200))
bb = 1;
else if((timetemp > 1000)&&(timetemp < 1600))
bb = 0;
else bb = 10; //判断出得到的位是1还是0
if(bb <= 1)
{
tempchar += bb;
bbp ++;
if(bbp < 32) tempchar <<= 1;//未收满4字节
else {ri = 1; bbp = 0;}
}
if(ri == 1)//收满4个字节的数据后,进行字节内容判断
{
ri = 0;
for(i = 0; i < 16; i++)
{
if((tempchar & 0xff000000) == 0xe2000000)
{
rmt = tempchar >> 16;
rmtend = rmt;
tempchar = 0;
break;
}
else
tempchar <<= 1;
}
}
else rmt = 0xff;
EX1 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -