51单片机红外遥控格力空调程序

合集下载

基于51单片机的红外遥控程序(新)

基于51单片机的红外遥控程序(新)
P2=0x7f;//0x78
P1=table[shuma];
/* delay_ms(3);
P2=0xb8;
P1=table[bai];
delay_ms(3);
P2=0xd8;
P1=table[shi];
delay_ms(3);
P2=0xe8;
P1=table[ge];
}
///////////////////////////////////////////////////////////////////////
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i;
//使用12M晶振 适用于TC9012芯片,其他芯片请自行更改解码时序
#include <REGX52.h>
#include<stdio.h>
#include<intrins.h>
////////////////////////////////////////////////
#define TURE 1
break;//2
case 2:
display(3);
fengming();
SBUF=3;
TI=0;
delay_ms(10);
break;//3
case 3:
display(4);
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
/******************************************************************/

基于51单片机的红外遥控编码解码的C语言程序和电路[1]

基于51单片机的红外遥控编码解码的C语言程序和电路[1]

请勿转载!!!作品功能简介:当学习键按下后,红外接收头便可将接受到的信号存储到单片机中。

在接受到通用遥控器发出的信号后,如果按下发射键,单片机将调出刚刚储存的信息,通过红外发射头发射出和遥控器一样的信号来达到控制的作用。

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit studylamp=P2^7;sbit lamp=P2^6;sbit studykey=P3^2;sbit remotein=P1^1;sbit remoteout=P1^0;sbit txkey=P2^0;uint i,j,m=255,n,k,s;uchar idata remotedata[206];uint head;uint remdata;//一毫秒延时程序delay1ms(uint t){for(i=0;i<t;i++)for(i=0;j<120;j++);}//初始化函数clearmen(){studylamp=1;lamp=1;remoteout=0;remotein=1;for(i=0;i<206;i++){remotedata[i]=0x00;}IE=0x00;IP=0x01;TMOD=0x22;PCON=0X00;TH1=0xf3;TL1=0xf3;IT0=1;EX0=1;EA=1;}//键功能函数void key_tx(){if(txkey==0){delay1ms(1);if(txkey==0){while(txkey==0);ET1=1;TR1=1;for(i=head;i>0;i--);remoteout=0;ET1=0;TR1=0;n=0;while(1){lamp=0;studylamp=1;if(remotedata[n]==0x00){delay1ms(10);break;}for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}n++;ET1=1;TR1=1;for(i=remotedata[n];i>0;i--);remoteout=0;ET1=0;TR1=0;n++;}}}}//主函数void main(){clearmen(); //初始化while(1){key_tx(); //按键扫描}}//40KHz发生器void time_intt1(void) interrupt 3{remoteout=~remoteout;}//外中断0void intt0(void) interrupt 0{ET1=0;TR1=0;EX0=0;EA=0;head=0;while(studykey==0);studylamp=0;lamp=1;while(remotein==1);head=0;while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();head++;}n=0;remdata=0x0000;while(1){while(remotein==1){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}if(remdata>m) //高电平>5毫秒退出 {remotedata[n]=0x00;EX0=1;EA=1;goto end;}remotedata[n]=remdata;n++;remdata=0x0000;while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}remotedata[n]=remdata;n++;remdata=0x00;}end: lamp=0;studylamp=0;}电路:实物:2009-06-25 12:39。

51单片机设计的红外线遥控器电路图及工作原理

51单片机设计的红外线遥控器电路图及工作原理

51单片机设计的红外线遥控器电路图及工作原理你家里是否有一个电视机遥控器或者空调机遥控器呢?你是否也想让它遥控其他的电器甚至让它遥控您的电脑呢?那好,跟我一起做这个“红外遥控解码器”。

该小制作所需要的元件很少:单片机TA89C2051一只,RS232接口电平与TTL电平转换心片MAX232CPE 一只,红外接收管一只,晶振11.0592MHz,电解电容10uF4只,10uF 一只,电阻1K1个,300欧姆左右1个,瓷片电容30P2个。

发光二极管8个。

价钱不足20元。

