|
- //51單片機格力空調(diào)遙控器
- #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; //紅外發(fā)射管
- 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}}; // 手動,自動轉(zhuǎn)頁(20度,冷氣)
- uchar code fengliang[][5]={{0x28,0x08,0x00,0x50,0x02},{0x19,0x08,0x00,0x50,0x02},
- {0x09,0x08,0x00,0x50,0x02}
- }; //自動模式風(fēng)量 小,中,大 (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}
- }; //自動,冷氣,除濕,送風(fēng)
- /*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},
- }; //開機,關(guān)機
- 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() //啟動和關(guān)閉
- {
- 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() //轉(zhuǎn)葉
- {
- 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() //風(fēng)量
- {
- 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;
- }
- }
- //============================主函數(shù)========================
- void main()
- {
- TimerInit();
- while(1)
- {
- key_value=KeyScan();
- switch(key_value)
- {
- case 1:ir_out1();delayms(200);break; // 開和關(guān)
- 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; //轉(zhuǎn)葉設(shè)置
- 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 ;
- }
復(fù)制代碼 |
評分
-
查看全部評分
|