|
10黑幣
論壇新人,求大神幫我解決
首先,我要控制的是我宿舍的空調(diào),美的的,型號如下:
IMG_20190415_223009.jpg (3.77 MB, 下載次數(shù): 38)
下載附件
2019-4-18 16:30 上傳
然后聽說美的空調(diào)紅外協(xié)議是R05d,然后就根據(jù)協(xié)議寫了一個程序
以下是我程序的具體內(nèi)容:
1,端口和延時函數(shù)
端口延時.png (121.17 KB, 下載次數(shù): 34)
下載附件
2019-4-18 16:39 上傳
2,中斷程序,產(chǎn)生38khz脈沖
中段.png (42.39 KB, 下載次數(shù): 32)
下載附件
2019-4-18 16:49 上傳
3,引導(dǎo)碼程序
引導(dǎo)碼程序.png (53.32 KB, 下載次數(shù): 36)
下載附件
2019-4-18 16:49 上傳
引導(dǎo).png (15.89 KB, 下載次數(shù): 28)
下載附件
2019-4-18 16:49 上傳
4,分隔符程序
間隔符.png (61.43 KB, 下載次數(shù): 38)
下載附件
2019-4-18 16:49 上傳
分隔.png (12.88 KB, 下載次數(shù): 44)
下載附件
2019-4-18 16:49 上傳
5,數(shù)據(jù)發(fā)送程序(發(fā)送char型數(shù)據(jù)和它的反碼)
void senddata_data(char x)
{
char irdata,i;
irdata=x;
for(i=0;i<8;i++)
{
endcount=14;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=42;
}
else
{
endcount=14;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=~x;
for(i=0;i<8;i++)
{
endcount=14;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=42;
}
else
{
endcount=14;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
}
開機.png (58.9 KB, 下載次數(shù): 32)
下載附件
2019-4-18 16:49 上傳
6,終止程序
結(jié)束符.png (32.75 KB, 下載次數(shù): 28)
下載附件
2019-4-18 16:49 上傳
終止.png (4.6 KB, 下載次數(shù): 37)
下載附件
2019-4-18 16:49 上傳
7,以下是主函數(shù),發(fā)送開機編碼
主函數(shù).png (218.23 KB, 下載次數(shù): 28)
下載附件
2019-4-18 16:55 上傳
8,附帶程序源碼
#include <reg52.h>
sbit P3_4 = P2^1; //???????
sbit key=P2^0; //?????
static bit OP; //????????0??1
static unsigned int count; //???????
static unsigned int endcount; //??????????????
static unsigned char flag; //?????????
void delay()
{
int i,j;
for(i = 0; i < 400; i++){
for(j = 0; j < 200; j++){
}
}
}
void sendbegin();
void senddata_data(char x);
void sendend();
void sendS();
void main(void)
{
count = 0;
flag = 0;
OP = 0;
P3_4 = 0;
EA = 1; //????CPU?ж?
TMOD = 0x11; //?趨???0??1?16λ??1
ET0 = 1; //?????0?ж?????
TH0 = 0xFF;
TL0 = 0xE8; //?趨??0?38K ????????26us?ж????
TR0 = 1;//???????
do{
if(key==0)
{
while(key==0);
delay();
sendbegin();
senddata_data(0xb2);
senddata_data(0x9f);
senddata_data(0x00);
sendS();
sendbegin();
senddata_data(0xb2);
senddata_data(0x9f);
senddata_data(0x00);
sendend();
}
}while(1);
}
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE8;
count++;
if (flag==1)
{
OP=~OP;
}
else
{
OP = 0;
}
P3_4 = OP;
}
void sendbegin()
{
endcount=114;
flag=1;
count=0;
do{}while(count<endcount);
endcount=114;
flag=0;
count=0;
do{}while(count<endcount);
}
void sendS()
{
endcount=12;
flag=1;
count=0;
do{}while(count<endcount);
endcount=135;
flag=0;
count=0;
do{}while(count<endcount);
}
void senddata_data(char x)
{
char irdata,i;
irdata=x;
for(i=0;i<8;i++)
{
endcount=14;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=42;
}
else
{
endcount=14;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=~x;
for(i=0;i<8;i++)
{
endcount=14;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=42;
}
else
{
endcount=14;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
}
void sendend()
{
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
}
|
|