目前在做格力空调遥控器,但是不懂问题出在哪,刚开始写的代码,用一个简易示波器测出来的延时数据和空调遥控器差不多,但是好像没有用,后来加上了38Khz之后,用示波器再测就乱码了....代码如下,P34是我的红外发射,P13是我的按键,目前只写了开的功能,校验码也是按照示波器得到的数据写的,有一个一秒的延时,是示波器用到的,不然测不出来.....
#include <STC15F2K60S2.H>
#include <intrins.h>
bit logic=0;
void Delay9000us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 97;
j = 207;
do
{
while (--j);
} while (--i);
}
void Delay9us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
i = 22;
while (--i);
}
void NO_Send(volatile unsigned int i) //载波不发射
{
while(i--)
{
P34 = 0;
Delay9us();
Delay9us();
Delay9us();
}
}
void Send(volatile unsigned int i) //载波发射
{
while(i--)
{
P34 = 1;
Delay9us();
P34 = 0;
Delay9us();
Delay9us();
}
}
void high()
{
P34=0;
NO_Send(22);
P34=1;
Send(59) ;
}
void low()
{
P34=0;
NO_Send(22);
P34=1;
Send(22);
}
char encode1 [35 ]=
{1,0,0, //模式
0, //开关
0,0, //风速
0, //扫风
0, //睡眠
0,0,0,0,//温度
0,0,0,0,0,0,0,0,//定时数据
0, //加湿
1, //灯光
0, //负离子
0, //节电
0, //换气
0,0,0,1,0,1,0,0,1,0 //....
};
char encode2[33]={
0, //上下扫风
0,0,0, //....
0, //左右扫风
0,0,0, //....
0,0, //温度显示
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //....
0, //节能
0, //...
1,1,0,0 //校验码
};
void starcode()
{
P34=0;
NO_Send(333);
P34=1;
Send(166) ;
}
void ConnectCode()
{
P34=0;
NO_Send(22);
P34=1;
Send(740);
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int i=0;
P34=0;
for(;;)
{
if(P13==0)
{
starcode();
for(i=0;i<35;i++)
{
if (encode1[i]==1)
high();
else
low();
}
ConnectCode();
for(i=0;i<33;i++)
{
if(encode2[i]==1)
high();
else
low();
}
Delay1000ms();
}
else
P34=0;
}
}
|