?? ir_send.c
字號:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define send0 send_pulse_565 (); send_space_1685 ();
#define send1 send_pulse_565 (); send_space_560 ();
uchar SYS_DATA=0x49; //系統(tǒng)碼
sbit OUT=P3^7;
void send_bit (uchar one_bit); //發(fā)送一位字節(jié)
void send_data (uchar one_data); //發(fā)送一個數(shù)據(jù)
//包括一個起始標(biāo)志 一個系統(tǒng)碼及其反碼 一個數(shù)據(jù)碼(one_data)及其反碼
char code disp[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1};
char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //顯示緩沖
void delay(uchar t)
{ char a;
while(t--)
for(a=255;a>0;a--); }
void display(uchar t)
{while(t--)
{P0=disp[i1];
P2=0x7f;
delay(1);
P2=0xff;
P0=disp[i2];
P2=0xbf;
delay(1);
P2=0xff;
P0=disp[i3];
P2=0xdf;
delay(1);
P2=0xff;
P0=disp[i4];
P2=0xef;
delay(1);
P2=0xff;
P0=disp[i5];
P2=0xf7;
delay(1);
P2=0xff;
P0=disp[i6];
P2=0xfb;
delay(1);
P2=0xff;
P0=disp[i7];
P2=0xfd;
delay(1);
P2=0xff;
P0=disp[i8];
P2=0xfe;
delay(1);
P2=0xff;} }
void send_pulse_9000 (void) //9ms脈寬
{
TH0=0xdc;
TL0=0xff;
TR0=1;
TR1=1;
while(TR0);
TR1=0;
OUT=1;
}
void send_space_4500 (void) //4.5ms間隔
{
OUT=1;
TH0=0xee;
TL0=0x7f;
TR0=1;
while(TR0);
OUT=1;
}
void send_pulse_565 (void) //0.565ms脈寬
{
TH0=0xfd;
TL0=0xee;
TR0=1;
TR1=1;
while(TR0);
TR1=0;
OUT=1;
}
void send_space_1685 (void) //1.685ms間隔
{
OUT=1;
TH0=0xf9;
TL0=0x7f;
TR0=1;
while(TR0);
OUT=1;
}
void send_space_560 (void) //0.56ms間隔
{
OUT=1;
TH0=0xfd;
TL0=0xea;
TR0=1;
while(TR0);
OUT=1;
}
void send_bit (uchar one_bit)
{
uchar i;
uchar key_num=0x01;
for(i=0;i<8;i++)
{
send_pulse_565 (); //先發(fā)0.565毫秒脈寬
if( (one_bit&key_num)==1 )
send_space_1685 (); //先發(fā)低位 某位是1則延時1.685ms
else
send_space_560(); //如果是0則延時0.56ms
one_bit=one_bit>>1; //one_bit右移一位
}
}
void send_data (uchar one_data)
{
send_pulse_9000(); //起始碼 9ms的脈寬 考慮到誤差
send_space_4500(); //4.5ms的間隔
send_bit (SYS_DATA); //發(fā)系統(tǒng)碼
send_bit (~SYS_DATA); //發(fā)系統(tǒng)碼的反碼
send_bit (one_data); //發(fā)數(shù)據(jù)碼
send_bit (~one_data); //發(fā)數(shù)據(jù)碼的反碼
}
void main(void)
{
uchar c=0x02;
uint t=65535;
TMOD=0x21; //T0產(chǎn)生精確時間的延時或脈寬 16位
TH1=0xf3;
TL1=0xf3;
IE=0x8a;
delay(255);
display(100);
delay(255);
display(100);
while(1)
{
send_data(c);
i8=SYS_DATA/16;
i7=SYS_DATA%16;
i6=~SYS_DATA/16;
i5=~SYS_DATA%16;
i4=c/16;
i3=c%16;
i2=~c/16;
i1=~c%16;
display(255);
display(255);
display(255);
display(255);
display(255);
display(255);
}
}
void time0 (void) interrupt 1
{
TR0=0;
TR1=0;
}
void time1 (void) interrupt 3 //T1用來產(chǎn)生38kHz方波
{
OUT=~OUT;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -