红外遥控控制按键程序

合集下载

红外遥控器工作原理

红外遥控器工作原理

红外遥控器工作原理
红外遥控器是一种常见的设备,它通过发送红外信号来控制电子设备。

红外遥控器的工作原理主要有以下几个步骤:
1. 按键操作:当用户按下红外遥控器上的按钮时,按键电路会感应到按键动作,并向电路板发送指令。

2.编码和调制:电路板接收到指令后,会将指令转化为数字信号,并对其进行编码和调制。

编码和调制的目的是将数字信号转换为适合传输的红外信号。

3. 发射红外信号:编码和调制之后,红外发射二极管会根据信号的高低电平产生相应的红外光波。

红外信号的频率通常在30kHz至60kHz之间。

4.传输和接收:红外信号在空中传输,当它接近被控制的电子设备时,设备上的红外接收器会接收到信号。

5.译码和解调:被控制的电子设备中的红外接收器会对接收到的红外信号进行译码和解调。

这些信号包含控制设备的指令。

6.设备响应:一旦接收到正确的红外指令,被控制的电子设备便会执行相应的操作,比如开启/关闭、音量调节或频道切换等。

红外遥控器的工作原理基于红外线技术,红外线属于电磁波的一种,其波长较长,无法被人眼所察觉。

通过以上的步骤,红
外遥控器能够将用户的指令通过红外信号传输到被控制的电子设备,从而实现远程控制的功能。

红外遥控器按键编码

红外遥控器按键编码
P4M1 = 0X00; P4M0 = 0XFF; P44 = 0; P50=0;
EA = 1;
//允许全局中断
EX0 = 1;
//允许 INT0 中断
PX0 = 0;
//INT0 的中断级别为低
IT0 = 0;
//设定 INT0 上升沿和下降沿都可以中断
/*初始化 T0:16 位自动重装填模式*/
{LED1=ON;LED2=OFF;LED3=OFF;LED4=OFF;LED5=OFF;}
if(temp==IR_2)
{LED1=OFF;LED2=ON;LED3=OFF;LED4=OFF;LED5=OFF;}
if(temp==IR_3)
{LED1=OFF;LED2=OFF;LED3=ON;LED4=OFF;LED5=OFF;}
break;
}
case IR_WordA: {
if((IR_Num%2)==0&&InfraredRayPin==1) {
TH0 = 0x00; TL0 = 0x00; TimeStart; break; } if((IR_Num%2)==1&&InfraredRayPin==0) { TimeStop; IR_Time=TH0; IR_Time<<=8; IR_Time|=TL0; IR_DataA<<=1; if(IR_Time<800) {
1
#define IR_WordB
2
#define IR_End
3
#define TimeStart (TR0=1)
#define TimeStop (TR0=0)
void InfraredRay_Init(void);

红外转发器使用说明书(总控版)

红外转发器使用说明书(总控版)

红外转发器使用说明书(总控版)功能介绍无线红外转发器主要包括红外学习、红外发射和无线接收模块。

转发器可以学习家电遥控器的红外信号(38K频率),通过把无线信号转换为对应的红外信号,从而实现控制家电的目的。

无线红外转发器主要配合索科特智能家居系统实现远程开关家电的目的。

本转发器只针对可红外遥控(频率38K)的家用电器。

安装方法1、安装方式本产品安装在螺口灯座上。

如下图1,选择安装位置1) 无线红外转发器发射的红外线在与垂直和水平方向都有一定的角度限制。

请参照图1和图2,确定转发器在垂直表面的初步安装位置。

2) 初步确定安装位置后,可参照“使用操作”的方法,测试实际控制效果,并根据测试情况调整安装位置。

2,安装转发器当位置合适后,则可将红外转发器灯座固定。

并固定其220V电源。

一、按键存储量可存储红外的遥控器按键数量49条二、技术参数1、工作电压:AC 220±22V2、工作温度:10-40℃3、储藏温度:-10-+65℃4、工作湿度:10%-90%5、储藏湿度:10%-95%6、红外控制距离≤8m7、与家电的最大夹角:<40度8、重量:0.077Kg三、对码首次使用时,需要通过家电总控制器对红外转发器进行配置。

方法如下:1、打开家电总控制器,进入到灯光5界面2、打开红外转器外玻璃罩,并通电启动转发器,约2秒启动完成后,按一下红外转发器上的配置键(不大于1S)红绿灯会同时闪烁,进入编号对码状态,持续20秒。

3、点击家电总控制器灯光5中的“打开窗帘”按钮发射信号,红外转发器收到后会响两声,并自动保存退出状态。

对码成功。

并盖上玻璃罩。

【注意事项】在对红外转发器进行对码时,请不要使用其它红外设备或无线设备,防止外界信号干扰。

四、红外家电学码【注意事项】进行红外学习前,一定要保证红外转发器与家电总控制器对码成功。

1、打开已对过码的家电总控制器,进入灯光5界面2、点击灯光5中的“开窗帘”键,红外转发器收到后会响两声,进入红外学习状态。

中控红外控制学习方法

中控红外控制学习方法

中控控制投影机开关机及视频,电脑切换和幕布开关机的学习
第一步:把红外感应接收器和中控电源接好
第二步:长按中控“台式电脑”按钮,时间6,7秒钟左右(最右边数下来第三个按钮),直到四个按钮指示灯全亮。

第三步:再次按“台式电脑”按钮,灯灭
学习控制键:
第四步:先按板面上的开机键,然后按投影机遥控器上的
开机键,对着中控这个位置(接收器),开机键读完。

第五步:重复第四步的方案,读关机键。

投影机的遥控器开机关机键为同一个键,也就是说,读开机和关机时,遥控器上是同一个键。

按照第四步读取视频和电脑。

(在遥控器上面找个视频和电脑信号切换按键)
电动幕布不用读取,直接接线。

接三根线:中控里面配了个电源有三个线,双色的那个线接幕布里面不经过开关的那根线(打开那个开关,没有经过开关直接连接的那个线),电源上的红线接幕布的上升线,第三个线接下降线。

红外控制过程完成,如果有那个按键没读进去,重复前面三步之后,直接读取那个没读进去的按键即可,直到所有数据读取完整。

还有不懂的地方请来电质询。

自己写的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有没有下降沿。

C51红外遥控代码

C51红外遥控代码

本程序只适用于本图所显示的遥控器以及stc12c5a60s2的单片机并且晶振是11.0592M的:
使用方法:
软件上将下列.c和.h加入c51工程,在主程序运行前加入红外初始化ini_hw()函数,然后运行程序的时候,如果signal=1,代表接收到按下的按键,用完后注意清零。

读key就是红外按键的值(1,2,3······代表按键依次的按键值),读kr就是按键的键值。

硬件上,把接收头的put接单片机的外部中断的P3^2上。

下面是.h文件
#ifndef _hwcl_h_ //红外处理,用于处理红外键值
#define _hwcl_h_
#include&lt;STC12C5A60S2.H&gt;
#include&lt;intrins.h&gt;
#define I 10
sbit js=P3^2;
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
extern uint key,kr; //key和kr都是键值,但kr是红外码二进制转换过来的,而key 是处理过的键值变成如1,2,3
extern uint signal; //当按键检测到时,signal值是1
extern uchar pdata b[40];
extern void ini_hw();
#endif。

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

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

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();}}。

