红外遥控控制按键程序

合集下载

红外遥控器工作原理

红外遥控器工作原理

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

红外遥控器的工作原理主要有以下几个步骤:
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();}//结束位

红外遥控器软件解码原理和程序

红外遥控器软件解码原理和程序

void rs232(void) interrupt 4{ static unsigned char sbuf1,sbuf2,rsbuf1,rsbuf2; //sbuf1,sbuf2 用来接收 发送临时用,rsbuf1,rsbuf2 用来分别用来存放接收发送的半字节 EA=0; //禁止中断 if(RI){ RI=0; //清除接收中断标志位 sbuf1=SBUF; //将接收缓冲的字符复制到 sbuf1 if(sbuf1==HEAD){ //判断是否帧开头 state1=10; //是则把 state 赋值为 10 buf1=RECEIVE; //初始化接收地 址 } else{
void tf_2(void); void read_ir(void); void ir_jiema(void); void ir_init(void); void ir_exit(void); void store_ir(void); void read_key(void); void reset_iic(void); unsigned char read_byte_ack_iic(void); unsigned char read_byte_nack_iic(void); bit write_byte_iic(unsigned char a); void send_ack_iic(void); void send_nack_ic(void); bit receive_ack_iic(void); void start_iic(void); void stop_iic(void); void write_key_data(unsigned char a); unsigned int read_key_data(unsigned char a); void ie0(void) interrupt 0{ie_0();} void tf0(void) interrupt 1{tf_0();} void ie1(void) interrupt 2{ie_1();} void tf1(void) interrupt 3{tf_1();tf_2();} void tf2(void) interrupt 5{ //采用中断方式跟查询方式相结合的办法解 码 EA=0; //禁止中断 if(TF2){ //判断是否是溢出还是电平变化产生的中断 TF2=0; //如果是溢出产生的中断则清除溢出位,重 新开放中断退出 EA=1; goto end; } EXF2=0; //清除电平变化产生的中断位 *ir=RCAP2H; //把捕捉的数保存起来 ir++; *ir=RCAP2L; *ir++; F0=1; TR0=1; //开启计数器 0 loop: TL0=0; //将计数器 0 重新置为零 TH0=0; while(!EXF2){ //查询等待 EXF2 变为 1 if(TF0)goto exit; //检查有没超时,如果超时则退出 };

K1红外线遥控控制器说明书

K1红外线遥控控制器说明书

红外遥控控制器使用说明书
产品特点:
◆可遥控控制光源的效果。

(接收距离10-15米,接收角度80度)
◆智能存储客户最后使用的信息。

◆控制器可控制21种效果变化(16种静态效果,5种动态效果)。

◆使用螺丝柱与DC插座接头,接线较为方便。

产品图片:
按键及功能说明:
2,键分别为亮度调节(此键可9级调光最亮到最暗,任意模式下有效)
3,静态单色键16个,分别对应一个颜色
4,SPEED↑/ SPEED↓分别为速度加减(此键可10级调整, 动态模式下有效)
5,CYCLE键自动循环(七彩跳变,渐变,闪烁, 任意模式下有效)
6,遥控器使用时先抽掉电子处的绝缘片,
接线说明:
产品左边接线头+V、-V分别接DC5V或12V正、负极输入,右边接线头+V接光源正极,R、G、B分别接光源的红、绿、蓝信号线输出端,使用DC头输入时限制在5A
电参数说明:
产品输入电压为DC5V或12V,每路输出最大电流为6A,建议使用电流为4A。

尺寸:
55*42*23mm。

红外线遥控器接收程序

红外线遥控器接收程序

/*红外线接收程序,本程序运行在NEC制下的遥控器下,在铁牛单片机开发板上可直接运行,用其他板子的朋友少作修改就行了。

本程序是参照了百度文库《红外数据传输》和铁牛开发板自带的示例程序才最终得以完成。

在学习的过程中我结合了两者的优势思想并整合为如下程序。

----何元杰 2010/09/04*/#include <reg51.h>//定义红外接收脚,sbit PIN_Rec=P3^3;//共阴数码管 0-9 a-f - 表code unsigned char table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};unsigned char disdate[4]={0};//显示管数据void delay(unsigned char ); //延时子函数void display( ); //数字的显示函数void main(void){unsigned char i=10;EA=1; //首先开启总中断EX1=1; //开启外部中断 1IT1=1; //设置成下降沿触发方式while(i){ //循环显示,接收都由中断处理display();i--;if(i==0) //为什么要这样?——是防止按键抖动产生的干扰啦。

{ //没加这一句之前接收总是不正确//花了我3个小时才找到原因啊EX1=1;i=255;}}}void display( ){unsigned char i;P1=0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;i<4;i++){ //动态显示P2=table[disdate[i]]; //查表法得到要显示数字的数码段delay(10);P2=0;P1++; //下一位数码管}}void delay(unsigned char num){//延时6*num+5个机器周期while(num)num--;}void hongwai(void) interrupt 2{ //外部中断 1 ,INT1(P3^3)连接红外线接收IC数据脚unsigned char i,j,tmp;EX1=0; //关闭中断delay(100);if(PIN_Rec) //防止干扰return;while(!PIN_Rec); //等待引导码9MS的低电平结束while(PIN_Rec); //等待4.5MS的高电平结束for(i=0;i<4;i++){tmp=0;for(j=0;j<8;j++){tmp>>=1;delay(30); //消除干扰while(!PIN_Rec); //等待0.56MS的低电平结束delay(140); //当大于0.8MS 后再判断遥控接收脚的电平if(PIN_Rec){tmp+=0x80;//数据是1,要继续延迟1MS才能跨入下个位编码的低电平中 delay(122);}}disdate[i]=tmp;}//校验接收是否有误if(disdate[0]==~disdate[1]&&disdate[2]==~disdate[3]){tmp=disdate[0];disdate[0]=disdate[0]/16;disdate[1]=tmp%16;tmp=disdate[2];disdate[2]=disdate[2]/16;disdate[3]=tmp%16;}else{disdate[0]=16;disdate[1]=16;disdate[2]=16;disdate[3]=16;}}。

红外遥控程序main

红外遥控程序main
case 0x0c:DataPort=dofly_DuanMa[1];break;//1 显示相应的按键值
case 0x18:DataPort=dofly_DuanMa[2];break;//2
case 0x5e:DataPort=dofly_DuanMa[3];break;//3
unsigned char IRcord[4];
unsigned char irdata[33];
/*------------------------------------------------
函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);
/*------------------------------------------------
定时器0初始化
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数2个下降沿之间的时间
}
/*------------------------------------------------
外部中断0中断处理
EA = 1; //开总中断
}
/*------------------------------------------------
定时器0中断处理
------------------------------------------------*/

51单片机红外遥控程序

51单片机红外遥控程序
;=================================================
;遥控执行部份
IR_GOTO
;这里还要判断1AH和1BH两个系统码或用户码,用于识别不同的遥控

;MOV A,1AH
;CJNE A,#xxH,IR_ERROR ;用户码1不对则退出
;MOV A,1BH
单片机采用外部中断INTI管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。
// 解码值在Im[2]中,当IrOK=1时解码有效。
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码
MOV R7,#202
DELAY882_A
NOP
NOP
DJNZ R7,DELAY882_A
RET
;=============================1000
DELAY1000 ;1.085x ((229x4)+5)=999.285
MOV R7,#229
DELAY1000_A
NOP
NOP
DJNZ R7,DELAY1000_A
上述“0”和“1”组成的
32位二进制码经
38kHz的载频进行二次调制以提高发
射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空
间发射,如图
3所示。

3遥控信号编码波形图
UPD6121G产生的遥控编码是连续的
32位二进制码组,其中前
16位为用
户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用

单片机红外发射程序

单片机红外发射程序
TR0=0; //关闭定时器0
ircode=ircode>>1; //将数据右移,即从低位到高--------------------------------------------------------------------
void ir_send() //发送红外数据
void main()
{
timer0_init(); //定时0初始化
count=0; //中断计数先清0
irflag=0; //红外发射标志先置0
while(1)
{
keyscan(); //键值扫描
if(keyflag) //若有按键按下
{
else set_count=43;//35; //为0则0.565ms的低电平 (//后为12M晶振下的数值)
irflag=0; //低电平则不发射
count=0; //中断计数清0
TR0=1; //开启定时器0
while(count<set_count); //等待发送完
TMOD=0x02; //定时0 8位自动重装模式
ET0=1;
TH0=0xe6;//0xf3; //定时13us,38K红外矩形波,晶振24M (//后为12M晶振下的数值)
TL0=0xe6;
}
//---------------------------------------------------------------------------
TR0=0;
ir=1; //发射完了关闭红外发射二极管
}
//---------------------------------------------------------------------------

NEC协议的红外遥控器驱动程序

NEC协议的红外遥控器驱动程序

是不是觉得红外遥控 +51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也 没那么纠结,自己摸索摸索,总能找出办法来的。

本程序占用了 51单片机的定时器 0以及中断1两个资源,为的是使单片机能接收到每 一个红外脉冲信号, 一个都不能少。

如果舍不得用这两个资源,还有另一种查询的办法,就 是不一定每个信号都能收到,可自己琢磨一下。

需要全套NEC 协议红外遥控器资料的,到网上找,到处都有,而且很全。

另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研 究。

毕竟有些时候资料会过时,只要里面有一点东西变化了, 程序就完全不一样了。

这种弯 路,尽量少走。

本程序只是头文件,具体到应用上还要各位自己动脑筋了,希望对大家有所帮助。

共 同学习,共同进步! 69 70 71 68 64 67 07 21 09 22 25 13 12 24 94 08 28 90 66 82 74 NEC 协议的红 外遥控器按 键对应数字 一览/******************************************************************INF_NEC.h用于NEC 协议的遥控器,主控器为 51单片机。

用户码8位,分布于2-17个脉冲;按键码8位,分布于18-33个脉冲。

皆为前8原码,后8反码。

注意:本驱动占用 51单片机的外部中断1以及定时器0两个资源,编程时注意 不要再乱动这两个资源。

*******************************************************************/#in clude<reg52.h> #defi ne uchar un sig ned char#defi ne uint un sig ned intuchar nec_cod[2]={0,1};〃遥控器的编号,编号 uchar nec_dat[2]={0,1};〃遥控器的数据,数据 #ifndef __INF_NEC_#defi ne __INF_NEC extern void n ec_i nit(); extern void n ec_act();#en difvoid nec_init() //外中断1及定时器0的初始化函数{TMOD=(TMOD&0xf0)|0x02; // 定时器0模式2,8位自动重装//11.0592MHz 晶振,计数 230次,大概时间 250us//定时器0使能,先关着〃外部中断1使能,用来接收红外信号〃开总中断void nec_act()//按键功能程序{if(( nec_dat[0]==~ nec_dat[1]) &&(n ec_flag==3)){switch( nec_dat[0]){case 69: break;case 70: break;case 71: break;case 68:break;case 64:break; uchar nec_flag=0;//nec_flag:遥控码的标志位。

c51学习型红外遥控器程序

c51学习型红外遥控器程序

c51学习型红外遥控器程序#include; //装入AT89X51头文件#include;//装入红外解码程序#include;//装入24c02读写程序sbit key=P1^0;//定义按键IOsbit led=P0^0; //定义指示ledsbit rel=P0^1;//定义输出控制脚unsigned char kaver; //定义kaver为输出口状态缓存unsigned char iccdate,irdate; //定义24c02数据和解码数据//延时10ms函数,用于开关消抖等delay10ms(){unsigned char i,j;for(i=20;i>;0;i--)for(j=248;j>;0;j--);}//学习红外解码并写入24c02的函数study(){IR_IN();irdate=IRCOM[3];iccdate=ReadIIC(W_cmd,0x00,R_cmd);if(irdate!=iccdate) //只在解码结果与读取结果不同时写入24C02{if(irdate!=0)//防止没有接收到红外信号,IRCOM[3]置零时,误写入0{WP=0;WriIIC(W_cmd,0x00,irdate);delay10ms();WP=1;led=0;while(key==0);//学习成功等待按键释放,led停止闪动作为指示}}}//进入学习状态时的led闪动函数flash(){unsigned char i;while(key==0){led=~led;for(i=50;i>;0;i--)study();}}//按键模式识别函数keymod(){unsigned char m=0;while(key==0) //如果按键按下,开始对按键时间进行计数{delay10ms();//计数时间延时m++;delay10ms();//计数时间延时if(m>;=90)//如果计数次数大于90次,等于按键按下时间大于约5秒后,进入led闪动学习模式{m=0;flash();}}if(m。

红外遥控器说明书2003

红外遥控器说明书2003

学习型红外遥控器DQU-HW使用说明书w w w . n j k e j i n . c n南京科进自动化有限公司目 录一 技术指标 (1)二 使用方法 (2)1 硬件连接 (2)2 打开9346 (2)3参数读写及修改 (3)4端子说明 (4)5遥控学习 (6)6遥信遥测量 (9)7遥控发送 (11)8注意事项 (12)学习型红外遥控器DQU-HW模块是我公司研制的新一代智能化控制产品,本产品可以通过学习的方式,掌握遥控器的遥控指令,并模拟发出红外指令,主要应用于各种空调的远程遥控,并且同时监测现场环境的温度和空调运行状态,适用于电力、通信机房等动力环境监控系统的远程空调自动控制。

本设备采用通信接口RS232/RS-485可选,带有地址自动识别功能,便于现场设备的总线组网。

设计人性化,安装简单、方便。

特采用独特的光电隔离技术和看门狗技术,有过流及过压保护,具有很强的抗浪涌电流的冲击和干扰的能力。

一 技术指标1监测量a)模拟量: 4路遥测量(1路内部自带温度采集,3路直流采集)b)开关量: 3路遥信量c)遥控量: 7路遥控量(红外遥控编码学习,发射)2 指标A) 遥测量:测量范围 0 +5V精度0.5% (2.5V直流条件下)B)遥信量:光电隔离抗干扰 1500V输入电流 2~10mA接口电压 5V~12VC)遥控量:红外方式 38KHz调制波长 0.940 um有效距离 5米以内D)通信接口:电气接口(国际标准) RS485或RS232 可选通信方式 串行 半双工速率 300、600、1200、2400、4800、9600、19200bps 数据格式 N.8.1连接方式 全分布式,总线接口1 / 14规约 DQU规约 (参数:11)E)供电电源:电源电压 DC +12 V±10% (直流)F)环境条件:温度条件 0-45℃湿度条件 10-90%图1外观图3 产品外观学习型红外遥控器如图1所示。

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码一、以如下遥控器举例:二、检测按键键值的arduino程序:#include//红外遥控库文件网上存有,一般会通过百度账号给我帖子intrec_pin=11;//接收端插槽irrecvirrecv(rec_pin);decode_resultsresults;voidsetup(){serial.begin(9600);//键值在串口通信窗口中查看irrecv.enableirin();//红外接收端初始化}voidloop(){if(irrecv.decode(&results))//是否收到键值编码{serial.println(results.value,hex);//通过串口列印十六进制的键值delay(500);irrecv.resume();//接收下一个值}}1三、检测到的十六进制按键键值(在串口监视器中查看):按键(1)(4)(7)(*)(←)键值0xffa25d0xff22dd0xffe01f0xff68970xff10ef 按键(2)(5)(8)(0)(↑)(ok)(↓)键值0xff629d0xff02fd0xffa8570xff98670xff18e70xff38c70xff4ab5按键(3)(6)(9)(#)(→)键值0xffe21d0xffc23d0xff906f0xffb04f0xff5aa5四、arduino的红外遥控器掌控led例程:includeintrecv_pin=11;irrecvirrecv(recv_pin);decode_resultsresults;voidsetup(){serial.begin(9600);irrecv.enableirin();//初始化红外遥控pinmode(13,1);led初始化,照亮}voidloop(){if(irrecv.decode(&results)){if(results.value==0xffa25d)//确认接收到按键(1)的编码,此码是预先读出来的按键编码。

红外接收程序,1602上显示用户码和数据码

红外接收程序,1602上显示用户码和数据码
L1602_char(1,5,'b')
*输入:行,列,需要输入1602的数据
*输出:无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
while(!hwx);//低电平开始,不处理只等待高电平接收
ly_ct=0;
while(hwx){//高电平开始,
delay100us();
if(ly_ct>25)
return;
return;
}
if(ly_ct<35)//NEC引导码引导码的后4。5MS,ly_ct约45
return;
/***********开始接收四个字节内容**************************************/
for(i=0;i<4;i++){
for(ia=0;ia<8;ia++){
case 0x82:num=6;break;
case 0xf8:num=7;break;
case 0x80:num=8;break;
case 0x90:num=9;break;
case 0x88:num=10;break;
case 0x83:num=11;break;
case 0xc6:num=12;break;
else IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9) { IRCOM[6]=IRCOM[6]+0x37;}
  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
相关文档
最新文档