|
目前在做格力空調(diào)遙控器,但是不懂問題出在哪,剛開始寫的代碼,用一個(gè)簡(jiǎn)易示波器測(cè)出來的延時(shí)數(shù)據(jù)和空調(diào)遙控器差不多,但是好像沒有用,后來加上了38Khz之后,用示波器再測(cè)就亂碼了....代碼如下,P34是我的紅外發(fā)射,P13是我的按鍵,目前只寫了開的功能,校驗(yàn)碼也是按照示波器得到的數(shù)據(jù)寫的,有一個(gè)一秒的延時(shí),是示波器用到的,不然測(cè)不出來.....
#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) //載波不發(fā)射
{
while(i--)
{
P34 = 0;
Delay9us();
Delay9us();
Delay9us();
}
}
void Send(volatile unsigned int i) //載波發(fā)射
{
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, //開關(guān)
0,0, //風(fēng)速
0, //掃風(fēng)
0, //睡眠
0,0,0,0,//溫度
0,0,0,0,0,0,0,0,//定時(shí)數(shù)據(jù)
0, //加濕
1, //燈光
0, //負(fù)離子
0, //節(jié)電
0, //換氣
0,0,0,1,0,1,0,0,1,0 //....
};
char encode2[33]={
0, //上下掃風(fēng)
0,0,0, //....
0, //左右掃風(fēng)
0,0,0, //....
0,0, //溫度顯示
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //....
0, //節(jié)能
0, //...
1,1,0,0 //校驗(yàn)碼
};
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;
}
}
|
|