我做的是红外控制的智能风扇,但是红外改了键位实物也没有反应,求问我这个程序是不是还有什么问题
///*读取红外数值的中断函数*/void ReadIr() interrupt 0{ u8 j, k; u16 err; Time = 0; delay_hw(); //7ms if(IRIN == 0) //确认是否真的接收到正确的信号 {
err = 1000; //1000*10us=10ms,超过说明接收到错误的信号 /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时 侯,程序死在这里*/ while((IRIN == 0) && (err > 0)) //等待前面9ms的低电平过去 { delay_hw(1); err--; } if(IRIN == 1) //如果正确等到9ms低电平 { err = 500; while((IRIN == 1) && (err > 0)) //等待4.5ms的起始高电平过去 { delay_hw(1); err--; } for(k = 0; k < 4; k++) //共有4组数据 { for(j = 0; j < 8; j++) //接收一组数据 {
err = 60; while((IRIN == 0) && (err > 0)) //等待信号前面的560us低电平过去 { delay_hw(1); err--; } err = 500; while((IRIN == 1) && (err > 0)) //计算高电平的时间长度。 { delay_hw(10); //0.1ms Time++; err--; if(Time > 30) //大于3ms 退出程序 { return; } } IrValue[lbk]k[rbk] >>= 1; //k表示第几组数据 if(Time >= 8) //如果高电平出现大于0.8ms,那么是1 { IrValue[lbk]k[rbk] |= 0x80; } Time = 0; //用完时间要重新赋值 } } } if(IrValue[lbk]2[rbk] != ~IrValue[lbk]3[rbk]) //对比 数据码 和数据反码 是否成立 不对则退出 { return; } switch(IrValue[lbk]2[rbk]) { case 18: yuzhion++; break; case 52: yuzhion--; break;
///*读取红外数值的中断函数*/void ReadIr() interrupt 0{ u8 j, k; u16 err; Time = 0; delay_hw(); //7ms if(IRIN == 0) //确认是否真的接收到正确的信号 {
err = 1000; //1000*10us=10ms,超过说明接收到错误的信号 /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时 侯,程序死在这里*/ while((IRIN == 0) && (err > 0)) //等待前面9ms的低电平过去 { delay_hw(1); err--; } if(IRIN == 1) //如果正确等到9ms低电平 { err = 500; while((IRIN == 1) && (err > 0)) //等待4.5ms的起始高电平过去 { delay_hw(1); err--; } for(k = 0; k < 4; k++) //共有4组数据 { for(j = 0; j < 8; j++) //接收一组数据 {
err = 60; while((IRIN == 0) && (err > 0)) //等待信号前面的560us低电平过去 { delay_hw(1); err--; } err = 500; while((IRIN == 1) && (err > 0)) //计算高电平的时间长度。 { delay_hw(10); //0.1ms Time++; err--; if(Time > 30) //大于3ms 退出程序 { return; } } IrValue[lbk]k[rbk] >>= 1; //k表示第几组数据 if(Time >= 8) //如果高电平出现大于0.8ms,那么是1 { IrValue[lbk]k[rbk] |= 0x80; } Time = 0; //用完时间要重新赋值 } } } if(IrValue[lbk]2[rbk] != ~IrValue[lbk]3[rbk]) //对比 数据码 和数据反码 是否成立 不对则退出 { return; } switch(IrValue[lbk]2[rbk]) { case 18: yuzhion++; break; case 52: yuzhion--; break;





