做个遥控器

来源:互联网 发布:枣庄西站离高铁站源码 编辑:程序博客网 时间:2024/04/29 17:33

做一个遥控器的接收程序。基本的原理是:遥控器是通过红外线来传播的。红外线是一种光,人们看不见的光线。当遥控器某键按下时,就会向电路板的红外线接收器发出亮度不同的红外线。转换电路把红外线接收到的光线的多少转换成高低电平的变化。当遥控器某一个按键按下后,电路板上某一个端口上就会产生一个具有高低电平变化的波。我使用的遥控器所发出的波,基本结构如下:首先是一开始做了一个,使用的是外部下降沿中断,当程序检测到下降沿的时候。经过9ms的低电平。然后是接近4.5ms的高电平。然后是接近0.5ms的低电平然后后面的高电平宽度是变化的,但只有两种宽度,分别可以定义为0和1. 共有32个变化的高电平。低电平都是一样的。我们就是有用得到的32个高电平。来判断出来所发过来的数值是多少。用程序来实现。有两种思路:第一种:使用外部中断:下降沿边界扫描:当中断时:第一步延时0.1ms 如果此时端口是高电平。结束。用While语句,当处于低电平的时候。消耗掉9ms时间。等待变成高电平。 while语句消耗掉4.5ms高电平等待低电平,低电平到来时。while语句。消耗掉低电平等待高电平。高电平来临时:这个应该引起注意了。因为从这个高电平开始,每个高电平的脉冲宽度都代表了0或1,所以我们要知道这个脉冲的宽度,所以我们当处于高电平的时候,定义一个数值并由零开始累加。如果这个数值所代表的时间超过了短脉冲的时间。那么就证明代表的是1,如果没有超过就就代表的是0;在每个高电平结束后,都要对一个八位数据的位进行操作。首先使这个数整体右移一位,其实也就是每次都将高位变成零。如果这个波代表的是1. 就把刚才变成零的那个最高位变成1. 如果是0的话就不对刚才变成零的位进行任何操作。其实就是这个八位数据。每个位就代表着一个高电平。每个位的0和1的数值就代表着高电平的宽度。因为共有32个变化电平。所以要用到4个八位数据记录。然后我们通过所得到的4个八位数据。就会判断出来所对应的按键是哪一个。