关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

浅析红外遥控解码(二)

2020.10.05

实现代码:

#include

// --- 红外接收一体化输出口 ----------------------------------

sbit IR_Out = P3^2;

bit START_Flag = 0;

bit BOOT_REPEATING_CODE_Flag = 0;

unsigned char DATA[4] = {0};

bdata unsigned char TEMP_BIT;

sbit B0 = TEMP_BIT^0;

sbit B1 = TEMP_BIT^1;

sbit B2 = TEMP_BIT^2;

sbit B3 = TEMP_BIT^3;

sbit B4 = TEMP_BIT^4;

sbit B5 = TEMP_BIT^5;

sbit B6 = TEMP_BIT^6;

sbit B7 = TEMP_BIT^7;

// --- 有无遥控信号判断函数 ----------------------------------

bit START_Judge();

// --- 连发码判断函数 ----------------------------------------

bit BOOT_REPEATING_CODE_Judge();

// --- "0"和"1"识别 ------------------------------------------

bit H_L_LEVEL_Judge();

bit START_Judge()

bit TEMP_Flag = 1;

unsigned char i = 0;

//在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环。

while ( IR_Out == 1);

//重复10次,目的是检测在6876~8352微秒内如果出现高电平就退出解码程序

for(i =0;i<9; i++)

DELAY_Us(800);      // 测试实际延时约为764~928us

if ( IR_Out == 1 )

TEMP_Flag = 0;

break;

return TEMP_Flag;

bit BOOT_REPEATING_CODE_Judge()

bit TEMP_Flag = 1;

while( IR_Out == 0 ) ;  // 等待高电平避开9毫秒低电平引导脉冲

DELAY_Ms(1);            // 测试实际延时约为1.007ms

DELAY_Ms(1);            // 测试实际延时约为1.007ms

DELAY_Us(200);          // 0.086ms

DELAY_Us(200);          // 0.086ms

DELAY_Us(200);          // 0.086ms

// 共计2.272ms

if( IR_Out == 0 )

TEMP_Flag = 1;      // 是连发码

else

TEMP_Flag = 0;      // 不是连发码,而是引导码

return TEMP_Flag;

bit H_L_LEVEL_Judge()

while( IR_Out == 0 );   // 等待地址码第一位的高电平信号

DELAY_Us(800);          // 测试实际延时约为764~928us

if ( IR_Out == 1)

DELAY_Ms(1);        // 测试实际延时约为1.007ms

return 1;

else

return 0;

// --- 串口初始化 --------------------------------------------


推荐
关闭