红外模块51学习单片机代码
可以使用
#includereg51.h
#includeintrins.h
#define uchar unsigned char
#定义uint unsigned int
# defines ever _ receivr _ buffer _ len 50
类型无符号字符字节;
类型无符号在word中;
unsignedcharreceivr _ buffer [ sever _ receivr _ buffer _ len ]={0};
unsigned char receive_number=0,flag1=0,acting=1,RF_ADD_H=0x2d,RF_ADD_L=0xd4;
unsigned char arry1[11]={0x7E,0x 07,0x 00,0x 26,0x 39,0x 39,0x 12,0x 01,0x 00,0x 56 }; //学习编号1的红外键值
unsigned char arry2[11]={0x7E,0x 07,0x 00,0x 26,0x 39,0x 39,0x 14,0x 01,0x 00,0x 58 }; //发送编号1的红外键值
sbit key1=P2^1;
sbit key2=P2^0;
sbit key3=P2^2;
sbit key4=P2^3;
void UART_init ()
{
SCON=0x50;
TMOD|=0x20;
TH1=0xfD软盘; //没有倍频12M时2400为0XF3 11.0592M时9600为0xFD
TL1=0xfD软盘;
TR1=1;
EA=1;
ES=1;
}
void delay () )
{
uchar i,j;
for(I=0; i50; I )
for(j=0; j200; j;
}
void _ delay _ us (未指定的int _ us ) )。
{
char a=0;
for(_us; _us; _us-- )
for(a=0; a1; a );
}
void delay _ ms (未指定的inta ) )。
{
wile(A0 ) )。
{a----; Delay_us(1000; }
}
void com _ send (挑战) )。
{
SBUF=string;
while (! 钛;
TI=0;
}
Void主() )
{
int i;
key1=1;
key2=1;
key3=1;
key4=1;
UART_init (;
while(1)。
{
if(key1==0)//外键处理器发送串行数据控制红外线模块学习第一键
{
while(key1==0; //7E 07 00 26 39 26 39 12 01 00 56学习1
for(I=0; i11; I )
{
com_send(arry1[I];
}
delay_ms(1000;
}
if(key2==0) )
{
while(key2==0; 外键连接处理器发送串行数据控制红外线模块发送第一号密钥
for(I=0; i11; I )
{
com_send(arry2[I];
}
delay_ms(1000;
}
if(flag1==1) /接收标志被设置时
{
flag1=0; //清除接收标志
if(receivr_buffer[0]==‘a ' )//如果收到的命令为a
{
for(I=0; i11; I )//串行发送命令控制红外线模块学习按钮1
{
com_send(arry1[I];
}
key3=0; //用外部引脚控制红外线模块学习按钮1
delay_ms(1000;
key3=1;
}
if(receivr_buffer[0]==‘b ' )//如果收到的命令为b
{
for(I=0; i11; I//串行发送命令控制红外模块发送按钮1
{
com_send(arry2[I];
}
key4=0; //用外部引脚控制红外线模块发送按钮1
delay_ms(1000;
key4=1;
}
}
}
}
//语音模块识别命令后串行端口输出Arn,语音模块识别命令后串行端口输出Brn
voidcom_interrupt(void ) interrupt 4
{
未指定Int I,j;
if(ri )//接收中断的处理
{
RI=0;
receivr _ buffer [ receive _ number ]=sbuf; //接收串行数据
if () receivr _ buffer [ receive _ number ]==0x0a ) ) receivr _ buffer [ receive _ number-1 ]==0x0d )
{
flag1=1; //语音模块发送来的串行命令接收完成标志
receive_number=0;
}
else
receive_number;
}
}