|
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA_OUT P0
sbit HX1838_Out=P3^2; //声明红外接收头的OUT引脚
uchar i,ch; //ch用来保存红外的数据反码
uint t;
void main(void)
{
TMOD=0x01;
TR0=1; //开启计数器,开始计时
HX1838_Out=1;
while(1)
{
while(HX1838_Out); //等待接收信号,一有按键按下,
//HX1838_Out为0,跳出while()循环
t=(TH0<<8)+TL0; //取得脉冲宽度,
if(t>200&&t<800); //是'0'码
else if(t>1100&&t<1800) //'1'码
{
if(i>24) //取出最后一字节
ch|=1<<(i-25);
}
else //非0、1码,重新解码
{
ch=0;
i=0;
}
if(i++==32)
{
DATA_OUT=~ch; //将数据反码取反得到数据码,再送到P0的LED显示
}
while(!HX1838_Out); //等待HX1838_Out引脚电平由低变高
TL0=0; //清计数器,重新计时
TH0=0;
}
}
if(i>24) //取出最后一字节
ch|=1<<(i-25);
为什么通过这两句可以得到反数据码? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|