标题:
51单片机格力空调遥控器设计源码
[打印本页]
作者:
tanshi706
时间:
2018-1-31 15:53
标题:
51单片机格力空调遥控器设计源码
//51单片机格力空调遥控器
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define enTransmitt flag=1
#define disTransmitt flag=0
sfr T2MOD = 0XC9;
bit flag=0;
sbit IR38k =P2^3; //红外发射管
sbit key1=P1^1;
sbit key2=P1^3;
sbit key3=P1^5;
sbit key4=P1^7;
sbit key5=P1^0;
sbit key6=P1^4;
uchar KeyScan();
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,0x00,0x50,0x02}}; // 手动,自动转页(20度,冷气)
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;}
}
//============================================
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++){};
}
}
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<set_count)
;
endTransmitt();
//ir=1;
set_count=s_cnt_2;//11;//
//ir=1;
count =0;
TransmittLow();
while(count<set_count)
;
endTransmitt();
}
void send_logic1(unsigned int s_cnt_1,unsigned int s_cnt_2)
{
set_count=s_cnt_1;//
TransmittPulse();
count =0;
while(count<set_count)
;
endTransmitt();
//ir=1;
//=========================
set_count=s_cnt_2;//32;//
//ir=1;
count =0;
TransmittLow();
while(count<set_count)
;
endTransmitt();
}
void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2)
{
set_count =s_cnt_1;//180;// 9MS
TransmittPulse(); //start send pulse
count =0;
while(count<set_count)
{;}
endTransmitt();
set_count =s_cnt_2;//90;//4.5MS
count =0;
TransmittLow();
while(count<set_count)
{;}
endTransmitt();
}
void send_final_code()
{
set_count=28;//
count =0;
TransmittPulse();
while(count<set_count)
;
endTransmitt();
}
void send_8bit_code(uchar value)
{
uchar i,temp;
temp=value;
for(i=0;i<8;i++)
{
if(temp&0x01) send_logic1(11,32); //1.68ms
else send_logic0(11,11); //600US
temp=temp>>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();
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);
}
if(key5==0)
{
delayms(20);
if(key5==0)
{
return 5;
}
while(!key5);
}
if(key6==0)
{
delayms(20);
if(key6==0)
{
return 6;
}
while(!key6);
}
return 0 ;
}
复制代码
作者:
都市郎
时间:
2018-2-5 21:27
本来想验证下楼主程序的!可现在是寒冷的冬天,天气非常冷,再开空调怕小命不保呀!
作者:
niuge
时间:
2018-2-6 01:29
都市郎 发表于 2018-2-5 21:27
本来想验证下楼主程序的!可现在是寒冷的冬天,天气非常冷,再开空调怕小命不保呀!
开热空调
作者:
syf466
时间:
2018-2-6 11:16
感谢分享~~~很好的资料
作者:
zz.stt
时间:
2018-5-10 11:23
解码在哪里
作者:
DANFISH
时间:
2018-7-20 10:36
谢谢,我学习遥控器怎么关机。
作者:
花生的护法
时间:
2018-11-14 11:27
niuge 发表于 2018-2-6 01:29
开热空调
所有的格力空调都可以开吗?
作者:
花生的护法
时间:
2018-11-14 11:29
这个程序一般的格力空调都可以开吗?
作者:
cyu
时间:
2018-12-3 15:59
很优秀
作者:
庄周的小燕
时间:
2019-3-2 12:30
怎么好像用不了呢?
作者:
asd824313036
时间:
2019-3-30 16:00
感谢楼主分享
作者:
13828617332
时间:
2019-4-27 14:23
最近就是想做一个遥控器
作者:
yyhlsf
时间:
2019-4-27 19:34
谢谢分享
作者:
陈晓龙
时间:
2019-11-4 19:07
第160行是不是少了东西...
作者:
陈晓龙
时间:
2019-11-4 19:10
第156行那个函数是不是应该加一句IR^38=0,不然没有红外信号发射啊...
作者:
陈晓龙
时间:
2019-11-5 19:48
为什么不用可编程时钟输出呀?感觉用波特率发生器好复杂...看不懂,还有那两个捕获寄存器是做什么用的?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1