格力空调遥控
经过本人几天的努力,格力空调遥控诞生了,有兴趣的可以转载,
附有原理图和PCB,以及源码
上图为PCB 三维图板效果
以上为原理图
/**********************************************************************\
**-- Copyright (c) UESTC Wang Shijing --------------- **----------------------------------------------------------------------
** Project Name: air_conditioner
** Project Date: May 9,2010
** Project Auth: Wangshijing
** Description: This project is just for the Gree Air_conditioner infrared remote
** controller
**
**----------------------------------------------------------------------
** Revision :
** Date:
** Notes:
-----------------------------------------------------------------------
\**********************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
//#include"Infrared.h" //just for the Gree air_conditioner
#define enTransmitt flag=1 #define disTransmitt flag=0 sfr T2MOD = 0XC9;
sbit ir = P1^2 ;
sbit IR38k =P1^0;
sbit speaker=P3^7;
#define keyboard P2
bit flag=0;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uint count=0,set_count=0; //==============================================
uchar fengliang_value=0; uchar key_value=0;
uchar wendu_value=0;
uchar mode_value=0;
uchar switch_value=0;
uchar zhuanye_value=0;
uchar code
zhuanye[][5]={{0x39,0x04,0x00,0x50,0x02},{0x79,0x04,0x0
0,0x50,0x02}}; // 手动,自动转页(20度,冷气)
/*uchar code fengliang[][5]={
{0x5b,0x0e,0x00,0x50,0x02},{0x6b,0x0e,0x00,0x50,0x02},
{0x7b,0x0e,0x00,0x50,0x02}
}; */
uchar
code fengliang[][5]={{0x28,0x08,0x00,0x50,0x02},{0x19,0x08,0x00,0x50,0x02},
{0x09,0x08,0x00,0x50,0x02}
}; //自动模式风量 小,中,大 (20度)
uchar code mode[][5]={
{0x58,0x00,0x00,0x50,0x02},{0x59,0x04,0x00,0x50,0x02},
{0x5a,0x04,0x00,0x50,0x02},{0x5b,0x04,0x00,0x50,0x02}
}; //自动,冷气,除湿,送风
/*uchar
code on_or_off[][5]={ {0x40,0x00,0x00,0x50,0x02},{0x48,0x00,0x00,0x50,0x02} }; */
uchar code on_or_off[][5]={
{0x39,0x08,0x00,0x50,0x02},{0x31,0x08,0x00,0x50,
0x02},
{0x59,0x08,0x00,0x50,0x02},{0x51,0x08,0x00,0x50,0x02},
{0x79,0x08,0x00,0x50,0x02},{0x71,0x08,0x00,0x50,0x02},
}; //开机,关机
uchar code wendu[][5]={
{0x59,0x00,0x00,0x50,0x02},{0x59,0x01,0x00,0x50,0x02},
{0x59,0x02,0x00,0x50,0x02},{0x59,0x03,0x00,0x50,0x02},
{0x59,0x04,0x00,0x50,0x02},{0x59,0x05,0x00,0x50,0x02},
{0x59,0x06,0x00,0x50,0x02},{0x59,0x07,0x00,0x50,0x02},
{0x59,0x08,0x00,0x50,0x02},{0x59,0x09,0x00,0x50,0x02},
{0x59,0x0a,0x00,0x50,0x02},{0x59,0x0b,0x00,0x50,0x02},
{0x59,0x0c,0x00,0x50,0x02},{0x59,0x0d,0x00,0x50,0x02},
{0x59,0x0e,0x00,0x50,0x02}
}; //温度值
void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2);
void send_8bit_code(uchar value);
void send_4bit_code(uchar value);
void send_final_code();
void ir_out1() //启动和关闭
{
send_precode(180,90);
send_8bit_code(on_or_off[switch_value][0]);
send_8bit_code(on_or_off[switch_value][1]);
send_8bit_code(on_or_off[switch_value][2]);
send_8bit_code(on_or_off[switch_value][3]);
send_4bit_code(on_or_off[switch_value][4]);
//send_final_code();
// key_value=0;
switch_value++;
if(switch_value==6){ switch_value=0; }
}
void ir_out2() //wendu--
{
send_precode(180,90);
send_8bit_code(wendu[wendu_value][0]);
send_8bit_code(wendu[wendu_value][1]);
send_8bit_code(wendu[wendu_value][2]);
send_8bit_code(wendu[wendu_value][3]);
send_4bit_code(wendu[wendu_value][4]);
send_final_code();
wendu_value--;
if(wendu_value==0) {wendu_value=15;}
}
void ir_out3() //wendu++
{
send_precode(180,90);
send_8bit_code(wendu[wendu_value][0]);
send_8bit_code(wendu[wendu_value][1]);
send_8bit_code(wendu[wendu_value][2]);
send_8bit_code(wendu[wendu_value][3]);
send_4bit_code(wendu[wendu_value][4]);
send_final_code();
wendu_value++;
if(wendu_value==15) { wendu_value=0;} }
void ir_out4()//mode choose
{
send_precode(180,90);
send_8bit_code(mode[mode_value][0]);
send_8bit_code(mode[mode_value][1]);
send_8bit_code(mode[mode_value][2]);
send_8bit_code(mode[mode_value][3]);
send_4bit_code(mode[mode_value][4]);
send_final_code();
mode_value++;
if(mode_value==4)
{ mode_value=0;}
}
void ir_out5() //转叶
{
send_precode(180,90);
send_8bit_code(zhuanye[zhuanye_value][0]);
send_8bit_code(zhuanye[zhuanye_value][1]);
send_8bit_code(zhuanye[zhuanye_value][2]);
send_8bit_code(zhuanye[zhuanye_value][3]);
send_4bit_code(zhuanye[zhuanye_value][4]);
send_final_code();
zhuanye_value++;
if(zhuanye_value==2) {zhuanye_value=0;} }
void ir_out6() //风量
{
send_precode(180,90);
send_8bit_code(fengliang[fengliang_value][0]);
send_8bit_code(fengliang[fengliang_value][1]);
send_8bit_code(fengliang[fengliang_value][2]);
send_8bit_code(fengliang[fengliang_value][3]);
send_4bit_code(fengliang[fengliang_value][4]);
send_final_code();
fengliang_value++;
if(fengliang_value==3) {fengliang_value=0;} }
//============================================
unsigned char KeyScan(); void delayms(unsigned char ms) {
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++){};
}
}
void BUZZ(unsigned int ms) {
speaker=0;
delayms(ms);
speaker=1;
}
void TimerInit()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0XfF;
TL0=221; //50US
T2CON=0x00;
T2MOD=0x02; //enable T2's wave output through T2
pin(P10)
RCAP2H=(65536-11059/38/4)>>8; //output frequency is
38KHz
RCAP2L=(65536-11059/38/4)&0xff;
}
void TransmittPulse() {
enTransmitt;
// ir=0;
TR0=1;
TR2=1;
}
void TransmittLow() {
//ir=1;
TR0=1;
disTransmitt;
TR2=0;
IR38k=1;
}
void endTransmitt() {
//ir=0;
TR0=0;
TR2=0;
IR38k=1; //JIEZHI }
void send_logic0(unsigned int s_cnt_1,unsigned int
s_cnt_2)
{
set_count=s_cnt_1;//
TransmittPulse();
count =0;
while(count>1;
}
}
void send_4bit_code(uchar value) {
uchar i,temp;
temp=value;
for(i=0;i<4;i++)
{
if(temp&0x01) send_logic1(11,32); //1.68ms
else send_logic0(11,11); //600US
temp=temp>>1;
}
}
//============================主函数
========================
void main()
{
TimerInit();
// AT24C_Init();
while(1)
{
key_value=KeyScan();
switch(key_value)
{
case 1:ir_out1();delayms(200);break; // 开和关
case 2:ir_out2();delayms(200);break; // 温度-
case 3:ir_out3();delayms(200);break; // 温度+.
case 4:ir_out4();delayms(200);break; // 模式选择
case 5:ir_out5();delayms(200);break; //转叶设置
case 6:ir_out6();delayms(200);break;
//default:ir=1;break;
}
}
}
void timer0(void) interrupt 1 {
TH0=0XfF;
TL0=221; //50us
count++;
if(flag)
TR2=1; //IR38k=0;
else TR2=0;//IR38k=1;
}
unsigned char KeyScan() {
/*-------------第一列扫描-----------------*/
if(key1==0)
{
delayms(20);
if(key1==0)
{
return 1;
}
while(!key1);
}
if(key2==0)
{
delayms(20);
if(key2==0)
{
return 2;
}
while(!key2);
}
if(key3==0)
{
delayms(20);
if(key3==0)
{
return 3;
}
while(!key3);
}
if(key4==0)
{
delayms(20);
if(key4==0)
{
return 4;
}
while(!key4);
}
return 0 ;
}
//============================以上为C代码==========================================