STC单片机51简单的红外遥控发射程序C语言

STC单片机51简单的红外遥控发射程序C语言
for (j=0;j<43;j++) {s1=1;s1=1;Delay13us();} //高电平0.565ms无载波
}
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();}//结束位
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
TH0=0x9e;
TL0=0x58;
flag_time=1;
}
void int_ation(void) //开始初始化
{
TMOD=0x01; //开计时中断0初始化
TH0=0x3c;
TL0=0xb3;
TR0=1;
ET0=1;
EA=1;
}
////////////红外中断入口//////
void service_int0(void)
{
case 0x0C:KEY0=~KEY0;break;//按键1
case 0x18:KEY1=~KEY1;break;//按键2
case 0x5E:KEY2=~KEY2;break;//按键3
case 0x08:KEY3=~KEY3;break;//按键4
default :break;
}
}
}
/**************************TH0=0x9e;
TL0=0x58; //0.65+0.05=0.7ms; 25ms
}
}
if ((date[2]==(~date[3]))&&(date[0]==0x00)&&(date[1]==0xFF)) //地址码数据数据码验证
{
flag_ir=1;
switch(date[2])
}
}
if (IRIN==1)
date[i]=date[i]|0x80;
break;
}
}
if (IRIN==1)
{
TH0=0x9e;
TL0=0x58;//0.84+0.05=0.89ms; 25ms
while (1)
{
if (flag_time==1)
{
flag_time=0;
return;
}
if (IRIN==0)
return;
}
}
while (1)
{
if (IRIN==0)
{
if ((TH0*256+TL0)>2000) //如果时间大于4MS则进入数据接收
//if (((TH0*256+TL0)-(0xee*256+0x3a))>4000) //如果时间大于4MS则进入数据接收
{
TH0=0x9e;
TL0=0x58; //0.65+0.05=0.7ms; 25ms
void main (void)
{
unsigned int a,b;
int_ation();
while (1)
{
for(a=0;a<20000;a++)
{
LED=0;
/*你写的程序*/
}
for(b=0;b<20000;b++)
{
LED=1;
/*你写的程序*/
}
while(IRIN==1);
service_int0();
#include"reg51.h"
#include"intrins.h"
#define unint unsigned int
#define unchar unsigned char
sbit IRIN=P3^3;
sbit KEY0=P1^4;
sbit KEY1=P1^5;
sbit KEY2=P1^6;
{
while (1)
{
if (IRIN==1)
{
TH0=0xfc;
TL0=0xb8; //0.84+0.05=0.89ms;
break;
}
if (flag_time==1)
{
flag_time=0;
return;
}
}
while (1)
{
if (flag_time==1)
{
flag_time=0;
date[i]=date[i]>>1;
{
unsigned char i=0,j=0;
if (IRIN==1)
return;
flag_time=0;
TH0=0x9e;
TL0=0x58; //9+0.05=9.05ms 25ms
while (1)
{
if (IRIN==1)
{
if ((TH0*256+TL0)>4000) //如果时间大于8MS则进入4.5MS高电平检测//>8000
{
TH0=0x9e;
TL0=0x58; //4.5+0.05=4.55ms; 25ms
flag_time=0;
break;
}
else //如果时间小于8MS电平有跳变则为干扰,放弃跳出
{
return;
}
}
if (flag_time==1) //如果时间大于9.05MS放弃跳出
{
flag_time=0;
flag_time=0;
break;
}
else //如果时间小于4MS电平有跳变则为干扰,放弃跳出
{
return;
}
}
if (flag_time==1) //如果时间大于4.55MS放弃跳出
{
flag_time=0;
return;
}
}
for (i=0;i<4;i++)
{
for (j=0;j<8;j++)
sbit KEY3=P1^7;
sbit LED=P3^7;
bit flag_time=0;
bit flag_ir=0;
bit ir_date=0;
bit time0=1;
bit time1=1;
unsigned char date[4]={0,0,0,0};
/*************************/
void int_time3(void);
void int_ation(void); //开始初始化
void int_ation(void);
void service_int0(void);
//////*红外检测延时用*//////
void service_int1(void) interrupt 1
相关文档
最新文档