📄 inf2.c
字号:
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 函数体(Function body)
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
//红外线接收子函数
void inf_gonggong(void) //红外线接收公共程序
{
TR1 = 0; //定时器1停止计数,晶振是24M
inf_zanshi = TH1*256; //读入定时器的值
inf_zanshi += TL1;
inf_zanshi -= 0x1FFF;
inf_zanshi = inf_zanshi/128; //处理计数值,做128分频
TH1 = 0x1F; //定时器高位
TL1 = 0xFF; //定时器低位
TR1 = 1; //定时器1开始计数,由于晶振是24M
inf_shunxu++;
}
void inf_gongcuowu(void)
{
inf_mode_cuowu = 1; //红外线接收出现错误
inf_shunxu = 0;
}
void inf_wancheng(void)
{
char jiaoyanzhi = 0xFF;
TR1 = 0;
inf_shunxu=0;
if(inf_dizhi_buf == inf_dizhichou_buf) //校验数据,先地址再数据
{
inf_zanshi1 = inf_shuju_buf;
inf_zanshi1 |= inf_shujuf_buf;
if(jiaoyanzhi == inf_zanshi1) //如果为真则说明接收数据是正确的
{
TEST=!TEST;
inf_dizhi = inf_dizhi_buf;
inf_dizhichou = inf_dizhichou_buf;
inf_shuju = inf_shuju_buf;
inf_shujuf = inf_shujuf_buf;
if(inf_shuju == inf_code_0) //这个码是清除设定码
inf_array[1] = 0xFF;
if(inf_array[1] == jiaoyanzhi) //如果等于FFH说明现在机器人的动作是空闲
{
switch(inf_shuju)
{
case inf_code_0:
break;
case inf_code_1: inf_array[1]=1;
break;
case inf_code_2: inf_array[1]=2;
break;
case inf_code_3: inf_array[1]=3;
break;
case inf_code_4: inf_array[1]=4;
break;
case inf_code_5: inf_array[1]=5;
break;
case inf_code_6: inf_array[1]=6;
break;
case inf_code_7: inf_array[1]=7;
break;
case inf_code_8: inf_array[1]=8;
break;
case inf_code_9: inf_array[1]=9;
break;
case inf_code_10: inf_array[1]=10;
break;
case inf_code_11: inf_array[1]=11;
break;
case inf_code_12: inf_array[1]=12;
break;
case inf_code_13: inf_array[1]=13;
break;
case inf_code_14: inf_array[1]=14;
break;
case inf_code_15: inf_array[1]=15;
break;
case inf_code_16: inf_array[1]=16;
break;
case inf_code_17: inf_array[1]=17;
break;
case inf_code_18: inf_array[1]=18;
break;
case inf_code_19: inf_array[1]=19;
break;
case inf_code_20: inf_array[1]=20;
break;
case inf_code_21: inf_array[1]=21;
break;
case inf_code_22: inf_array[1]=22;
break;
case inf_code_23: inf_array[1]=23;
break;
case inf_code_24: inf_array[1]=24;
break;
case inf_code_25: inf_array[1]=25;
break;
case inf_code_26: inf_array[1]=26;
break;
case inf_code_27: inf_array[1]=27;
break;
default: inf_array[1]=0xFF;
break;
}
}
}
}
//目前失败未作处理
}
//此完成函数应该进行特别处理。由于接收到的红外线按键的编码是特定码。所以需要做特别的译码,得到我们的目标码
// ─────────────────────────────────────────
// 函数原型:void INT_1(void) interrupt 2
// 函数名称:外部1断服务程序(external 1 interrupt service program)
// 功 能:
// 参 数:无
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void INT_1(void) interrupt 2
{
if(inf_mode_en == 1) //如果红外线接收总控制开,那么才可以判断下面的所有
{
if(inf_shunxu == 0)
{
TH1 = 0x1F; //定时器高位
TL1 = 0xFF; //定时器低位
TR1 = 1; //定时器1开始计数,由于晶振是24M
inf_shunxu++; //顺序加一
ET1 = 1; //开定时器1的溢出中断使能
}
else if(inf_shunxu == 1)
{ inf_gonggong(); //红外线接收公共程序
if(inf_zanshi>kaishizhi_l)
{
inf_dizhi_buf=0;
inf_dizhichou_buf=0;
inf_shuju_buf=0;
inf_shujuf_buf=0;
}
else inf_gongcuowu(); //公共错误处理
}
else
{
switch(inf_shunxu)
{
case 2: inf_gonggong(); //红外线接收公共程序
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xFE;} //清除最低位
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x01;} //置最低位
else{inf_gongcuowu();} //公共错误处理
break;
case 3: inf_gonggong();
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xFD;}
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x02;}
else{inf_gongcuowu();} //公共错误处理
break;
case 4: inf_gonggong();
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xFB;}
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x04;}
else{inf_gongcuowu();} //公共错误处理
break;
case 5: inf_gonggong();
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xF7;}
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x08;}
else{inf_gongcuowu();} //公共错误处理
break;
case 6: inf_gonggong();
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xEF;}
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x10;}
else{inf_gongcuowu();} //公共错误处理
break;
case 7: inf_gonggong();
if(inf_zanshi<inf_lingzhi_h) //如小于0码最大值则说明是0
{inf_dizhi_buf&=0xDF;}
else if(inf_zanshi<inf_yizhi_h)
{inf_dizhi_buf|=0x20;}
else{inf_gongcuowu();} //公共错误处理
break;
case 8: inf_gonggong();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -