本帖最后由 小德GD 于 2013-8-12 23:04 编辑
#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;
}
}
虽说说注释,但还是不太理解,请各位大侠出手相助,解释得详细一点
首先问下t=(TH0<<8)+TL0; 是不是 t=TH0*256+TL0?
一周热门 更多>