📄 红外学习.c
字号:
/*uchar=1us/次 uint=2us/次
0.56MS=560US=51*11US while()=11us/次
0.84ms=840us=76*11us
9MS=9000US=818*11US
4.5MS=4500US=409*11US
4MS=4000US=363*11US */
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit ir=P3^2;
sbit deng1=P1^0;
sbit deng2=P1^1;
sbit deng3=P1^2;
bit ir_byte;
delayus(uint z)
{
while(z--);
}
//功能:接收红外波形,并分地址,数据与数据反码
void ir_data()
{
uchar i,ir_date,ir_buck;
uint ir_add;
while(ir==1) //有信号进入
{
while(ir!=0);
delayus(450);
while(ir==0) //延时9MS判断是否为起始信号
{
delayus(50);
for(i=0;i<16;i++)
{
while(ir!=1);
while(ir!=0);
delayus(90); //延时0.84MS判断为高电平还是低电?
if(ir==0)
ir_byte=1;
else
ir_byte=0;
if(ir_byte)
ir_add=(ir_add>>1)|0x8000;
else
ir_add>>=1;
}
for(i=0;i<8;i++)
{
while(ir!=1);
while(ir!=0);
delayus(90); //延时0.84MS判断为高电平还是低电?
if(ir==0)
ir_byte=1;
else
ir_byte=0;
if(ir_byte)
ir_date=(ir_date>>1)|0x80;
else
ir_date>>=1; //数据码
}
for(i=0;i<8;i++)
{
while(ir!=1);
while(ir!=0);
delayus(90); //延时0.84MS判断为高电平还是低电?
if(ir==0)
ir_byte=1;
else
ir_byte=0;
if(ir_byte)
ir_buck=(ir_buck>>1)|0x80;
else
ir_buck>>=1; //数据反码
}
if(ir_date!=(~ir_buck)) //校验
deng1=0;
/*
while(add==0xf0f0)
deng1=0;
// while(date==0xf0)
// deng2=0;
// while(date1==0xf0)
// deng3=0;*/
}
}
}
main()
{
while(1)
{
ir_data();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -