手把手教你红外解码
PT2262_2272红外遥控使用说明
供解码用。混频器的本振信号是由锁相环(PLL)控制的压控振荡器(VCO)提供的, 由4MHz晶振和CPU提供标准频率(I2C控制)。值得一提的是这里的混频器采用了 一片SSOP封装的新型SMD元器件电路,内带平衡混频器及中放,混频效率极高且输出 频谱干净,第二中频滤波采用了通讯专用的五端滤波器,选择性在±25kHz时达50d B。
其实,图1所示的振荡电路也不是声表振荡电路的唯一形式。笔者经过多年的探索,设 计开发了多种可满足不同需要的声表稳频振荡发射电路,从耗电微瓦级微功率的发射机到输 出功率达数瓦的单级大功率发射机,以及从ASK(幅度键控)或FSK(频移键控)调制方式 的数传或遥控用发射机到AM(调幅)或FM(调频)方式的语音及图像传送用发射机均已开发 成功。现将一套发射/接收都用声表稳频的、在开阔地上最大遥控距离可达3000米的高 性能无线电遥控电路介绍给广大电子爱好者。
一、发射机 这是一个带地址编码的四键微型超远程遥控发射机,电路原理见图2所示。 R11~R13、Q1、Q2组成电子开关式调制电路,当编码器输出为高电平时Q1
导通,振荡发射级工作;当编码器输出为低电平时Q1截止,振荡发射级停止工作,从而完 成ASK调制。R14、Q3、C1、L1、L2及声表谐振器SAW组成315MHz的 功率振荡级,Q3为高频功率场效应管,在450MHz下可输出1.5W的功率,其中L 1、L2及C1组成SAW所需要的移相选频及匹配网络,使Q3与SAW在很高的效率下 工作。L3、C2及C3组成天线匹配网络,使天线阻抗与振荡级匹配,确保其稳定工作。
PT2262/2272 红外遥控集成电路
PT2262/2272 是一对带地址、数据编码功能的红外遥控发射/接收芯片。其中发射芯片 PT2262-IR 将 载波振荡器、编码器和发射单元集成于一身,使发射电路变得非常简洁。
msp430 红外解码
while(TAR<=1000); TACTL=0; TAR=0; } #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { char m,n,k,CodeTemp; int j; P1IE&=HONGWAI_0;//禁止 P1.0 中断 if((P1IFG&HONGWAI_1)==HONGWAI_1) { P1IFG=0;//清中断标志 //停止计数器
BCSCTL2|=SELM1+SELS+DIVS_2+DIVS_1;//MCLK and SMCLK 1M 8 分频 do { IFG1 &= ~OFIFG; 误标志 for(i = 0; i < 100; i++) _NOP(); //延时等待
// 清除振荡错
} while ((IFG1 & OFIFG) != 0); //如果标志为 1 继续循环等 待 IFG1&=~OFIFG; }
for(k=0;k<10;k++) { delay_07ms(1); if (HONGWAI_IN) HONGWAI_IN=1,说明不是引导码 { k=10;break; } // 如 果 0.7ms 后
else if(k==9) 明是引导码 { while(HONGWAI_IN==0); delay_07ms(5); //跳过持续 4.5ms 的高电平 // 如果持续了 10×0.7ms=7ms 的低电平,说
c51、c52单片机红外线遥控接收解码c程序(可直接使用)
/ 亲,此程序以经过测试,可直接使用!!!/#include <reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uchar x);sbit IRIN = P3^2;uchar IRCOM[4];void main(){ IE = 0x81;TCON = 0x01;IRIN=1;/* 此处可以根据按键码自由编写程序/以下为3*7遥控按键码//(也可以应用与其他类型遥控,本程序只以3*7遥控为例)/ / 0x45 0x46 0x47 // 0x44 0x40 0x43 // 0x07 0x15 0x09 // 0x16 0x19 0x0d // 0x0c 0x18 0x5e // 0x08 0x1c 0x5a // 0x42 0x52 0x4a /例如:while(1){switch(IRCOM[2]){case 0x45: P2=0x7f; break;case 0x44: P2=0xbf; break;case 0x07: P2=0xdf; break;case 0x16: P2=0xef; break;case 0x0c: P2=0xf7; break;case 0x08: P2=0xfb; break;case 0x42: P2=0xfd; break;case 0x52: P2=0xfe; break;case 0x4a: P2=0xff; break;case 0x5a: P2=0x00; break;}} */while(1);} //end main/**********************************************************/ void IR_IN(void) interrupt 0 //外部中断服务程序{unsigned char j,k,N=0;EX0 = 0;delay(15);if (IRIN==1){ EX0 =1;return;}//确认IR信号出现while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
怎样捕捉红外遥控器的波形
红外遥控在我们的日常生活中有着普遍的应用,许多家用电器都使用红外遥控器,很多时候电子爱好者可能会产生这样的想法,就是怎样用现有的遥控器控制其他设备,或用自己设计的遥控器控制现有的电器,在这些情况下,我们都需要知道现有红外遥控器的控制编码。
红外遥控器发出的信号通常是一低频编码对一频率较高的载波调制后的信号,载波的频率一般在38~40KHz 左右,编码信号依不同的厂家不同的产品各不相同,我们要想知道的就是这些编码。
由于红外遥控器信号一般是不重复或重复频率很低的信号,用普通模拟示波器基本无法观测。
市面有一些专用的红外线遥控信号分析仪,但这不是一般电子爱好者会去考虑的。
您可以考虑利用单片机和PC 专门做一个电路测试,但这样所牵涉的硬件软件工作也不是三五天能完成,那是另一个不小的项目。
而如果您有一台带有捕捉功能的数字存储示波器,那您就不会有这一切问题。
下面我们以ZDS1002电视数字存储示波器为例说明捕捉红外遥控器波形的方法。
测量电路获取红外线遥控器信号的方法有两种,一是将遥控器打开,找到红外发射管,从适当管脚取信号。
这种方法不是很方便,因为您还要操作遥控器,而且取得的信号是未经解调的。
另一种方法是找一个红外接收头,用它来接收红外遥控器发出的信号,它带有解调器,输出的是已解调的信号。
这种接收头很容易找,每一台有遥控功能的电器都有,要买一个新的也仅2、3元钱。
这种接收头有3只引脚,分别是正电源(通常是5V)、地和信号输出,关键要分清除,然后按图1连接电路。
测量步骤1. 将示波器的A 通道接到测试点A 与地之间。
2. 将通道A 置为2V (这是因为我们用的电压是5V ,这个增益设置比较适合观察) ,将耦合方式均选为DC ,并将它们的0V 线调到适当位置;将通道B 置为OFF ,因为只要一个通道就够了。
3. 将触发方式置为AUTO (自动) ,然后用遥控器对准接收头按任意键,这时我们会看到屏幕上的波形上下跳动,这说明已经收到红外信号了。
基于51单片机的NEC红外解码
NEC编码
硬件
红外OUT脚接到了单片机P3^3中断接口
程序流程图
38K载波信号
HS0038
矩形波信号
单片机中断接口
中断计数+1,数据位移,低位 置0
地址储存 所有数据清零
错误,引导标志置0,时间置0, 中断置0
2 时间0 是否为0、1、2
中断计数 /时间清零
错误数据清零
void wrong() {
int_times = 0; tmr_times = 0; head_ok = 0; code_data = 0; lanth = 0; flagf = 0; }
LCD1602显示
void LCD1602_init(void) {
Delay1602(1500); //调用延时函数 LCD1602_Write_com(0x38); //8位数据总线,两行显示模式,5*7点阵显示 Delay1602(500); //调用延时函数 LCD1602_Write_com(0x38); //8位数据总线,两行显示模式,5*7点阵显示 Delay1602(500); //调用延时函数 LCD1602_Write_com(0x38); //8位数据总线,两行显示模式,5*7点阵显示 LCD1602_Write_com_busy(0x38); //8位数据总线,两行显示模式,5*7点阵显示 LCD1602_Write_com_busy(0x08); //显示功能关,无光标 LCD1602_Write_com_busy(0x01); //清屏 LCD1602_Write_com_busy(0x06); //写入新的数据后,光标右移,显示屏不移动 LCD1602_Write_com_busy(0x0C); //显示功能开,无光标 }
最简单红外线接收电路
最简单红外线接收电路
最简单的红外线接收电路可以是一个红外线接收头(红外线接收二极管)和一个电阻组成。
接收头的阳极连接到电源正极,接收头的阴极连接到电阻的一端,另一端连接到电源的负极。
这样就构成了一个简单的红外线接收电路。
当红外线照射到接收头上时,接收头会产生电流。
这个电流会通过电阻,并且根据红外线的强弱,电流的大小也会有所不同。
我们可以使用一个电压表或者一个示波器来测量电阻两端的电压变化,从而检测红外线的存在和强度。
需要注意的是,这个简单的红外线接收电路只能检测红外线的存在与否和强度的变化,无法解码红外线传输的具体内容。
如果需要解码红外线信号,还需要使用红外线解码器等其他电路。
红外控制原理
红外控制原理一、概述红外控制是一种常用的无线控制方式,通过发送和接收红外信号来实现对电器等设备的控制。
其原理是利用红外发射器将电信号转换为红外信号,然后由红外接收器接收并解码,最终实现对设备的控制。
二、红外发射器原理1. 红外发射管红外发射管是将电信号转换为红外信号的核心元件。
其内部由半导体材料构成,当通电时会产生热量并向四周辐射出去,形成一个辐射范围。
这个范围内的物体会受到热量的影响而产生温度变化,从而形成一个被称为“热点”的区域。
当这个“热点”位于红外接收器的接收范围内时,就可以被接收到。
2. 信号调制为了避免干扰和误解码,通常需要对发送的信号进行调制。
调制方式有多种,其中最常见的是脉冲宽度调制(PWM)。
在这种方式下,发送端会根据需要将电信号转换为不同宽度的脉冲信号,并加上一个载波信号,形成一个调制后的红外信号。
三、红外接收器原理1. 红外接收管红外接收管是将红外信号转换为电信号的核心元件。
其内部同样由半导体材料构成,当受到红外信号照射时,会产生一定电压并输出到后续电路中。
2. 解码电路为了将接收到的电信号转换为可用的控制信号,需要使用解码电路进行解码。
解码方式有多种,其中最常见的是Pulse Distance Modulation(PDM)和Pulse Position Modulation(PPM)。
在这两种方式下,解码器会对接收到的脉冲宽度或位置进行分析,并将其转换为对应的控制信号。
四、应用场景1. 家庭智能控制红外控制可以用于家庭智能控制系统中,实现对家庭电器等设备的远程控制。
用户可以通过手机等设备发送指令,从而实现对设备的开关、调节等操作。
2. 工业自动化控制在工业自动化领域中,红外控制可以用于机器人、生产线等设备的远程控制。
通过使用带有红外发射器和接收器的控制器,可以实现对这些设备的精准控制。
3. 电子产品控制红外控制也常用于电子产品中,如电视、音响等设备。
用户可以通过遥控器发送指令,从而实现对这些设备的开关、调节等操作。
PIC单片机红外线遥控接收解码实例
[MCD-DEMO2]PIC单片机红外线遥控接收解码实例[PIC16F877A+PICC]//实验目的:熟悉遥控接码解码的方法//数码管显示解码结果:高四位为用户码,低2位为按键码//硬件要求:跳线J19接通,其他跳线断开// 拨码开关S5、S6全部置ON// 其他拨码开关全部置OFF#include<pic.h>__CONFIG(0x1832);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡#define uchar unsigned char#define uint unsigned intvoid delay(char x,char y);#define bitset(var,bitno)((var)|=1<<(bitno))#define bitclr(var,bitno)((var)&=~(1<<(bitno)))union {struct {unsigned b0:1;unsigned b1:1;unsigned b2:1;unsigned b3:1;unsigned b4:1;unsigned b5:1;unsigned b6:1;unsigned b7:1;}oneBit;unsigned char allBits;} myFlag;#define CNT2_1 myFlag.oneBit.b1#define CNT2_2 myFlag.oneBit.b2#define CNT2_3 myFlag.oneBit.b3#define CNT2 myFlag .allBitsstatic bit FLAGS ;static bit Bitin;union Csr{ unsigned long i;unsigned char Csra[4];}myCsra;#define RMT RA1 // ;遥控接收输入脚位地址(RA。
红外遥控NEC解码程序
//=============================///********************************本解码程序完成于2017.07.29日,看起来不难,却花了我很多心思。
今我愿与网友分享此代码,希望能帮助跟我一样的初学者!!!此代码中定时器使用的是STC89C52的定时计数器2,位16位自动重装定时器。
此代码解码后解码数据显示在串口工具上。
********************************///=============================///********************************西安石油大学:王普********************************///=============================//#include <reg52.h>typedef unsigned char uchar;uchar count;uchar wedat[33];uchar dat[4];bit receive_flag , chuli_data_ok;sbit bus=P3^2;void init(){TMOD=0x22;//定时器1,0都是8位自动重装寄存器RCAP2H=0xfe;RCAP2L=0xff;TH2=(65535-256)/256;TL2=(65535-256)%256;EA=1;ET2=1;IT0=1; //红外外部中断EX0=1; //外部中断允许位TH1 = 0xfd; //此溢出率为波特率9600TL1 = 0xfd;TR1 = 1; //启动定时器1SM0 = 0;SM1 = 1; //设置串口工作方式1,10位异步收发器}void timer0() interrupt 5{TF2=0;count++;}void EX_INT0() interrupt 0//红外遥控信号进入中断服务程序{static uchar num;//静态变量,每次进入其值不变,num是每个脉宽的编号static uchar flag,flag1; //辅助标志位TR2=1;//当IT0下降沿发生,脉宽进入,打开定时器2if(flag == 1)//第一次flag=0,不执行下面程序,直接出中断程序,下次进入执行{if(( count < 60) && (count >= 40) )//检测起始码宽度,符合条件进入{num=0;//起始码编号为0,存入数组中flag1=1;//辅助标志位,用于进入下面程序}}if(flag1==1)//第二次进入中断后将33和脉宽依次存入数组中,编号为0~32 {wedat[num] = count; //读取T2定时器中断程序中的计数值count = 0;//都去完成后,清零num++;//编号++}flag=1;//第一次flag=0,第二次进入后为1,开始执行脉宽存储程序if(num > 32)//如果num大于32,也就是说33个脉宽都存入了,0~32,共33个。
红外解码1602液晶显示
/*-----------------------------------------------名称:LCD1602引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/#include "1602.h"#include "delay.h"#define CHECK_BUSYsbit RS = P1^0; //定义端口sbit RW = P1^1;sbit EN = P1^2;#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*------------------------------------------------判忙函数------------------------------------------------*/bit LCD_Check_Busy(void){#ifdef CHECK_BUSYDataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);#elsereturn 0;#endif}/*------------------------------------------------写入命令函数----------------- ----------------------------*/void LCD_Write_Com(unsigned char com){while(LCD_Check_Busy()); //忙则等待RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;}/*------------------------------------------------写入数据函数------------------------------------------------*/void LCD_Write_Data(unsigned char Data){while(LCD_Check_Busy()); //忙则等待RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------*/void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {if (y == 0){LCD_Write_Com(0x80 + x); //表示第一行}else{LCD_Write_Com(0xC0 + x); //表示第二行}while (*s){LCD_Write_Data( *s);s ++;}}/*------------------------------------------------写入字符函数------------------------------------------------*//* void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}*//*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/}/*-----------------------------------------------名称:遥控器红外解码数液晶显示论坛:编写:shifang日期:2009.5修改:无内容:按配套遥控器按键,液晶显示4组码值,分别是用户码用户码数据码数据反码显示如下:Code:1E-1E-00-FF------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include"1602.h"#include"delay.h"sbit IR=P3^3; //红外接口标志char code Tab[16]="0123456789ABCDEF";/*------------------------------------------------全局变量声明------------------------------------------------*/unsigned char irtime; //红外用全局变量bit irpro_ok,irok; //irpro_ok处理完成标志,接收好了,unsigned char IRcord[4]; //储存4个红外码的四个字节unsigned char irdata[33]; //储存32+1位unsigned char TempData[16]; //定义零时数据/*------------------------------------------------定时器0中断处理------------------------------------------------*/void tim0_isr (void) interrupt 1 using 1{irtime++; //用于计数2个下降沿之间的时间}/*------------------------------------------------外部中断0中断处理------------------------------------------------*/void EX0_ISR (void) interrupt 0 //外部中断0服务函数{static unsigned char i; //接收红外信号处理//static bit startflag=1; //是否开始处理标志位//if(startflag)//{if(irtime>=33&&irtime<63) //引导码TC9012的头码,9ms+4.5msi=0;irdata[i]=irtime; //存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i++;if(i==33){irok=1;i=0;}/*}else{irtime=0;startflag=1;} */}/*------------------------------------------------定时器0初始化------------------------------------------------*/void TIM0init(void)//定时器0初始化{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值ET0=1; //开中断TR0=1; //计时开始}/*------------------------------------------------外部中断0初始化------------------------------------------------*/void EX0init(void){IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1; //使能外部中断EA = 1; //开总中断}/*------------------------------------------------键值处理------------------------------------------------*/void Ir_work(void){TempData[0] = Tab[IRcord[0]/16]; //处理客户码十六进制高位TempData[1] = Tab[IRcord[0]%16]; //十六进制低位TempData[2] = '-';TempData[3] = Tab[IRcord[1]/16]; //处理客户码TempData[4] = Tab[IRcord[1]%16];TempData[5] = '-';TempData[6] = Tab[IRcord[2]/16]; //处理数据码TempData[7] = Tab[IRcord[2]%16];TempData[8] = '-';TempData[9] = Tab[IRcord[3]/16]; //处理数据反码TempData[10] = Tab[IRcord[3]%16];LCD_Write_String(5,1,TempData);irpro_ok=0;//处理完成标志}/*------------------------------------------------红外码值处理------------------------------------------------*/void Ircordpro(void)//红外码值处理函数{unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k]; //此处去除头码故从一开始if(cord>7) //大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差value|=0x80; //2.25>256X7>1.125msif(j<8){value>>=1; //数据串行发送,低位(bit0)在前,高位(bit7)在后}k++;}IRcord[i]=value;value=0;}irpro_ok=1;//处理完毕标志位置1}/*------------------------------------------------主函数------------------------------------------------*/void main(void){EX0init(); //初始化外部中断TIM0init(); //初始化定时器LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏LCD_Write_String(0,0,"");LCD_Write_String(0,1,"Code:");while(1)//主循环{if(irok) //如果接收好了进行红外处理{Ircordpro(); //红外码处理irok=0;}if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等{Ir_work();}}}。
