目前在做格力空調遙控器,但是不懂問題出在哪,剛開始寫的代碼,用一個簡易示波器測出來的延時數據和空調遙控器差不多,但是好像沒有用,后來加上了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;
}
}
|