51单片机格力空调遥控器.docx
《51单片机格力空调遥控器.docx》由会员分享,可在线阅读,更多相关《51单片机格力空调遥控器.docx(12页珍藏版)》请在冰豆网上搜索。
51单片机格力空调遥控器
1.//51单片机格力空调遥控器
2.
3.#include
4.#include
5.#defineucharunsignedchar
6.#defineuint unsignedint
7.#defineenTransmitt flag=1
8.#definedisTransmitt flag=0
9.sfr T2MOD =0XC9;
10.bit flag=0;
11.sbitIR38k=P2^3; //红外发射管
12.sbitkey1=P1^1;
13.sbitkey2=P1^3;
14.sbitkey3=P1^5;
15.sbitkey4=P1^7;
16.sbitkey5=P1^0;
17.sbitkey6=P1^4;
18.ucharKeyScan();
19.uint count=0,set_count=0;
20.ucharfengliang_value=0;
21.ucharkey_value=0;
22.ucharwendu_value=0;
23.ucharmode_value=0;
24.ucharswitch_value=0;
25.ucharzhuanye_value=0;
26.ucharcodezhuanye[][5]={{0x39,0x04,0x00,0x50,0x02},{0x79,0x04,0x00,0x50,0x02}}; //手动,自动转页(20度,冷气)
27.ucharcode fengliang[][5]={{0x28,0x08,0x00,0x50,0x02},{0x19,0x08,0x00,0x50,0x02},
28. {0x09,0x08,0x00,0x50,0x02}
29. };//自动模式风量小,中,大 (20度)
30.ucharcode mode[][5]={
31. {0x58,0x00,0x00,0x50,0x02},{0x59,0x04,0x00,0x50,0x02},
32. {0x5a,0x04,0x00,0x50,0x02},{0x5b,0x04,0x00,0x50,0x02}
33. }; //自动,冷气,除湿,送风
34./*ucharcode on_or_off[][5]={{0x40,0x00,0x00,0x50,0x02},{0x48,0x00,0x00,0x50,0x02}};*/
35.ucharcode on_or_off[][5]={
36. {0x39,0x08,0x00,0x50,0x02},{0x31,0x08,0x00,0x50,0x02},
37. {0x59,0x08,0x00,0x50,0x02},{0x51,0x08,0x00,0x50,0x02},
38. {0x79,0x08,0x00,0x50,0x02},{0x71,0x08,0x00,0x50,0x02},
39. };//开机,关机
40.ucharcode wendu[][5]={
41. {0x59,0x00,0x00,0x50,0x02},{0x59,0x01,0x00,0x50,0x02},
42. {0x59,0x02,0x00,0x50,0x02},{0x59,0x03,0x00,0x50,0x02},
43. {0x59,0x04,0x00,0x50,0x02},{0x59,0x05,0x00,0x50,0x02},
44. {0x59,0x06,0x00,0x50,0x02},{0x59,0x07,0x00,0x50,0x02},
45. {0x59,0x08,0x00,0x50,0x02},{0x59,0x09,0x00,0x50,0x02},
46. {0x59,0x0a,0x00,0x50,0x02},{0x59,0x0b,0x00,0x50,0x02},
47. {0x59,0x0c,0x00,0x50,0x02},{0x59,0x0d,0x00,0x50,0x02},
48. {0x59,0x0e,0x00,0x50,0x02}
49. };//温度值
50.
51.voidsend_precode(unsignedints_cnt_1,unsignedints_cnt_2);
52.voidsend_8bit_code(ucharvalue);
53.voidsend_4bit_code(ucharvalue);
54.voidsend_final_code();
55.voidir_out1()//启动和关闭
56.{
57.send_precode(180,90);
58.send_8bit_code(on_or_off[switch_value][0]);
59.send_8bit_code(on_or_off[switch_value][1]);
60.send_8bit_code(on_or_off[switch_value][2]);
61.send_8bit_code(on_or_off[switch_value][3]);
62.send_4bit_code(on_or_off[switch_value][4]);
63.//send_final_code();
64.//key_value=0;
65. switch_value++;
66.if(switch_value==6){switch_value=0;}
67.
68.}
69.voidir_out2()//wendu--
70.{
71.
72.send_precode(180,90);
73.send_8bit_code(wendu[wendu_value][0]);
74.send_8bit_code(wendu[wendu_value][1]);
75.send_8bit_code(wendu[wendu_value][2]);
76.send_8bit_code(wendu[wendu_value][3]);
77.send_4bit_code(wendu[wendu_value][4]);
78.send_final_code();
79.wendu_value--;
80.if(wendu_value==0) {wendu_value=15;}
81.
82.}
83.voidir_out3()//wendu++
84.{
85.send_precode(180,90);
86.send_8bit_code(wendu[wendu_value][0]);
87.send_8bit_code(wendu[wendu_value][1]);
88.send_8bit_code(wendu[wendu_value][2]);
89.send_8bit_code(wendu[wendu_value][3]);
90.send_4bit_code(wendu[wendu_value][4]);
91.send_final_code();
92.wendu_value++;
93.if(wendu_value==15){wendu_value=0;}
94.}
95.voidir_out4()//modechoose
96.{
97.send_precode(180,90);
98.send_8bit_code(mode[mode_value][0]);
99.send_8bit_code(mode[mode_value][1]);
100.send_8bit_code(mode[mode_value][2]);
101.send_8bit_code(mode[mode_value][3]);
102.send_4bit_code(mode[mode_value][4]);
103.send_final_code();
104.mode_value++;
105.if(mode_value==4)
106.{mode_value=0;}
107.
108.}
109.voidir_out5()//转叶
110.{
111.send_precode(180,90);
112.send_8bit_code(zhuanye[zhuanye_value][0]);
113.send_8bit_code(zhuanye[zhuanye_value][1]);
114.send_8bit_code(zhuanye[zhuanye_value][2]);
115.send_8bit_code(zhuanye[zhuanye_value][3]);
116.send_4bit_code(zhuanye[zhuanye_value][4]);
117.send_final_code();
118. zhuanye_value++;
119.if(zhuanye_value==2) {zhuanye_value=0;}
120.}
121.voidir_out6()//风量
122.{
123.send_precode(180,90);
124.send_8bit_code(fengliang[fengliang_value][0]);
125.send_8bit_code(fengliang[fengliang_value][1]);
126.send_8bit_code(fengliang[fengliang_value][2]);
127.send_8bit_code(fengliang[fengliang_value][3]);
128.send_4bit_code(fengliang[fengliang_value][4]);
129.send_final_code();
130. fengliang_value++;
131.if(fengliang_value==3) {fengliang_value=0;}
132.}
133.//============================================
134.
135.voiddelayms(unsignedcharms)
136.{
137.unsignedchari;
138.while(ms--)
139.{
140. for(i=0;i<120;i++){};
141.}
142.}
143.voidTimerInit()
144.{
145.EA=1;
146.ET0=1;
147.TMOD=0X01;
148.TH0=0XfF;
149.TL0=221; //50US
150.
151.T2CON=0x00;
152. T2MOD=0x02; //enableT2'swaveoutputthroughT2pin(P10)
153. RCAP2H=(65536-11059/38/4)>>8;//outputfrequencyis38KHz
154. RCAP2L=(65536-11059/38/4)&0xff;
155.}
156.voidTransmittPulse()
157.{
158. enTransmitt;
159.//ir=0;
160.TR0=1;
161.TR2=1;
162.}
163.voidTransmittLow()
164.{
165.//ir=1;
166.TR0=1;
167.disTransmitt;
168.TR2=0;
169.IR38k=1;
170.}
171.voidendTransmitt()
172.{
173.//ir=0;
174.TR0=0;
175.TR2=0;
176.IR38k=1; //JIEZHI
177.}
178.voidsend_logic0(unsignedints_cnt_1,unsignedints_cnt_2)
179.{
180.set_count=s_cnt_1;//
181.TransmittPulse();
182.count=0;
183.
184.while(count185.;
186.endTransmitt();
187.//ir=1;
188.set_count=s_cnt_2;//11;//
189.//ir=1;
190.count=0;
191.TransmittLow();
192.
193.while(count194.;
195.endTransmitt();
196.}
197.voidsend_logic1(unsignedints_cnt_1,unsignedints_cnt_2)
198.{
199.set_count=s_cnt_1;//
200.TransmittPulse();
201.
202.count=0;
203.
204.while(count205.;
206.endTransmitt();
207.//ir=1;
208.//=========================
209.set_count=s_cnt_2;//32;//
210.//ir=1;
211.count=0;
212.
213.TransmittLow();
214.
215.while(count216.;
217.endTransmitt();
218.}
219.voidsend_precode(unsignedints_cnt_1,unsignedints_cnt_2)
220.{
221.set_count=s_cnt_1;//180;//9MS
222.TransmittPulse(); //startsendpulse
223.count=0;
224.
225.while(count226.{;}
227.endTransmitt();
228.set_count=s_cnt_2;//90;//4.5MS
229.
230.count=0;
231.TransmittLow();
232.while(count233.{;}
234.endTransmitt();
235.
236.}
237.voidsend_final_code()
238.{
239.set_count=28;//
240.
241.count=0;
242.TransmittPulse();
243.while(count244.;
245.endTransmitt();
246.}
247.voidsend_8bit_code(ucharvalue)
248.{
249.uchari,temp;
250.temp=value;
251.for(i=0;i<8;i++)
252.{
253. if(temp&0x01) send_logic1(11,32);//1.68ms
254. else send_logic0(11,11);//600US
255. temp=temp>>1;
256.}
257.}
258.voidsend_4bit_code(ucharvalue)
259.{
260.uchari,temp;
261.temp=value;
262.for(i=0;i<4;i++)
263.{
264.if(temp&0x01) send_logic1(11,32);//1.68ms
265. else send_logic0(11,11);//600US
266.
267. temp=temp>>1;
268.}
269.}
270.//============================主函数========================
271.voidmain()
272.{
273. TimerInit();
274. while
(1)
275.{
276. key_value=KeyScan();
277. switch(key_value)
278. {
279. case1:
ir_out1();delayms(200);break; // 开和关
280. case2:
ir_out2();delayms(200);break; // 温度-
281. case3:
ir_out3();delayms(200);break; // 温度+.
282. case4:
ir_out4();delayms(200);break; //模式选择
283. case5:
ir_out5();delayms(200);break; //转叶设置
284. case6:
ir_out6();delayms(200);break;
285. //default:
ir=1;break;
286. }
287.}
288.}
289.voidtimer0(void)interrupt1
290.{
291.TH0=0XfF;
292.TL0=221;//50us
293.count++;
294.if(flag)
295. TR2=1;//IR38k=0;
296.elseTR2=0;//IR38k=1;
297.
298.}
299.unsignedcharKeyScan()
300.{
301.
302./*-------------第一列扫描-----------------*/
303.
304.
305. if(key1==0)
306.{
307. delayms(20);
308. if(key1==0)
309. {
310. return1;
311. }
312. while(!
key1);
313.}
314.if(key2==0)
315.{
316. delayms(20);
317. if(key2==0)
318. {
319. return2;
320. }
321. while(!
key2);
322.}
323.
324.if(key3==0)
325.{
326. delayms(20);
327. if(key3==0)
328. {
329. return3;
330. }
331. while(!
key3);
332.}
333.if(key4==0)
334.{
335. delayms(20);
336. if(key4==0)
337. {
338. return4;
339. }
340. while(!
key4);
341.}
342. if(key5==0)
343.{
344. delayms(20);
345. if(key5==0)
346. {
347. return5;
348. }
349. while(!
key5);
350.}
351. if(key6==0)
352.{
353. delayms(20);
354. if(key6==0)
355. {
356. return6;
357. }
358. while(!
key6);
359.}
360. return0;
361.}