电路图及原理:主控制单元是单片机AT89C2051,中断口INT0跟红外接受管U1相连,接收红外信号的脉冲,8个发光二极管作为显示解码输出(也可以用来扩展接其他控制电路),U3是跟电脑串行口RS232相连时的电平转换心片,9、10脚分别与单片机的1、2脚相连,(1脚为串行接收,2脚为串行发送),MAX232CPE的7、8脚分别接电脑串行口的2(接收)脚、3(发送脚)。

晶振采用11.0592MHz,这样才能使得通讯的波特率达到9600b/s,电脑一般默认值是9600b/s、8位数据位、1位停止位、无校验位。

电路就这么简单了,现在分析具体的编程过程吧。

如图所示,panasonic遥控器的波形是这样的(经过反复测试的结果)。

开始位是以3.6ms低电平然后是3.6ms高电平,然后数据表示形式是0.9ms低电平0.9ms 高电平周期为1.8ms表示“0”,0.9ms低电平2.4ms高电平周期为3.3ms表示“1”,编写程序时,以大于3.4ms小于3.8ms高电平为起始位,以大于2.2ms小于2.7ms高电平表示“1”,大于0.84ms小于1.11ms高电平表示“0”。

因此,我们主要用单片机测量高电平的长短来确定是“1”还是“0”即可。

定时器0的工作方式设置为方式1:mov tmod,#09h,这样设置定时器0即是把GATE置1,16位计数器,最大计数值为2的16次方个机器周期,此方式由外中断INT0控制,即INT0为高时才允许计数器计数。

51单片机红外遥控解码程序

51单片机红外遥控解码程序

51单片机红外遥控解码程序类别:单片机/DSP 阅读:2975编者按:以下是网友编写的遥控解码程序!一种用延时等待的解码方法,比较容易理解,但缺点是占用CPU运行时间,第二种方法用定时器和外中断的解码方法,初学不易理解,但优点也很明显,第二种方法如果能解决连发解码就比较完美,更完善的红外遥控解码程序,请参考本站TOPA V-2008,TOP51-2005所配程序。

解码方法一;//单片机接收红外解读程序\\;硬件结构:8951,P0口数码管段码,P2.0-P2.3为位,P1为8个LED;P3.2为红外接收头,P2.7蜂鸣器,晶振12M;适用UPD6121 6122芯片接收;---------------------------------------------------------ORG 0000HAJMP MAIN ;转入主程序ORG 0003H ;外部中断P3.2脚INT0入口地址AJMP INT ;转入外部中断服务子程序(解码程序);以下为主程序进行CPU中断方式设置MAIN: SETB EA ;打开CPU总中断请求SETB IT0 ;设定INT0的触发方式为脉冲下降沿触发SETB EX0 ;打开INT0中断请求AJMP $;以下为进入P3.2脚外部中断子程序,也就是解码程序INT: CLR EA ;暂时关闭CPU的所有中断请求MOV R6,#10SB: ACALL YS1 ;调用882微秒延时子程序JB P3.2,EXIT ;延时882微秒后判断P3.2脚是否出现高; 电平如果有就退出解码程序DJNZ R6, SB ;重复10次,目的是检测在8820微秒内;如果出现高电平就退出解码程序;以上完成对遥控信号的9000微秒的初始低电平信号的识别。

JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码MOV R1,#1AH ;设定1AH为起始RAM区MOV R2,#4;PP: MOV R3,#8JJJJ: JNB P3.2,$ ;等待地址码第一位的高电平信号LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信;号此时的高低电平状态MOV C,P3.2 ;将P3.2引脚此时的电平状态0或1存入C中JNC UUU ;如果为0就跳转到UUULCALL YS3;UUU: MOV A,@R1 ;将R1中地址的给ARRC A ;将C中的值0或1移入A中的最低位MOV @R1,A ;将A中的数暂时存放在R1中DJNZ R3,JJJJ ;接收地址码的高8位INC R1 ;对R1中的值加1,换下一个RAMDJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据反; 码,存放在1AH/1BH/1CH/1DH的RAM中MOV A,1CH ;比较数据码和数据反码是否正确?CPL AXRL A,1DH ;将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确JNZ EXITMOV DPTR,#TAB ;表头地址送指针MOV A,1DHANL A,#0FH ;相与,得到低四位码MOVC A,@A+DPTRMOV 1EH,A ;查表得表码存入1EHMOV A,1DHSWAP AANL A,#0FHMOVC A,@A+DPTRMOV 1FH,A ;查表得高四位码存入1FMOV R7,#20HDISP:MOV P0,1FH ;送数码管显示CLR P2.1ACALL YS2SETB P2.1MOV P0,1EHCLR P2.2ACALL YS2SETB P2.2MOV P1,1DH ;将按键的键值通过P1口的8个LED显示出来!CLR P2.7 ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功LCALL YS2SETB P2.7 ;蜂鸣器停止DJNZ R7,DISPEXIT: SETB EA ;允许中断RETI ;退出解码子程序YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒D1: MOV R5,#20DJNZ R5,$DJNZ R4,D1RETYS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒D2: MOV R5,#235DJNZ R5,$DJNZ R4,D2RETYS3: MOV R4,#2 ;延时程序3,精确延时1000微秒D3:MOV R5,#248DJNZ R5,$DJNZ R4,D3RETTAB: DB 0C0H,0DEH,0A2H,8AH,9CH,89H,81H,0DAH,80H,88H,90H,85H,0E1H,86H,0A1H,0B1H;数据表,0-9-A-FEND解码方法二你的解码程序和我现在用的解码程序大体是一样的,我自己实际做了一下,发现按下遥控器,接收到红外信号后,数码管闪的厉害。

自己写的51单片机的红外线遥控接收程序(C语言)

自己写的51单片机的红外线遥控接收程序(C语言)

//51单片机做的红外遥控实验(C语言)#include<reg51.h>#define u8 unsigned char#define u16 unsigned int#define ID 0x00 //本遥控器的ID号sbit ir=P3^3;code u8 seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的段码code u8 s[]={1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E}; u8 buf[4];bit ir_f=0;u8 nu;void delay(u16 x){while(x--);}void show(u16 x){u8 i=0,k=0;u8 s[4];kk:s[i]=x%10;if((x/10)>=1){x=x/10;i++;goto kk;}k=i+1;for(i=0;i<k;i++){P0=seg[s[i]];P2=~(8>>i);delay(300);P0=0XFF;P2=0XFF;}}void timer0_init(){TH0=0;TL0=0;TMOD|=0x01;TR0=0;}u16 low_test(){u16 t;TR0=1;while((ir==0)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0; //t=(TH*256+TL0);//机器周期数return t;}u16 high_test(){u16 t;TR0=1;while((ir==1)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0;return t;}/*u16 time_test(bit x){}*/u8 receive_8bit(){u8 d,i;u16 t;for(i=0;i<8;i++){t=low_test();t=high_test();d>>=1;if((t>=2750)&&(t<=3100)){d|=0x80;}}return d;}void ir_decode(){u16 t;u8 i;if(ir==0)//有遥控信号{t=low_test();//8295-9000us,倍频的是16590-18000if((t>=14500)&&(t<=18000))//检查引导码低电平时间{t=high_test();if((t>=8000)&&(t<=9000))//检查高电平{for(i=0;i<4;i++){buf[i]=receive_8bit();}if(buf[0]==(~buf[1]))//检查系统码是否正确{if(buf[0]==ID){if(buf[2]==(~buf[3])){//具体按键处理ir_f=1; //遥控有效}}}}}}}/*void key(){if(buf[2]==0x40){P1^=(1<<0);}if(buf[2]==0x48){P1^=(1<<1);}}*/void ir_execuse(){if(ir_f==1){switch(buf[2]){case 0x40:P1^=(1<<0);break;case 0x48:P1^=(1<<1);break;case 0x04:P1^=(1<<2);break;case 0x02:P1^=(1<<3);break;case 0x05:P1^=(1<<4);break;case 0x54:P1^=(1<<5);break;case 0x0A:P1^=(1<<6);break;case 0x1E:P1^=(1<<7);break;}ir_f=0;}}void show_d(){u8 j;for(j=0;j<10;j++){if(s[j]==buf[2]){nu=j;break;}}show(nu);}void isr_init(){EA=1;EX1=1;//外部中断,一直看3.3有没有下降沿。

51单片机红外遥控解码,很详细(汇编语言,C语言等)

51单片机红外遥控解码,很详细(汇编语言,C语言等)
//k[i]=TH0;
//i++;
if(TH0<3)
b=1;
else b=0;
TH0=0;
TL0=0;
}
uchar hw_key()
{
uchar j,m;
//i=0;
hw_start(); //等待低电平到来
hw_pulse();
for(j=0;j<24;j++) //测试用户码脉冲宽度
{
hw_pulse();
}
for(j=0;j<8;j++) //测试键码脉冲宽度
{
hw_pulse();
if(b==1)
m=(m<<1)|1;
else
m<<=1;
}
return m; //键码
}
while(in==0); //高电平到了,
TR0=0; //关闭定+;
TH0=0;
TL0=0;
TR0=1; //高电平到了,启动定时器1,测试高电平宽度
while(in==1); //低电平到了,
TR0=0; //关闭定时器1,高电平宽度测试完
请注意甄别内容中的联系方式诱导购买等信息谨防诈骗
51单片机红外遥控解码,很详细(汇编语言,C语言等)
单片机源程序如下:
#include
#define hw_hs0038_ENTITY
#include "hw_hs0038.h"
sbit in=P3^2;
//uchar i=0;
//uchar k[2];
bit bdata b=0;
/*
void timer0(void) interrupt 1 using 1

51单片机格力空调遥控器

51单片机格力空调遥控器

1.//51单片机格力空调遥控器2.3.#include <reg52.h>4.#include <intrins.h>5.#define uchar unsigned char6.#define uint unsigned int7.#define enTransmitt flag=18.#define disTransmitt flag=09.sfr T2MOD = 0XC9;10.bit flag=0;11.sbit IR38k =P2^3; //红外发射管12.sbit key1=P1^1;13.sbit key2=P1^3;14.sbit key3=P1^5;15.sbit key4=P1^7;16.sbit key5=P1^0;17.sbit key6=P1^4;18.uchar KeyScan();19.uint count=0,set_count=0;20.uchar fengliang_value=0;21.uchar key_value=0;22.uchar wendu_value=0;23.uchar mode_value=0;24.uchar switch_value=0;25.uchar zhuanye_value=0;26.uchar codezhuanye[][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,0 x02},28. {0x09,0x08,0x00,0x50,0x02}29. }; //自动模式风量小,中,大 (20度)30.uchar code 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.uchar code 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.uchar code 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.void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2);52.void send_8bit_code(uchar value);53.void send_4bit_code(uchar value);54.void send_final_code();55.void ir_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.void ir_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.void ir_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.void ir_out4()//mode choose96.{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.void ir_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.void ir_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.void delayms(unsigned char ms)136.{137.unsigned char i;138.while(ms--)139.{140. for(i=0;i<120;i++){};141.}142.}143.void TimerInit()144.{145.EA=1;146.ET0=1;147.TMOD=0X01;148.TH0=0XfF;149.TL0=221; //50US150.151.T2CON=0x00;152. T2MOD=0x02; //enable T2's wave output through T2 pin(P10) 153. RCAP2H=(65536-11059/38/4)>>8; //output frequency is 38KHz 154. RCAP2L=(65536-11059/38/4)&0xff;155.}156.void TransmittPulse()157.{158. enTransmitt;159.// ir=0;160.TR0=1;161.TR2=1;162.}163.void TransmittLow()164.{165.//ir=1;166.TR0=1;167.disTransmitt;168.TR2=0;169.IR38k=1;170.}171.void endTransmitt()172.{173.//ir=0;174.TR0=0;175.TR2=0;176.IR38k=1; //JIEZHI177.}178.void send_logic0(unsigned int s_cnt_1,unsigned int s_cnt_2) 179.{180.set_count=s_cnt_1;//181.TransmittPulse();182.count =0;183.184.while(count<set_count)185.;186.endTransmitt();187.//ir=1;188.set_count=s_cnt_2;//11;//189.//ir=1;190.count =0;191.TransmittLow();192.193.while(count<set_count)194.;195.endTransmitt();196.}197.void send_logic1(unsigned int s_cnt_1,unsigned int s_cnt_2) 198.{199.set_count=s_cnt_1;//200.TransmittPulse();201.202.count =0;203.204.while(count<set_count)205.;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(count<set_count)217.endTransmitt();218.}219.void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2) 220.{221.set_count =s_cnt_1;//180;// 9MS222.TransmittPulse(); //start send pulse223.count =0;224.225.while(count<set_count)226.{;}227.endTransmitt();228.set_count =s_cnt_2;//90;//4.5MS229.230.count =0;231.TransmittLow();232.while(count<set_count)233.{;}234.endTransmitt();235.236.}237.void send_final_code()238.{239.set_count=28;//240.241.count =0;242.TransmittPulse();243.while(count<set_count)244.;245.endTransmitt();246.}247.void send_8bit_code(uchar value)249.uchar i,temp;250.temp=value;251.for(i=0;i<8;i++)252.{253. if(temp&0x01) send_logic1(11,32); //1.68ms254. else send_logic0(11,11); //600US255. temp=temp>>1;256.}257.}258.void send_4bit_code(uchar value)259.{260.uchar i,temp;261.temp=value;262.for(i=0;i<4;i++)263.{264.if(temp&0x01) send_logic1(11,32); //1.68ms265. else send_logic0(11,11); //600US266.267. temp=temp>>1;268.}269.}270.//============================主函数======================== 271.void main()272.{273. TimerInit();274. while(1)275.{276. key_value=KeyScan();277. switch(key_value)278. {279. case 1:ir_out1();delayms(200);break; // 开和关280. case 2:ir_out2();delayms(200);break; // 温度- 281. case 3:ir_out3();delayms(200);break; // 温度+. 282. case 4:ir_out4();delayms(200);break; // 模式选择283. case 5:ir_out5();delayms(200);break; //转叶设置284. case 6:ir_out6();delayms(200);break;285. //default:ir=1;break;286. }287.}288.}289.void timer0(void) interrupt 1290.{291.TH0=0XfF;292.TL0=221; //50us293.count++;294.if(flag)295. TR2=1; //IR38k=0;296.else TR2=0;//IR38k=1;297.298.}299.unsigned char KeyScan()300.{301.302./*-------------第一列扫描-----------------*/303.304.305. if(key1==0)306.{307. delayms(20);308. if(key1==0)309. {310. return 1;311. }312. while(!key1); 313.}314.if(key2==0) 315.{316. delayms(20); 317. if(key2==0) 318. {319. return 2; 320. }321. while(!key2); 322.}323.324.if(key3==0) 325.{326. delayms(20); 327. if(key3==0) 328. {329. return 3; 330. }331. while(!key3); 332.}333.if(key4==0) 334.{335. delayms(20); 336. if(key4==0) 337. {338. return 4; 339. }340. while(!key4); 341.}342. if(key5==0) 343.{344. delayms(20); 345. if(key5==0) 346. {347. return 5; 348. }349. while(!key5); 350.}351. if(key6==0) 352.{353. delayms(20); 354. if(key6==0) 355. {356. return 6; 357. }358. while(!key6); 359.}360. return 0 ; 361.}。

51单片机格力空调遥控器word文档良心出品

51单片机格力空调遥控器word文档良心出品

1.//51单片机格力空调遥控器2.#include <reg52.h> 3.#include <intrins.h> 4.#define uchar unsigned char 5.#define uint unsigned int 6.#define enTransmitt flag=1 7.#define disTransmitt flag=0 8.sfr T2MOD = 0XC9; 9.bit flag=0;10.红外发射管11.sbit IR38k =P2^3; //sbit key1=P1^1; 12.sbit key2=P1^3; 13.sbit key3=P1^5;14.sbit key4=P1^7; 15.sbit key5=P1^0; 16.sbit key6=P1^4; 17.uchar KeyScan();18.uint count=0,set_count=0; 19.uchar fengliang_value=0; 20.uchar key_value=0; 21.uchar wendu_value=0; 22.uchar mode_value=0; 23.uchar switch_value=0; 24.uchar zhuanye_value=0; 25.uchar code26.79,0x04,0x00,0x50,0x02}};) 度,冷气手动,自动转页// (20uchar27.19,0x08,0x00,0x50,0x02},{0x09,0x08,0x00,0x50,0x02}28.) 29. }; //自动模式风量小,中,大 (20度uchar code mode[][5]={30.59,0x04,0x00,0x5031.,0x02},5b,0x04,0x00,0x50,0x02} 32.33. }; //自动,冷气,除湿,送风/*uchar34.48,0x00,0x00,0x50,0x02} }; */uchar code on_or_off[][5]={35.31,0x08,0x00,0x50,0x02},36.51,0x08,0x00,037.x50,0x02},71,0x08,0x00,0x50,0x02}, 38.39. }; //开机,关机uchar code wendu[][5]={40.59,0x01,0x00,0x50,0x041.2},59,0x03,0x00,0x50,0x02}, 42.59,0x05,0x00,0x50,0x02}, 43.59,0x07,0x00,0x50,0x02}, 44.59,0x09,0x00,0x50,0x02}, 45.59,0x0b,0x00,0x50,0x02}, 46. 59,0x0d,0x00,0x50,0x02}, 47.48. {0x59,0x0e,0x00,0x50,0x02}49. }; //温度值50.51.void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2);52.void send_8bit_code(uchar value);53.void send_4bit_code(uchar value);54.void send_final_code();启动和关闭void ir_out1() //55.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.void ir_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.void ir_out3() //wendu++84.{85.send_precode(180,90);86.send_8bit_code(wendu[wendu_value][0]);send_8bit_code(wendu[wendu_value][1]);87.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.void ir_out4()//mode choose96.{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.void ir_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++;if(zhuanye_value==2) {zhuanye_value=0;} 119.120.}121.void ir_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.void delayms(unsigned char ms)136.{137.unsigned char i;138.while(ms--)139.{140. for(i=0;i<120;i++){};141.}142.}143.void TimerInit()144.{145.EA=1;146.ET0=1;147.TMOD=0X01;148.TH0=0XfF;149.TL0=221; //50US150.T2CON=0x00;151.152. T2MOD=0x02; //enable T2's wave output through T2 pin(P10) 153. RCAP2H=(65536-11059/38/4)>>8; //output frequency is 38KHz 154. RCAP2L=(65536-11059/38/4)&0xff;155.}156.void TransmittPulse()157.{158. enTransmitt;159.// ir=0;160.TR0=1;161.TR2=1;162.}163.void TransmittLow()164.{165.//ir=1;166.TR0=1;167.disTransmitt;168.TR2=0;169.IR38k=1;170.}171.void endTransmitt()173.//ir=0;174.TR0=0;175.TR2=0;176.IR38k=1; //JIEZHI177.}178.void send_logic0(unsigned int s_cnt_1,unsigned int s_cnt_2) 179.{180.set_count=s_cnt_1;//181.TransmittPulse();182.count =0;183.184.while(count<set_count)185.;186.endTransmitt();187.//ir=1;188.set_count=s_cnt_2;//11;//189.//ir=1;190.count =0;191.TransmittLow();192.193.while(count<set_count)194.;195.endTransmitt();196.}197.void send_logic1(unsigned int s_cnt_1,unsigned int s_cnt_2) 198.{199.set_count=s_cnt_1;//200.TransmittPulse();201.202.count =0;203.204.while(count<set_count)205.;206.endTransmitt();207.//ir=1;208.//=========================209.set_count=s_cnt_2;//32;//210.//ir=1;211.count =0;212.213.TransmittLow();214.while(count<set_count)216.;217.endTransmitt();218.}219.void send_precode(unsigned int s_cnt_1,unsigned int s_cnt_2) 220.{221.set_count =s_cnt_1;//180;// 9MS222.TransmittPulse(); //start send pulse223.count =0;224.225.while(count<set_count)226.{;}227.endTransmitt();228.set_count =s_cnt_2;//90;//4.5MS229.230.count =0;231.TransmittLow();232.while(count<set_count)233.{;}234.endTransmitt();235.236.}237.void send_final_code()238.{239.set_count=28;//240.241.count =0;242.TransmittPulse();243.while(count<set_count)244.;245.endTransmitt();246.}void send_8bit_code(uchar value) 247.248.{249.uchar i,temp;250.temp=value;251.for(i=0;i<8;i++)252.{253. if(temp&0x01) send_logic1(11,32); //1.68ms254. else send_logic0(11,11); //600US255. temp=temp>>1;256.}257.}258.void send_4bit_code(uchar value)259.{260.uchar i,temp;261.temp=value;262.for(i=0;i<4;i++)263.{264.if(temp&0x01) send_logic1(11,32); //1.68ms265. else send_logic0(11,11); //600US266.267. temp=temp>>1;268.}269.}270.//============================主函数======================== 271.void main()272.{273. TimerInit();274. while(1)275.{276. key_value=KeyScan();277. switch(key_value)278. {开和关 case 1:ir_out1();delayms(200);break; // 279.280. case 2:ir_out2();delayms(200);break; // 温度-281. case 3:ir_out3();delayms(200);break; // 温度+.282. case 4:ir_out4();delayms(200);break; // 模式选择283. case 5:ir_out5();delayms(200);break; //转叶设置284. case 6:ir_out6();delayms(200);break;285. //default:ir=1;break;286. }287.}288.}289.void timer0(void) interrupt 1290.{291.TH0=0XfF;292.TL0=221; //50us293.count++;294.if(flag)295. TR2=1; //IR38k=0;296.else TR2=0;//IR38k=1;297.298.}299.unsigned char KeyScan()300.{301.302./*-------------第一列扫描-----------------*/ 303.304.305. if(key1==0)306.{307. delayms(20);308. if(key1==0)309. {310. return 1;}311.312. while(!key1);313.}314.if(key2==0)315.{316. delayms(20);317. if(key2==0)318. {319. return 2;320. }321. while(!key2);322.}323.324.if(key3==0)325.{326. delayms(20);327. if(key3==0)328. {329. return 3;330. }331. while(!key3);332.}333.if(key4==0)334.{335. delayms(20);336. if(key4==0)337. {338. return 4;339. }340. while(!key4);341.}342. if(key5==0){343.344. delayms(20); 345. if(key5==0) 346. {347. return 5; 348. }349. while(!key5); 350.}351. if(key6==0) 352.{353. delayms(20); 354. if(key6==0) 355. {356. return 6; 357. }358. while(!key6); 359.}360. return 0 ; 361.}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机红外遥控格力空调程序#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit key1=P3^4;//按键控制开机sbit key2=P3^5;//按键控制关机sbit key3=P3^6;//按键控制温度+sbit key4=P3^7;//按键控制温度-sbit out=P1^5;//发送IO口uchar wd1[15]={0x00,0x08,0x04,0x0c,0x02,0x0a,0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07};uchar wd2[15]={0x0a,0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f,0x00,0x08,0x04,0x0c};uchar x=12;//开机28度/************晶振11.0592MHz**************/ void delay(uint xms){uint i,j;for(i=xms;i>0;i--) //i=xms即延时约xms毫秒for(j=112;j>0;j--);}void delay560us(void) //560us延迟函数{uint j;for(j=63;j>0;j--);}void delay4500us(void) //4.5ms延迟函数{uint j;for(j=516;j>0;j--);}void khz_2(uint num) //38KHZ脉冲占空比1:2{for(;num>0;num--){out=~out;}}void send0_a(void) //发送0{khz_2(42) ;//khz_3(21) ;out=1;delay560us();}void send1_a(void) //发送1 {khz_2(42) ;out=1;delay560us();delay560us();delay560us();}void leadcode_a(void) //发送引导码{khz_2(690) ;out=1;delay4500us();}/***************************关机****************************/void close( uchar a,uchar b,uchar c,uchar d) {uint i;leadcode_a();send1_a();for(i=0;i<7;i++)send0_a();if(a)send1_a();elsesend0_a();if(b)send1_a();elsesend0_a();if(c)send1_a();elsesend0_a();if(d)send1_a();elsesend0_a();send0_a();send0_a();send0_a();for(i=0;i<5;i++)send0_a();send1_a();for(i=0;i<6;i++)send0_a();send1_a();send0_a();send1_a();send0_a();send0_a();send1_a();send0_a();khz_2(42) ;out=1;delay(20);}void close1(uchar e,uchar f,uchar g,uchar h ) {uchar i;for(i=0;i<13;i++)send1_a();send0_a();send0_a();for(i=0;i<12;i++)send0_a();if(e)send1_a();elsesend0_a();if(f)send1_a();elsesend0_a();if(g)send1_a();elsesend0_a();if(h)send0_a();elsesend1_a();khz_2(42) ;out=1;delay(1000);/*******************************************//****************开机************************/}void open(uchar a,uchar b,uchar c,uchar d ){uint i;leadcode_a();send1_a();send0_a();send0_a();send1_a();for(i=0;i<4;i++)send0_a();if(a)send1_a();elsesend0_a();if(b)send1_a();elsesend0_a();if(c)send1_a();elsesend0_a();if(d)send1_a();elsesend0_a();send0_a();send0_a();send0_a();send0_a();for(i=0;i<5;i++)send0_a();send1_a();for(i=0;i<6;i++)send0_a();send1_a();send0_a();send1_a();send0_a();send0_a();send1_a();send0_a();khz_2(42) ;out=1;delay(20);}void open1(uchar e,uchar f,uchar g,uchar h) {uchar i;for(i=0;i<13;i++)send0_a();send1_a();send0_a();send0_a();for(i=0;i<12;i++)send0_a();if(e)send1_a();elsesend0_a();if(f)send1_a();elsesend0_a();if(g)send1_a();elsesend0_a();if(h)send1_a();elsesend0_a();khz_2(42) ;out=1;delay(1000);}void keyscan(){uchar a,b,c,d,e,f,g,h;if(key1==0){delay(10);if(key1==0){while(!key1);if(wd1[x] & 0x08)a=1;elsea=0;if(wd1[x] & 0x04)b=1;elseb=0;if(wd1[x] & 0x02)c=1;elsec=0;if(wd1[x] & 0x01)d=1;elsed=0;if(wd2[x] & 0x08) e=1;elsee=0;if(wd2[x] & 0x04)f=1;elsef=0;if(wd2[x] & 0x02)g=1;elseg=0;if(wd2[x] & 0x01)h=1;elseh=0;open(a,b,c,d);open1(e,f,g,h);}}if(key2==0){delay(10);if(key2==0){while(!key2);if((wd1[x] & 0x08)) a=1;elsea=0;if((wd1[x] & 0x04))b=1;elseb=0;if((wd1[x] & 0x02))c=1;elsec=0;if((wd1[x] & 0x01))d=1;elsed=0;if((wd2[x] & 0x08))e=1;elsee=0;if((wd2[x] & 0x04))elsef=0;if((wd2[x] & 0x02))g=1;elseg=0;if((wd2[x] & 0x01))h=1;elseh=0;close(a,b,c,d);close1(e,f,g,h);}}if(key3==0){delay(10);if(key3==0){while(!key1);x++;if((wd1[x] & 0x08)) a=1;elseif((wd1[x] & 0x04))b=1;elseb=0;if((wd1[x] & 0x02))c=1;elsec=0;if((wd1[x] & 0x01))d=1;elsed=0;if((wd2[x] & 0x08)) e=1;elsee=0;if((wd2[x] & 0x04))f=1;elsef=0;if((wd2[x] & 0x02))g=1;elseg=0;if((wd2[x] & 0x01))h=1;elseh=0;open(a,b,c,d);open1(e,f,g,h);}}if(key4==0){delay(10);if(key4==0){while(!key1);x--;if((wd1[x] & 0x08))a=1;elsea=0;if((wd1[x] & 0x04))b=1;elseb=0;if((wd1[x] & 0x02))c=1;elsec=0;if((wd1[x] & 0x01))d=1;elsed=0;if((wd2[x] & 0x08)) e=1;elsee=0;if((wd2[x] & 0x04))f=1;elsef=0;if((wd2[x] & 0x02))g=1;elseg=0;if((wd2[x] & 0x01))h=1;elseh=0;open(a,b,c,d);open1(e,f,g,h);}}}void init(){key1=1;key2=1;key3=1;key4=1;out=1;}void main(){init();while(1){keyscan();}}。

相关文档
最新文档