最初系统状态为0状态,开发板上的红外接收未收到红外光,它的引脚输出高电平,当你按下一个按键时就进入了中断(因为红外LED亮了,红外接收就变低电平就有一个下降沿),状态变为1,等待接收开始或者重复,遥控器上的红外灯闪烁,红外接收头把收到的红外脉冲转变为电脉冲,这时候通过对脉冲的解读来识别按下了什么按键、要执行什么、是开始信号还是重复信号,中断函数设置的是下降沿触发,根据开始信号的脉冲可以看出来,开始信号是由一个 由下降沿开始由下降沿结束的一个脉冲,这也就是中断函数为什么要配置成下降沿触发的原因,也就是说开始信号里面有2个下降沿而且是在开始和结束,那么就可以进入两次中断,计算两次中断的间隔时间就可以去判断是不是开始信号,如果是开始信号就置为状态2接收数据,在发送数据的那一段,数据是由010101这样二进制组成的,一个data有32位就是4字节(地址码,地址反码,命另码,命令反码),但是要注意这里的0101不是靠灯的闪烁来直接定的,它是设置了数据1和数据0,数据0和1的特征看下面我发的图,数据0和1它的波形里面都是有2个下降沿的,就可以用中断去计算它的时间,然后去判断是0还是1,通过这样判断,就可以得到1串32位的二进制数字了,再通过对这个二进制处理把命令码和地址码取出来
PS:如何判断是单发还是连发,这时候重复信号就起作用了,你一直按着到了重复信号那一段,这时候的(命令码和地址码已经有了),系统就会回到状态0,再重新开始,以此循环,地址码和命名码就一直是原来的那个,从而实现连发