?? 紅外學習.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 + -