?? 復件 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; //系統碼
sbit OUT=P3^7;
void send_bit (uchar one_bit); //發送一位字節
void send_data (uchar one_data); //發送一個數據
//包括一個起始標志 一個系統碼及其反碼 一個數據碼(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;
}
/*send_pulse_565 (); //先發0.565毫秒脈寬
if( (one_bit&key_num)==1 )
send_space_1685 (); //先發低位 某位是1則延時1.685ms
else
send_space_560(); //如果是0則延時0.56ms
one_bit=one_bit>>1; //one_bit右移一位*/
void send_bit (uchar one_bit)
{
//uchar i;
// uchar key_num=0x01;
//for(i=0;i<8;i++)
{
//one_bit=0xf9;
if( (one_bit&0x01)==0x01 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x02)==0x02 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x04)==0x04 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x08)==0x08 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x10)==0x10 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x20)==0x20 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x40)==0x40 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
if( (one_bit&0x80)==0x80 )
{
send_pulse_565 ();
send_space_1685 ();
}
else
{
send_pulse_565 ();
send_space_560 ();
}
}
}
void send_data (uchar one_data)
{
send_pulse_9000(); //起始碼 9ms的脈寬 考慮到誤差
send_space_4500(); //4.5ms的間隔
send_bit (SYS_DATA); //發系統碼
send_bit (~SYS_DATA); //發系統碼的反碼
send_bit (one_data); //發數據碼
send_bit (~one_data); //發數據碼的反碼
}
void main(void)
{
uchar c=0x02;
uint t=65535;
TMOD=0x21; //T0產生精確時間的延時或脈寬 16位
//T1產生38kHz方波 8位自動重裝
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用來產生38kHz方波
{
OUT=~OUT;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -