单片机红外遥控学习代码
51单片机红外解码资料+源代码
![51单片机红外解码资料+源代码](https://img.taocdn.com/s3/m/17703cea0975f46527d3e1e9.png)
位地 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 址
源代码如下: #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7;
uchar irtime; //红外时间 uchar startflag; //启动接收 uchar irdata[33]; uchar bitnum; uchar irreceiveok; //红外接收完毕 uchar ircode[4]; uchar irprosok; uchar disp[8]; uchar code smg_du[]={
发射器发射的的信号为
接收器接收到的信号为
即 9ms 低电平后 4.5ms 高电平作为起始码,之后接受到两次 8 位客户码,一次八位数据码,和一次八位数据反码。
遥控器在按键按下之后周期性的发出同一种 32 位二进制编 码周期约为 108ms,一组码持续时间随本身的“0”“1”个数不同
而不同。大约在 45~63ms 之间,当一个键按下 36ms,振荡器使芯 片激活,将发射一组 108ms 的编码脉冲这 108ms 编码脉冲由一个 起始码(9ms),一个结束码(4.5ms),低八位地址码(9~18ms), 高八位地址码(9~18ms),八位数据码(9~18ms),和这八位数据 码反码(9~18ms),如果按下超过 108ms 仍未松开,接下来发射 的代码(连发代码)将仅有起始码(9ms)和结束码(2.5ms)组 成。
解码的关键是如何识别零和一: “0”和“1”都是以 0.56ms 低电平开始的,不同的是高电平 宽度不同,“0”为 0.56ms“1”为 1.168ms,所以必须根据高电平 宽度来区别“0”和“1”。 如果从 0.56ms 低电平过后,开始延时,0.56ms 后,若读到的 电平为低,说明该位为零,反之则为一,可靠其间,延时必须比 0.56ms'长一些,又不能超过 1.12ms,否则如果该位为零,读到的 已是下一位高电平,因此取(1.12+0.56)/2=0.84ms 最为可靠,一 般取 0.84ms 左右均可。根据码的格式,应该等待 9ms 起始码和 4.5ms 结束码完成后才能读码。 备注:定时器/计数器控制寄存器 TCON 位序 D7 D6 D5 D4 D3 D2 D1 D0 号 位符 TF1 TR1 TF0 IR0 IE1 IT1 IE0 IT0 号
红外遥控编程参考(单片机读取按键编码)
![红外遥控编程参考(单片机读取按键编码)](https://img.taocdn.com/s3/m/cf62202e482fb4daa58d4b40.png)
程序可以用来查看每个遥控按键的编码,以便于开发利用遥控每一个按键。
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit en=P3^4;sbit rs=P3^5; //用于控制1602sbit rw=P3^6;sbit dula=P2^6;sbit wela=P2^7; //用于控制晶体管sbit IRIN=P3^2; //红外接收器数据线IO 口uchar IRCOM[4]=0;//定义数组IRCOM,分别装解码后得到的数据//IRCOM[0] 低8位地址码//IRCOM[1] 高8位地址码//IRCOM[2] 8位数据码//IRCOM[3] 8位数据码的反码uchar code table[]="MAKE BY HEIQISHI"; uchar code table1[]="The code is 0x";uchar code table2[]="0123456789abcdef";//////////////显示程序///////////////////void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--); //大约是1ms,因为单片机的时钟周期为11.0592mhz。
}void Write_com(uchar com){rs=0; //指令P0=com; //写指令函数delay(5);en=1;delay(5);en=0;}void Write_data(uchar dat){rs=1; //数据P0=dat; //写指令函数delay(5);en=1;delay(5);en=0;}void _1602Init(){wela=0;dula=0; //用于关闭晶体管,因为都是用P0en=0; //初始时使能为0rw=0;Write_com(0x38); //显示屏模式设置为1602方案Write_com(0x0c); //显示开关/光标设置Write_com(0x06);Write_com(0x01); //清屏Write_com(0x80); //指针置零}//////////////////////////////////////////////////////////////////////解码程序///////////////////void delay014ms(uchar x) //x*0.14MS STC10F04延时约0.15MS{uchar i;while(x--){for(i=0;i<15;i++) //13;}}//////////////初始化////////////void IR_init(void){EA=1;EX0=1; //允许总中断中断,使能INT0 外部中断IT0=1; //触发方式为脉冲负边沿触发IRIN=1; //I/O口初始化}////////////解码过程//////////////void IR_CODE(void) interrupt 0 //在外部中断子程序中解码{uchar j,k,N=0,shi,ge;EX0=0; //防止干扰delay014ms(15); //延时2.1msif (IRIN) //2.1ms能够检测出各种错误信号{EX0 =1;return;} //确认IR信号出现while(!IRIN); //等IR变为高电平,跳过9ms的前导低电平信号。
基于51单片机的红外遥控编码解码的C语言程序和电路[1]
![基于51单片机的红外遥控编码解码的C语言程序和电路[1]](https://img.taocdn.com/s3/m/223b88fc941ea76e58fa04c3.png)
请勿转载!!!作品功能简介:当学习键按下后,红外接收头便可将接受到的信号存储到单片机中。
在接受到通用遥控器发出的信号后,如果按下发射键,单片机将调出刚刚储存的信息,通过红外发射头发射出和遥控器一样的信号来达到控制的作用。
#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。
单片机红外遥控学习代码
![单片机红外遥控学习代码](https://img.taocdn.com/s3/m/52ef7b295901020207409c3d.png)
count++;
if(irflag==1) //如果标志为1,则发送38KHZ载波
ir=~ir;
else ir=0; //否则一直为零
}
TR1=1; //启动定时器
while(count<set_count); //等待发送完
TR1=0; //关闭定时器
if(ircode&0x80) //判断红外编码最低位,若为1则1.69ms的低电平
}
}
else if(kb==0) //判断按键3是否按下
{
delay(10);
if(kb==0)
{
keyflag=1;
irdata=5; //若按键2按下,发送5
ET1=1; //定时器中断允许
TH1=0xf3; //初值
TL1=0xf3; //初值
}
//---------------------------------------------------------------------------
for(i=0;i<8;i++) //循环发送
{
set_count=16; //发送0.56ms的高电平
irflag=1; //启动红外发射二极管发送
count=0; //中断技计数清零
}
}
}
//---------------------------------------------------------------------------
void ir_sendbyte() //发送数据字节
{
uchar i;
红外遥控器发射板代码和接收板代码
![红外遥控器发射板代码和接收板代码](https://img.taocdn.com/s3/m/7d781076011ca300a6c3906d.png)
本文是基于单片机红外通讯的代码,代码分为发射板代码和接收板代码。
指令码是用户发给接收系统的指令,用以控制设备完成相应的操作。
指令码是一串数据流,其构成如图3-2。
一个完整的指令码由10ms高平引导码、3ms低平开始码、1ms脉宽正脉冲、3ms低平结束码、下一个10ms高平引导码组成。
其中引导码、开始码和结束码都是为了系统能够正确接受信号而设置的,能够判断信号是否有效、信号起始和结束。
信号中的脉冲个数才是我们指令码的指令所在,不同的脉冲个数对应不同的指令。
图3-2 指令码的组成3.3 红外遥控发射系统的设计红外遥控发射部分系统框图见图3-3。
发送端采用单片机的定时中断功能,由定时器T1产生周期为26us 的矩形脉冲,即每隔13us定时器T1产生中断输出一个相反的信号使单片机输出端产生周期为38KHz的脉冲信号。
系统通过连着单片机的按键获取用户遥控指令码,经按键扫描确认,然后交由单片机编码生成信息码,再由红外发射二极管将信息码发射出去。
在次设计中用到了T1和T0两个定时器,定时器T0控制T1开启和关闭,T0定时长度由指令码中高低电平维持时间长度决定。
具体发射过程如下:(1)定时器T1打开10ms,发射10ms引导码。
(2)定时器T1关闭3ms,发射3ms低平开始码。
(3)定时器T1打开1ms,发射1ms脉宽高电平脉冲。
(4)定时器T1关闭1ms,发射1ms脉宽低电平。
(5)重复(3)和(4)发射一定数目的脉冲。
(6)最后T1打开2ms和最后一个脉冲的1ms低电平一起构成3ms结束码,最终发射的信号如图3-2。
3.4 红外遥控接收系统的设计红外遥控接收电路框图见图3-4。
红外接收端普遍采用价格便宜,性能可靠的一体化红外接收头(MS0038 , 它接收红外信号频率为38KHz ,周期约26μs)。
它能同时对信号进行放大、检波、整形,得到TTL 电平的编码信号。
当接收头接收到26us周期的脉冲,输出低电平,否则输出高电平。
cv 单片机红外遥控c程序
![cv 单片机红外遥控c程序](https://img.taocdn.com/s3/m/47cd4a14f12d2af90242e64b.png)
RELAY=1; //继电器关闭
Display();
}
}
/********以下是外中断0函数********/
void IR_decode() interrupt 0
{
EX0=1; //开外中断0
return; //0.14ms计数过长则返回
}
}
IR_buf[j]=IR_buf[j] >> 1; //若计数小于6,数据最高位补"0",说明收到的是"0"
/********以下是延时函数********/
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
/*********以下是蜂鸣器响一声函数********/
if (count>=6) {IR_buf[j] = IR_buf[j] | 0x80;} //若计数大于等于6,数据最高位补"1",说明收到的是"1"
count=0; //计数器清0
}
}
if (IR_buf[2]!=~IR_buf[3]) //将键数据反码取反后与键数据码码比较,若不等,表示接收数据错误,放弃
// IR_buf[2]、IR_buf[3]为键数据码和键数据码反码接收缓冲区
uchar disp_buf[2]={0x10,0x10}; //显示缓冲单元,初值为0x10(即16),指向显示码的第16个"-"
学习型红外线遥控程序——C51
![学习型红外线遥控程序——C51](https://img.taocdn.com/s3/m/b94becf777a20029bd64783e0912a21614797fa1.png)
学习型红外线遥控程序——C51学习型红外线遥控程序——C51/*************晶体为11.0592M,波特率9600bps***************学习型红外线遥控程序*******/#include <AT89X51.H>void Ewen(void);void Ewds(void);void Delay(void);void Irda(void);void Study(void);void Output(unsigned int h);void Comput(unsigned char outdata);void Erase(unsigned char Address);unsigned int Read(unsigned char Address);unsigned char Display(unsigned char inAddress);void Write(unsigned char Address,unsigned int InData);unsigned int Both(unsigned char data1,unsigned char data2);unsigned char data e1 _at_ 0x1A; //分别存放红外线译码后的数据unsigned char data w1 _at_ 0x1B;unsigned char data e2 _at_ 0x1C;unsigned char data w2 _at_ 0x1D;sbit IrInput=P3^2; //红外线输入引脚,可自定义sbit Study1=P3^6; //学习按键,可自定义sbit Led2=P2^5; //接收成功、学习成功指示sbit Led1=P2^6; //空闲指示sbit Dout=P2^3; //at93c16--DOsbit Din=P2^2; //at93c16--DIsbit sk=P2^1; //at93c16--SKsbit cs=P2^0; //at93c16--CS/*********************主程序***************************/ void main(void){unsigned int i;SCON = 0x50; //串口方式1,允许接收TMOD = 0x20; //定时器1定时方式2TH1 = 0xFD; //波特率9600TL1 = 0xFD;IT0 = 1; //INT0下降沿有效EX0 = 1; //开INT0中断;TR1 = 1; //启动定时器P2_7=0; //初始化引脚P1=0xff;EA = 1; //允许CPU中断while(1){for (i=0; i<20000; i++){ Led1=1;if(!Study1) Study();}for (i=0; i<20000; i++){ Led1=0;if(!Study1) Study();}}}/***********************串口输出**********************/ void Comput(unsigned char outdata){SBUF = outdata;while(!TI);TI = 0;}/*******************红外线查询子程序*******************/ void Irda(void){#pragma asmMOV R6,#10SB:MOV R4,#19 ;延时880微秒D1:MOV R5,#19DJNZ R5,$DJNZ R4,D1JB P3.2,EXIT ;延时882微秒后判断P3.2脚是为1DJNZ R6, SB ;在8820微秒内如P3.2为1就退出JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲MOV R4,#10 ;延时4740微秒D2: MOV R5,#218DJNZ R5,$DJNZ R4,D2;延时4.74毫秒避开4.5毫秒的结果码MOV R1,#1AH ;设定1AH为起始RAM区MOV R2,#4 ;接收从1AH到1DH,用于存放操作码和操作反码PP:MOV R3,#8 ;每组数据为8位SS:JNB P3.2,$ ;等待地址码第一位的高电平信号MOV R4,#19 ;延时880微秒D5:MOV R5,#19DJNZ R5,$DJNZ R4,D5;高电平开始后882微秒判断信号的高低电平MOV C,P3.2 ;将P3.2引脚此时的电平状态0或1存入C中JNC TT ;如果为0就跳转到TTMOV R4,#2 ;延时1000微秒D6:MOV R5,#248DJNZ R5,$DJNZ R4,D6;检测到高电平1的话延时1毫秒等待脉冲高电平结束TT:MOV A,@R1 ;将R1中地址的给ARRC A ;将C中的值0或1移入A中的最低位MOV @R1,A ;DJNZ R3,SS ;接收满8位换一个内存INC R1 ;对R1中的值加1,换下一个RAMDJNZ R2,PP ;接收完所有数据EXIT:#pragma endasm}。
STM32单片机红外遥控
![STM32单片机红外遥控](https://img.taocdn.com/s3/m/47497d1db80d6c85ec3a87c24028915f804d84d4.png)
STM32单片机红外遥控红外遥控接口电路STM32单片机红外遥控程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚初始化PB12 #define LED_GREEN PBout(13) //绿色发光二极管控制管脚初始化PB13 #define LED_YELLOW PBout(14) //黄色发光二极管控制管脚初始化PB14 #define LED_BLUE PBout(15) //蓝色发光二极管控制管脚初始化PB15 #define BEEP PBout(5) //蜂鸣器端口定义PB5#define RDATA PAin(1) //红外数据输入脚//红外遥控识别码(ID),每款遥控器的该值基本都不一样,但也有一样的//我们选用的遥控器识别码为0#define REMOTE_ID 0static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void Led_Init(void); //发光二极管控制管脚初始化void Red_Led_Light(void); //点亮红色发光二极管void Green_Led_Light(void); //点亮绿色发光二极管void Yellow_Led_Light(void); //点亮黄色发光二极管void Blue_Led_Light(void); //点亮蓝色发光二极管void Red_Led_Goout(void); //熄灭红色发光二极管void Green_Led_Goout(void); //熄灭绿色发光二极管void Yellow_Led_Goout(void); //熄灭黄色发光二极管void Blue_Led_Goout(void); //熄灭蓝色发光二极管void Beep_Init(void);void Beep_Tweet(void);void Beep_Silent(void);extern u8 Remote_Cnt; //按键次数,此次按下键的次数extern u8 Remote_Rdy; //红外接收到数据extern u32 Remote_Odr; //命令暂存处u32 Remote_Odr=0; //命令暂存处u8 Remote_Cnt=0; //按键次数,此次按下键的次数u8 Remote_Rdy=0; //红外接收到数据void Remote_Init(void); //红外传感器接收头引脚初始化u8 Remote_Process(void); //红外接收到数据处理u8 Pulse_Width_Check(void); //检查脉宽extern u8 USART_RX_BUF[64]; //接收缓冲,最大63个字节.末字节为换行符extern u8 USART_RX_STA; //接收状态标记//如果想串口中断接收,请不要注释以下宏定义//#define EN_USART1_RX //使能串口1接收void uart_init(u32 pclk2,u32 bound);/*************************************************************开发板上电后,用红外遥控器对着开发板上的红外接收头。
自己写的51单片机的红外线遥控接收程序(C语言)
![自己写的51单片机的红外线遥控接收程序(C语言)](https://img.taocdn.com/s3/m/fd7507dfad51f01dc281f11f.png)
//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有没有下降沿。
c51红外遥控代码
![c51红外遥控代码](https://img.taocdn.com/s3/m/5e7682c149649b6649d74701.png)
EA=1;
EX0=1;
TCON=0x01;
}
void scan()interrupt 0
{
uint i,ti,lo,t=0;
uchar user=0,datai=0;
signal=1;
EX0=0;
for(lo=0;lo<36;lo++)
{
ti=0;
do
{
t=0;
js=1;
while(js)
{
t++;
{
if(key==hwc[i])
key=i;
}
if(t!=0)
signal=1;
EX0=1;
}
本程序只适用于本图所显示的遥控器以及stc12c5a60s2的单片机并且晶振是11.0592M的:
使用方法:
软件上将下列.c和.h加入c51工程,在主程序运行前加入红外初始化ini_hw()函数,然后运行程序的时候,如果signal=1,代表接收到按下的按键,用完后注意清零。读key就是红外按键的值(1,2,3······代表按键依次的按键值),读kr就是按键的键值。
_nop_();
for(i=0;i<80;i++)
_nop_();
if(t==255)
{
if(lo==0)
signal=0;
break;
}
if(!signal)
break;
}
if(t==255)
ti++;
if(ti==3)
break;
}while(t==255||t==0);
if(!signal)
break;
uchar pdata a[I*10],b[40],c[12]={0,128,64,32,16,8,4,2,1,0,0,0};
51单片机红外遥控格力空调程序
![51单片机红外遥控格力空调程序](https://img.taocdn.com/s3/m/27e45020e2bd960590c67710.png)
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();}}。
学习型遥控器C语言编程
![学习型遥控器C语言编程](https://img.taocdn.com/s3/m/2502f5f9910ef12d2af9e78d.png)
if(TF0)break;if(TF0)break;
}
TR0=0;//关闭定时器0
TF0=0;//标志位溢出则清0
IR =1;//载波停止后,发射端口常态为高
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数:外部中断函数
入口:void
0x22,0xE6,0x33,0xe2};
uint16 M = 0;
#define m9 (65536-9000)//9mS
#define m4_5 (65536-4500)//4.5mS
#define m1_6 (65536-1650)//1.65mS
#define m_56 (65536-560)//0.56mS
***************************************************************/
//发射引脚(接PNP三极管b极与1K欧电阻)
//PNP三极管e极接电源,c极接红外发射管与51欧电阻
#include <REG51.h>
#include "INC\MY_SET.h"
sbitKEY4=P1^3;
sbitKEY5=P1^4;
#define USER_H P2 //用户码高8位
#define USER_L P0 //用户码低8位
uint8 tab[16] = {//操作码
0x12,0x05,0x1e,0x55,
0x01,0x1b,0x03,0x6b,
0x07,0x08,0x09,0x68,
IRCOM[6]=IRCOM[6]+0x30;
51单片机红外遥控解码,很详细(汇编语言,C语言等)
![51单片机红外遥控解码,很详细(汇编语言,C语言等)](https://img.taocdn.com/s3/m/9912cc3958eef8c75fbfc77da26925c52cc591c6.png)
//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
STC单片机51简单的红外遥控发射程序C语言
![STC单片机51简单的红外遥控发射程序C语言](https://img.taocdn.com/s3/m/4caf1c7d25c52cc58bd6bee2.png)
}
void H(){ //红外1; 以低电平0.565ms,高电平1685表示1
uchar j;
for (j=0;j<43;j++) {s1=~s1;Delay13us();} //低电平0.565ms载波,模拟38KHZ
{
uint j;
while(1){
Delay3000ms();
//以下开始发送
for (j=0;j<692;j++) {s1=~s1;Delay13us();}//载波发送9ms的起始码
for (j=0;j<346;j++) {s1=1;Delay13us();} //无载波发送4.5ms的结果码
for (j=0;j<173;j++) {s1=1;Delay13us();} //2.25ms
for (j=0;j<44;j++) {s1=~s1;Delay13us();}//结束位
for (j=0;j<7400;j++) {s1=1;Delay13us();} //在延时96.2ms到108ms,在发送连发码
for (j=0;j<692;j++) {s1=~s1;Delay13us();}//载波发送9ms的起始码
for (j=0;j<173;j++) {s1=1;Delay13us();} //2.25ms
for (j=0;j<44;j++) {s1=~s1;Delay13us();}//结束位
单片机的红外遥控器编码原理与实现
![单片机的红外遥控器编码原理与实现](https://img.taocdn.com/s3/m/f919de65ec630b1c59eef8c75fbfc77da369976a.png)
单片机的红外遥控器编码原理与实现红外遥控器是我们日常生活中常见的一种设备,用于控制电器设备的开关、音量调节等操作。
而单片机作为一种重要的电子元器件,可以通过编程来实现红外遥控器的功能。
本文将介绍单片机的红外遥控器编码原理和实现过程。
一、红外编码原理红外遥控器通过发送红外信号来控制电器设备的开关。
而红外编码原理是指在红外遥控器中,将按键的信息编码成红外信号发送出去。
在遥控器中,每个按键对应一个特定的红外编码。
当按下某个按键时,遥控器会将该按键的特定编码发送出去。
接收器设备会解码接收到的红外信号,并根据解码结果来执行相应的操作。
二、红外编码实现步骤1. 硬件准备实现红外遥控器编码,首先需要准备以下硬件设备:- 单片机模块- 红外发射模块- 按键模块- 电源供应模块2. 硬件连接将单片机模块、红外发射模块、按键模块和电源供应模块按照电路图进行连接。
确保连接正确并固定好各个模块。
3. 软件编程使用单片机的编程语言(如C语言)进行编程,实现红外遥控器的功能。
具体的编程步骤如下:- 初始化相关的引脚和中断,包括红外发射引脚和按键引脚。
- 设置红外编码的格式和协议,如NEC编码、SONY编码等。
- 通过按键模块检测按键是否被按下,如果按键被按下,则执行相应的红外编码发送操作。
- 根据按键的不同,发送不同的红外编码信号。
4. 红外编码发送编写代码实现红外编码信号的发送。
根据选择的编码协议和格式,在编程中设置相应的红外编码参数,并通过红外发射模块将编码信号发送出去。
5. 测试和调试完成编程后,进行测试和调试。
将红外编码器面对接收器设备,按下遥控器的按键,观察接收器设备是否成功接收到信号并执行相应的操作。
通过以上步骤,就可以实现单片机的红外遥控器编码功能。
三、红外编码的应用红外遥控器的编码原理可以应用于各种控制场景,例如家电控制、智能家居系统、工业自动化等。
通过编程,可以实现不同按键对应不同设备的控制,提高生活和工作的便利性。
单片机红外遥控学习代码
![单片机红外遥控学习代码](https://img.taocdn.com/s3/m/22c1c4cf80c758f5f61fb7360b4c2e3f5727256b.png)
单片机红外遥控学习代码#include#include#include////////////////////////////////////////////////#define TURE 1#define FALSE 0#define uchar unsigned char#define uint unsigned int////////////////////////////////////////////////sbit IR=P3^2; //红外接收引脚sbit led=P3^7; //led灯引脚sbit out=P3^5; //调试用的输出波形引脚uchar code table[10]={0x40,0xee,0x21,0x22,0x8e,0x12,0x10,0x66,0x00,0x06}; //0-9数码管显示码////////////////////////////////////////////uchar irtime,kk;bit irpro_ok,irok; //标志位uchar IRcord[4]; //收到的数据uchar irdata[33]; //数据位缓冲区//////////////////////////////////////////////void Ir_work(void); //void Ircordpro(void); //void delay(uint);////////////////////////////////////////////////////////////////// void delay(uint a){uchar i;while(--a!=0)for(i=125;i>0;i--);}//////////////////////////////////////////////////////////////////void tim0_isr (void) interrupt 1 using 1 //定时器0中断服务函数{irtime++; //原理上是每277us发生一次中断,irtime加1,但是我用示波器看的话时间间隔是540us,因为这个原因,我调试了很久// out=~out;}/////////////////////////////////////////////////////////////////// ////void EX0_isr (void) interrupt 0 using 0 //外部中断0服务函数{static uchar i;static bit startflag=0;if(startflag) //判断码头{if(irtime>20) //引导码,13.5ms,这里只是粗略的时间{i=0;}irdata[i]=irtime; //记录时间irtime=0; //计数清零i++; //位数加1if(i==33) //收满32位{irok=1; //接收完成标志i=0; //重新从第一位开始接收EX0=0; //暂时关闭中断,防止外来干扰startflag=0; //标志清零,准备接收下一帧数据}}else{startflag=1; //标志置1irtime=0; //计数清零}}/////////////////////////////////////////////////////////////////// /void TIM0init(void) //定时器0初始化{TMOD=0x02; //定时器0工作方式2TH0=0; //重装值TL0=0; //初始值ET0=1; //中断允许TR0=1; //开启}/////////////////////////////////////////////////////////////////// void EX0init(void) //外部中断0初始化{IT0 = 1; // 下降沿触发EX0 = 1; // 使能中断0EA = 1; //打开总中断}/************************************************************** **//************************************************************** ****/void Ir_work(void){switch(IRcord[2]){case 0x01:P1=table[1];break;//1case 0x02:P1=table[2];break;//2case 0x03:P1=table[3];break;//3case 0x04:P1=table[4];break;//4case 0x05:P1=table[5];break;//5case 0x06:P1=table[6];break;//6case 0x07:P1=table[7];break;//7case 0x08:P1=table[8];break;//8case 0x09:P1=table[9];break;//9case 0x00:P1=table[0];break;//0}irpro_ok=0;}/************************************************************** ***/void Ircordpro(void){uchar i, j, k;uchar cord,value;k=1;for(i=0;i<4;i++) //总共四组数据{for(j=1;j<=8;j++) //每组有8位{cord=irdata[k]; //if(cord>3) //大于某个时间为1{value=value | 0x01; //置1}else{value=value; //不变}if(j<8)value=value<<1; //左移,最低位补零}k++; //指向下一位}IRcord[i]=value; //保存一组数据value=0; //重新清零}if(IRcord[0]+IRcord[1]==0xff && IRcord[2]+IRcord[3]==0xff)//判断接收到的数据是否有效{irpro_ok=1;}else{EX0=1; //没有正确接收数据,重新打开中断}}/////////////////////////////////////////////////////////////////void main(void){TIM0init(); //定时器0初始化EX0init(); // 外部中断0初始化while(1){if(irok) //接收是否完毕Ircordpro(); //数据处理irok=0; //标志清零}if(irpro_ok) //判断数据是否处理完毕{Ir_work(); //显示数据led=0; //led灯亮delay(500); //一小段延时led=1; //led灯灭EX0=1; //中断打开}};}。
红外遥控编码原理及C程序,51单片机红外遥控
![红外遥控编码原理及C程序,51单片机红外遥控](https://img.taocdn.com/s3/m/0ac4eb8bd0d233d4b14e6956.png)
红外遥控解解码程序#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P1^0;sbit rs=P1^2;sbit ir=P3^2;sbit led=P1^3;sbit led2=P3^7;unsigned int LowTime,HighTime,x;unsigned char a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;unsigned char flag;//中断进入标志位uchar z[4];uchar code table[]={"husidonghahahah"};uchar code table1[]={"User Code:"};void delay(uint x){uint i,j;for(i=x;i>0;i--) //i=xms即延时约xms毫秒for(j=100;j>0;j--);}void write_com(uchar com){//写液晶命令函数rs=0;lcden=0;P2=com;delay(3);lcden=1;delay(3);lcden=0;}void write_date(uchar date){//写液晶数据函数rs=1;lcden=0;P2=date;delay(3);lcden=1;delay(3);lcden=0;}void init_anjian() //初始化按键{a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;i=0;j=0;k=0;l=0;m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;u=0;}void init_1602(){//初始化函数uchar num;lcden=0;rs=0;write_com(0x38);//1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<14;num++)//写入液晶固定部分显示{write_date(table[num]);delay(3);}write_com(0x80+0x40);for(num=0;num<9;num++){write_date(table1[num]);delay(3);}}void write_dianya(uchar add,char date){//1602液晶刷新时分秒函数4为时,7为分,10为秒char shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void dingshiqi() //定时器记高低电平时间{TH0=0; //定时器高八位置0TL0=0; //定时器低八位置0TR0=1; //开启定时器0while(ir==0); //如果是低电平就等待,给低电平计时TR0=0; //关闭定时器T0LowTime=TH0*256+TL0; //保存低电平时间TH0=0; //定时器高八位置0TL0=0; //定时器低八位置0TR0=1; //开启定时器0while(ir==1); //如果是高电平就等待,给引导码高电平计时TR0=0; //关闭定时器T0HighTime=TH0*256+TL0; //保存高电平长度}void main(){char i=0;TMOD=0x01; //定时器T0作为定时模式ET0=1; //开T0中断IT0=0; //外部中断,下降沿触发EX0=1; //开外部中断EA=1; //开总中断init_1602();while(1){}}void inter0() interrupt 0 //开始解码{EX0=0; //关闭外部中断0,不再接受红外信号,只解码当前的红外信号。
单片机对不同品牌空调红外遥控代码
![单片机对不同品牌空调红外遥控代码](https://img.taocdn.com/s3/m/dc9b00259a6648d7c1c708a1284ac850ad0204dd.png)
单片机对不同品牌空调红外遥控代码摘要:1.单片机与红外遥控器的基本原理2.不同品牌空调红外遥控器的代码差异3.如何使用单片机解码红外遥控器代码4.实例:基于51 单片机的红外遥控解码器5.建议与资源正文:一、单片机与红外遥控器的基本原理红外遥控器是一种利用红外线进行遥控的设备。
它通常由发射器和接收器两部分组成。
发射器将用户的操作转换为红外光信号,而接收器则接收这些信号并转换为电信号,进而实现对设备的控制。
单片机是一种集成了CPU、存储器、外设接口等多种功能于一体的微型计算机。
在某些应用场景中,单片机可以充当红外遥控器的解码芯片,实现对红外遥控信号的接收和解码。
二、不同品牌空调红外遥控器的代码差异不同品牌的空调设备所使用的红外遥控器代码可能存在差异。
这些代码通常由品牌和型号信息、用户码、数据码等组成。
因此,在实现单片机对红外遥控器的解码时,需要考虑到这些代码差异。
三、如何使用单片机解码红外遥控器代码使用单片机解码红外遥控器代码的过程主要包括以下几个步骤:1.搭建硬件电路:首先,需要搭建一个包含红外接收头、单片机以及相关电子元件的硬件电路。
2.编写程序:编写一个能够接收并解析红外遥控器信号的程序。
该程序需要根据不同的品牌和型号,对红外遥控器信号进行解码。
3.测试与调试:将编写好的程序下载到单片机中,并使用红外遥控器进行测试。
根据测试结果对程序进行调试,以确保其能够正确解码红外遥控器信号。
四、实例:基于51 单片机的红外遥控解码器基于51 单片机的红外遥控解码器是一个典型的应用实例。
该解码器可以接收并解码不同品牌空调设备的红外遥控信号。
其硬件电路包括红外接收头、51 单片机以及相关电子元件。
程序方面,可以使用C 语言编写接收并解析红外遥控器信号的程序。
五、建议与资源对于想要深入了解单片机红外遥控解码的朋友,可以参考以下资源:1.霖锋的教学视频:该视频详细介绍了单片机红外遥控解码的原理和实现方法。
2.51 单片机实现遥控解码的程序:该程序可以作为参考,实现对红外遥控器信号的解码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
else
{
startflag=1; //标志置1
irtime=0; //计数清零
}
}
////////////////////////////////////////////////////////////////////
void TIM0init(void) //定时器0初始化
{
TMOD=0x02; //定时器0工作方式2
TH0=0; //重装值
TL0=0; //初始值
}
if(IRcord[0]+IRcord[1]==0xff && IRcord[2]+IRcord[3]==0xff)//判断接收到的数据是否有效
{
irpro_ok=1;
}
else
{
EX0=1; //没有正确接收数据,重新打开中断
void EX0_isr (void) interrupt 0 using 0 //外部中断0服务函数
{
static uchar i;
static bit startflag=0;
if(startflag) //判断码头
{
if(irtime>20) //引导码,13.5ms,这里只是粗略的时间
value=value | 0x01; //置1
}
else
{
value=value; //不变
}
if(j<8)
{
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
////////////////////////////////////////////////
#define TURE 1
#define FALSE 0
#define uchar unsigned char
{
uchar i;
while(--a!=0)
for(i=125;i>0;i--);
}
//////////////////////////////////////////////////////////////////
void tim0_isr (void) interrupt 1 using 1 //定时器0中断服务函数
}
}
/////////////////////////////////////////////////////////////////
void main(void)
{
TIM0init(); //定时器0初始化
EX0init(); // 外部中断0初始化
}
/*****************************************************************/
void Ircordpro(void)
{
uchar i, j, k;
uchar cord,value;
k=1;
for(i=0;i<4;i++) //总共四组数据
ET0=1; //中断允许
TR0=1; //开启
}
///////////////////////////////////////////////////////////////////
void EX0init(void) //外部中断0初始化
{
IT0 = 1; // 下降沿触发
EX0 = 1; // 使能中断0
EA = 1; ห้องสมุดไป่ตู้ //打开总中断
}
/****************************************************************/
while(1)
{
if(irok) //接收是否完毕
{
Ircordpro(); //数据处理
irok=0; //标志清零
}
if(irpro_ok) //判断数据是否处理完毕
uchar irtime,kk;
bit irpro_ok,irok; //标志位
uchar IRcord[4]; //收到的数据
uchar irdata[33]; //数据位缓冲区
//////////////////////////////////////////////
{
irok=1; //接收完成标志
i=0; //重新从第一位开始接收
EX0=0; //暂时关闭中断,防止外来干扰
startflag=0; //标志清零,准备接收下一帧数据
{
for(j=1;j<=8;j++) //每组有8位
{
cord=irdata[k]; //
if(cord>3) //大于某个时间为1
{
EX0=1; //中断打开
}
};
}
sbit out=P3^5; //调试用的输出波形引脚
uchar code table[10]={0x40,0xee,0x21,0x22,0x8e,0x12,0x10,0x66,0x00,0x06}; //0-9数码管显示码
////////////////////////////////////////////
{
Ir_work(); //显示数据
led=0; //led灯亮
delay(500); //一小段延时
led=1; //led灯灭
value=value<<1; //左移,最低位补零
}
k++; //指向下一位
}
IRcord[i]=value; //保存一组数据
value=0; //重新清零
/******************************************************************/
void Ir_work(void)
{
switch(IRcord[2])
{
case 0x01:P1=table[1];break;//1
{
i=0;
}
irdata[i]=irtime; //记录时间
irtime=0; //计数清零
i++; //位数加1
if(i==33) //收满32位
case 0x07:P1=table[7];break;//7
case 0x08:P1=table[8];break;//8
case 0x09:P1=table[9];break;//9
case 0x00:P1=table[0];break;//0
}
irpro_ok=0;
{
irtime++; //原理上是每277us发生一次中断,irtime加1,但是我用示波器看的话时间间隔是540us,因为这个原因,我调试了很久
// out=~out;
}
///////////////////////////////////////////////////////////////////////
void Ir_work(void); //
void Ircordpro(void); //
void delay(uint);
//////////////////////////////////////////////////////////////////
void delay(uint a)
case 0x02:P1=table[2];break;//2
case 0x03:P1=table[3];break;//3
case 0x04:P1=table[4];break;//4
case 0x05:P1=table[5];break;//5
case 0x06:P1=table[6];break;//6
#define uint unsigned int
////////////////////////////////////////////////
sbit IR=P3^2; //红外接收引脚
sbit led=P3^7; //led灯引脚