c单片机红外解码程序汇编版和c语言版

c单片机红外解码程序汇编版和c语言版
c单片机红外解码程序汇编版和c语言版

c单片机红外解码程序汇编版和c语言版

集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

纯软件解码 --- 汇编版

利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低

ORG 0000H

T0ZD BIT 20H.2

XH BIT P3.3 ;红外接收头数据接口

RS BIT P2.3

RW BIT P2.4

E BIT P2.5

BB BIT P3.6

ORG 0000H ;

AJMP MAIN

ORG 000BH ;T0中断入口

LJMP T0ZDCX

ORG 0100H ;主程序首地址

MAIN:

LCALL CSH

MOV DPTR,#TAB ;总查表

SETB EA ;T0中断设定

SETB ET0

MOV TMOD,#01H

DDXH: ;信号接收前准备

SETB P2.0 ;关信号指示灯

MOV P0,#0FFH

CLR TR0 ;关T0中断

CLR T0ZD ;接收信号时间判断

MOV R5,#4 ;延时计数

MOV TH0,#00H

MOV TL0,#00H

;================解码主要过程===========关键

============================================================ JB XH,$ ;等待电平变低,解码从这开始

CLR P2.0 ;开信号指示灯,表示正在接收信号

MOV P0,#8EH

SETB TR0 ;开T0中断

LCALL YS3MS

JB XH,DDXH ;干扰检测

LCALL YS3MS

JB XH,DDXH ;干扰检测

DD1:

JB T0ZD,DDXH ;是否超出接收允许时间

JNB XH,DD1 ;等待电平变高

LCALL YS3MS

JNB XH,DDXH ;干扰检测

DD2:

JB T0ZD,DDXH ;是否超出接收允许时间

JB XH,DD2 ;等待电平变低

JSSJ: ;信号确认,开始接收数据

MOV R0,#30H

ZJ: ;接收一个字节数据

MOV R2,#8

WEI: ;位数据,分辩0和1

JB T0ZD,DDXH ;是否超出接收允许时间

JNB XH,WEI ;等待电平变高

LCALL YS845

MOV C,XH ;取位数据

RRC A

DD3:

JB T0ZD,DDXH ;是否超出接收允许时间

JB XH,DD3 ;等待电平变低,为1的高电平提供过度DJNZ R2,WEI ;8位数据是否接收完

MOV @R0,A

INC R0

CJNE R0,#34H,ZJ ;四字节数据是否接收完

MOV A,33H

CPL A

CJNE A,32H,DDXH ;键值确认,解码

MOV R4,A

;==========这里已经取出键值,存在R4中

==================================================

MOV R7,#100;

TSY:MOV R6,#255

DJNZ R6,$

CPL BB

DJNZ R7,TSY

MOV A,#0CDH ;键值高位输出

LCALL YJP_XZL

MOV A,R4

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0CEH ;键值低位输出

LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ ;

LCALL DYBF ;调用灯控制子程序

LJMP DDXH ;返还等待下一次信号

YS845: ;延时845微秒

MOV R7,#255

DJNZ R7,$

MOV R7,#165

DJNZ R7,$

RET

YS3MS: ;延时3ms

MOV R7,#8

DDD:

MOV R6,#255

DJNZ R6,$

DJNZ R7,DDD

RET

T0ZDCX: ;T0中断程序

MOV TL0,#00H

MOV TH0,#00H

DJNZ R5,T0FH

SETB T0ZD

T0FH:

RETI

;===============以下是多余部分

=============================================================== ============

DYBF:

MOV A,#0C0H ;用号码前高位输出

LCALL YJP_XZL

MOV A,30H

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C1H ;用户码前低位输出

LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C4H ;用户码后高位输出

LCALL YJP_XZL

MOV A,31H

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C5H ;用户码后低位输出

LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ

;============此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例

MOV A,R4

CJNE A,#0CH,BA1 ;是否1号键按下

CPL P1.0 ;点亮1号灯

BA1:

CJNE A,#18H,BA2 ;是否2号键按下

CPL P1.1 ;点亮1号灯

BA2:

CJNE A,#5EH,BA3 ;是否3号键按下

CPL P1.2 ;点亮1号灯

BA3:

CJNE A,#08H,BA4 ;是否4号键按下

CPL P1.3 ;点亮1号灯

BA4:

CJNE A,#1CH,BA5 ;是否5号键按下

CPL P1.4 ;点亮1号灯

BA5:

CJNE A,#5AH,BA6 ;是否6号键按下

CPL P1.5 ;点亮1号灯

BA6:

CJNE A,#42H,BA7 ;是否7号键按下

CPL P1.6 ;点亮1号灯

BA7:

CJNE A,#52H,BAB ;是否8号键按下

CPL P1.7 ;点亮1号灯

BAB:RET

CSH:

;=============液晶初始化===============

MOV A, #00111000B ;8位数据,双行显示,5-7字型

LCALL YJP_XZL ;调用写液晶指令

MOV A, #00001100B ;显示屏开启,光标出现在地址计数器位置,光标不闪烁

LCALL YJP_XZL ;调用写液晶指令

MOV A, #00000110B ;光标右移一格,AC值加一,字符全部不动LCALL YJP_XZL ;调用写液晶指令

MOV A,#81H ;

LCALL YJP_XZL

MOV A, #4CH ;L的ASCII码

LCALL YJP_XSJ

MOV A,#83H ;

LCALL YJP_XZL

MOV A, #47H ;G的ASCII码

LCALL YJP_XSJ

MOV A,#85H ;

LCALL YJP_XZL

MOV A, #58H ;X的ASCII码

LCALL YJP_XSJ

MOV A,#88H ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码

LCALL YJP_XSJ

MOV A,#89H ;

LCALL YJP_XZL

MOV A, #68H ;h的ASCII码

LCALL YJP_XSJ

MOV A,#8AH ;

LCALL YJP_XZL

MOV A, #69H ;i的ASCII码

LCALL YJP_XSJ

MOV A,#8CH ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码

LCALL YJP_XSJ

MOV A,#8DH ;

LCALL YJP_XZL

MOV A, #61H ;a的ASCII码LCALL YJP_XSJ

MOV A,#8EH ;

LCALL YJP_XZL

MOV A, #6FH ;o的ASCII码LCALL YJP_XSJ

MOV A,#0C2H ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码LCALL YJP_XSJ

MOV A,#0C6H ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码LCALL YJP_XSJ

MOV A,#0CAH ;

LCALL YJP_XZL

MOV A, #4AH ;J的ASCII码LCALL YJP_XSJ

MOV A,#0CBH ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码LCALL YJP_XSJ

MOV A,#0CCH ;

LCALL YJP_XZL

MOV A, #3AH ;:的ASCII码LCALL YJP_XSJ

MOV A,#0CFH ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码LCALL YJP_XSJ

RET

;=========写指令到液晶============= YJP_XZL:

LCALL CHECK_BUSY;查询忙碌状态

CLR E

CLR RS

CLR RW

SETB E

MOV P0,A;写指令

CLR E

RET

;==========写数据到液晶==============

YJP_XSJ:

LCALL CHECK_BUSY;查询忙碌状态

CLR E

SETB RS

CLR RW

SETB E

MOV P0,A;写数据

CLR E

RET

;=========查询忙碌标志============

CHECK_BUSY:

PUSH ACC

BUSY_LOOP:

CLR E

SETB RW

CLR RS

SETB E

MOV A,P0;读取状态

JB p0.7,BUSY_LOOP

POP ACC

LCALL DEL

RET

DEL: MOV R6,#5

L1: MOV R7,#248

DJNZ R7,$

DJNZ R6,L1

RET

TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

DB 41H,42H,43H,44H,45H,46H

END

中断加定时器---C语言版

优点:完全是状态解码,极少的占用系统软件资源(CPU),随时都可以解码,而不管系统此时运行到何处。

缺点:占用系统两个硬件资源,一个外部中断和一个定时器。/******************************************************

********六哥红外解码程序********************************

********************************************************/

#include"STC15Fxxxx.H"

///**************************************************

/////用户配置区:

#define xi_tong_pl晶振频率设定如你的系统晶振频率是12MHz,则写

#define jan_zhi P1 ///解码输出二进制端口,解码成功则从该端口输出键值的二进制

sbit zhi_s = P5^5; ///解码成功标志,解码成功一次该端口取反一次

////外部中断

#define zd_rkdz interrupt 0 ///中断入口设置

#define zd_cffs IT0 ///中断触发方式设置

#define zd_dk EX0 ///中断打开设置

////

#define stc_dsqsz AUXR &= 0x7F;//定时器时钟12T模式,不需要可在AUXR....前加//

///**************************************************

/************************************************************** ****

*****本程序使用外部中断加定时器来实现红外解码,占用系统软件资********

*****源极少,硬件方面占用了一个外部中断,定时器中断还可以进行********

*****一些简单的运用,软件部分可以做很多的动作,就看你发挥了!********

*************************************************************** ***/

#define shi_jian定时器设置,请勿更改

unsigned char hwyhmh,hwyhml,hwjz,hwsj,hwjmws;///全局变量

bit hwjmok,yxjm;///全局变量,红外解码OK,允许解码

void main(void)

{

EA=1; //总中断打开

zd_cffs=1; //外部中断_边沿触发方式

zd_dk=1; //外部中断_打开

ET0=1; //定时器中断打开

stc_dsqsz

TMOD &= 0xF0; //设置定时器模式

TMOD |= 0x01; //设置定时器模式

while(1)

{if(hwjmok)

{hwjmok=0;

jan_zhi=hwjz;

zhi_s=~zhi_s;

}

}

}

/*------------------------------------------------

定时器0中断子程序

------------------------------------------------*/

void T0ZDCX(void) interrupt 1 using 3

{

yxjm=0; //未收到重复码清除解码允许标志

hwjz=0;

TR0=0; //关闭定时器

}

/*********************************************************

中断方式红外接收程序

***********************************************************/ void ZDhwjsCX(void) zd_rkdz using 3

{

unsigned int a=TH0*256+TL0;

TL0=0;

TH0=0;

TR0=1; ///开启T0

if(a>shi_jian_*13000&&a

{

hwsj=0;

hwjmws=32;

yxjm=1;

}

else if(yxjm) ///if1分支1.已收到引导码,允许解码

{

if(a>shi_jian_*11000&&a

{

hwjmok=1;

}

else ///if2分支3。否则解码,取位

{

hwjmws--;

////////////////////////////////////////////////////////

if (a>shi_jian_*2000&&a

{

hwsj>>=1;

hwsj|=0x80;

}

else if (a>shi_jian_*1000&&a

{

hwsj>>=1;

}

else

{

hwjmws=32;

yxjm=0; //清除允许解码标志

TR0=0; //关闭T0

}

//////////////////////////////////////////////////////////

}

switch(hwjmws)

{case 24:{

hwyhmh=hwsj;

hwsj=0;

}

break;

case 16:{hwyhml=hwsj;

hwsj=0;}

break;

case 8:{hwjz=hwsj;

hwsj=0;}

break;

case 0:{if(hwjz==~hwsj)

{hwjmok=1;

TL0=shi_jian_*12000%256;

TH0=shi_jian_*12000/256;

}

}

break;

default:;}

}

else;

}

中断加定时器---汇编版

;******************************************************

;********六哥红外解码程序********************************

;********************************************************/

;************************************************************** ****

;*****本程序使用外部中断加定时器来实现红外解码,占用系统软件资********

;*****源极少,硬件方面占用了一个外部中断,定时器中断还可以进行********

;*****一些简单的运用,软件部分可以做很多的动作,就看你发挥了!********

;************************************************************** ****/

hwyhmh data 7fh

hwyhml data 7eh

hwjz data 7dh

hwsj data 7ch

DSQ_ZDCS data 7bh

ZDCS DATA 7AH

hwjmok bit 20h.0

yxjm bit 20h.1

hwjmwei bit 20h.2

hwjmkg BIT 20H.3

HWJST BIT P3.3

ORG 0000H

AJMP MAIN

ORG 0013H

LJMP WBZD1

ORG 000BH

LJMP DSQ_0

ORG 0050H

MAIN:

SETB EA

SETB IT1

SETB EX1

SETB ET0

MOV TMOD,#01H

CLR hwjmkg

CLR yxjm

CLR hwjmok

HHHH:

JB hwjmok,jm_cg ;JBC:为1跳转并把该位清零,为0则顺序执行 ;此部分可写其他程序,不会影响接收

LJMP HHHH

jm_cg: ;这里写解码成功后的动作

CLR hwjmok

MOV P1,hwjz

LJMP HHHH

;==============================================

WBZD1:

INC ZDCS

MOV A,ZDCS

JNB yxjm,ZD0_5 ;

CLR TR0

MOV TH0,#0FAH ;设置定时1400us

MOV TL0,#70H ;

SETB TR0 ;开定时器

XCH A,hwsj

MOV C,hwjmwei

CLR hwjmwei

RRC A

XCH A,hwsj

CJNE A,#10,ZD0_0 ;取出用户码高位

MOV hwyhmh,hwsj

AJMP ZD0_4

ZD0_0:

CJNE A,#18,ZD0_1 ;取出用户码低位

MOV hwyhml,hwsj

AJMP ZD0_4

ZD0_1:

CJNE A,#26,ZD0_2 ;取出键值

MOV hwjz,hwsj

AJMP ZD0_4

ZD0_2:

CJNE A,#34,ZD0_4 ;取出键值反码

MOV A,hwsj

CPL A

CJNE A,hwjz,ZD0_3 ;键值判断

SETB hwjmok ;解码正确,置位标志位ZD0_3: ;解码不成功

CLR TR0 ;关闭定时器

CLR hwjmkg ;关闭解码开关

CLR yxjm ;清除允许解码标志MOV ZDCS,#0 ;中断次数清零

MOV DSQ_ZDCS,#0 ;定时器中断次数清零ZD0_4:

RETI ;中断返回

ZD0_5: ;开始接收引导码

CJNE A,#1,ZD0_3 ;

MOV TH0,#0F2H ;设置定时3.5ms

MOV TL0,#54H ;

SETB TR0 ;开定时器

SETB hwjmkg ;开红外解码开关AJMP ZD0_4

DSQ_0:

JNB hwjmkg,T0FH ;

JNB yxjm,DSQ_0_0 ;

SETB hwjmwei

CLR TR0

T0FH:

RETI

;==========引导码判断程序=============== DSQ_0_0:

MOV TH0,#0F2H ;设置定时3.5ms

MOV TL0,#54H ;

INC DSQ_ZDCS ;对T0中断计数

MOV A,DSQ_ZDCS

CJNE A,#1,DSQ_0_1

JB HWJST,JMCW ;判低电平,9ms引导码AJMP T0FH

DSQ_0_1:

CJNE A,#2,DSQ_0_2

JB HWJST,JMCW ;判低电平,9ms引导码AJMP T0FH

DSQ_0_2:

JNB HWJST,JMCW ;判高电平,4.5ms引导码SETB yxjm ;引导码接收成功,允许解码CLR hwjmwei ;

CLR TR0

AJMP T0FH

JMCW: ;引导码接收错误,

CLR TR0 ;关闭定时器

CLR hwjmkg ;关闭解码开关

CLR yxjm ;清除允许解码标志

MOV ZDCS,#0 ;中断次数清零

MOV DSQ_ZDCS,#0 ;定时器中断次数清零AJMP T0FH

END

定时器捕获中断法---c语言版

基于单片机模拟红外编码解码的设计

开放实验报告 课题名称基于单片机的红外解码器的设计学生姓名 系、年级专业信息工程系、11、12级电子信息工程指导教师江世明 2014年 5 月20日

基于单片机的红外解码器的设计 一.实验目的 1、了解红外编码原理,模拟红外发射信号; 2、用程序实现红外编码的解码; 二.实验内容 设计基于单片机的红外解码器,实现红外遥控信号智能解码,要求制作出实物,实现解码功能。 三.电路设计 1、红外编码原理 在实际应用中红外编码将二进制码调制到38MHz的载波频率上,通过在空中传播,由红外接收头接收之后,由内部的解调电路进行解调, 解调出来的就是我们发送的那些二进制码。红外编码方式根据日本NEC 协议编码。每次发送四个字节:用户码,用户反码,数据码,数据反码。数据 0和 1的区别通常体现在高低电平的时间长短上。一次按键首先发送9ms的低电平和4.5ms的高电平的引导码。 实际生活中,用遥控器发出的信号与上面的信号是相反的,经过红外线接收头解码以后就和上图一样了,值得大家注意的是发射模块的芯片不同,引导区的时间和数据都有所不同,但解决的方法都是一样的。 引导码后就是用户码。但是怎么来区分0和1呢?前面我们提到了PWM(脉宽调制)。根据脉冲的宽度来区别0和1.0.56ms低电平之后接0.56ms高电平为0,接1.12ms高电平为1.

2、红外解码方法 在实际生活中红外解码一般由红外接收头接收并解码。解码时先跳过9ms 高电平和4.5ms的低电平,然后跳过0.56ms的低电平,最后通过循环等待搞电平的结束并计时。通过判断高电平时间的长短来区分0(0.56ms)和1(1.12ms)。最后判断接收到的四个字节(用户码,用户反码,数据码,数据反码)中数据码和取反后的数据反码相不相等。 3、红外编解码电路 四、程序设计 见附录 五、系统仿真

基于单片机的红外遥控系统设计

课程设计 基于单片机的红外遥控系统设计 学院:计算机与通信工程学院 专业:通信工程 班级:通信11-3班 姓名: 学号:

天津理工大学 摘要 本设计采用51单片机作为遥控发射接收芯片,HS003B作为红外一体化接收发射管,在此基础上设计了一个简易的智能红外遥控系统。系统包括接收和发射两大部分,发射部分有16个按键,接收部分含有8盏彩色LED灯、一片二位数码管和蜂鸣器系统。发射部分通过键盘扫描判断哪个键被按下,经过单片机编码程序进行编码,控制红外发射电路发送信号。接收部分解码信号,实现相应的输出。本设计方案结合红外遥控设计简单、作方便、成本低廉等特点。 关键字:红外遥控信号调制编码解码

天津理工大学 目录 摘要................................................................................................................................................... I I 1.绪论 (1) 1.1课题目的和意义 (1) 1.2红外线简介 (1) 1.3红外遥控系统简介 (1) 2 课题方案和设计思路 (2) 2.1总体方案 (2) 2.2红外发射器设计 (3) 2.2.1红外发射器原理 (3) 2.2.2红外编码 (3) 2.3红外接收端设计 (4) 3硬件结构设计与介绍 (5) 3.1AT89C51系列单片机功能特点 (5) 3.1.1主要特性 (5) 3.1.2管脚说明 (5) 3.1.3基本电路 (7) 3.2红外发射电路 (8) 3.3红外接收电路设计 (9) 3.3.1红外接收模块 (9) 3.3.2数码管 (9) 3.3.3彩灯系统 (10) 3.3.4蜂鸣器系统 (11) 3.3.5红外接收端电路图 (12) 4 软件设计 (12) 4.1定时/计数器功能简介 (12) 4.2遥控码的发射 (13) 4.3红外接收 (14) 5.课程设计总结和心得 (15) 参考文献 (16) 附录 (17) 附录1P ROTEUS仿真图 (17) 附录2发射程序 (17) 附录3接收程序 (20)

基于单片机的红外解码.温度及液晶显示

中国矿业大学徐海学院 技能考核培训 姓名:顾嘉诚学号: 22110818 专业:信息11-2班 题目:基于单片机的红外解码.温度及液晶显示专题:红外解码 指导教师:宥鹏老师翟晓东老师 设计地点:电工电子实验室 时间: 2014 年 4 月

通信系统综合设计训练任务书 学生姓名顾嘉诚专业年级信息11-2班学号22110818 设计日期:2014年4 月5日至2014 年4 月10 日 同组成员:姜怀修,刘剑桥,顾嘉诚,彭传锁,何子豪,王业飞 设计题目: 基于单片机的红外无线控制 设计专题题目: 红外解码 设计主要内容和要求: 1.主要内容: 2. 单片机内部结构 红外遥控解码 C语言程序设 Ds18b20的使用 Lcd1602的使用 2. 功能扩展要求 环境温度液晶显示 指导教师签字:

目录 正文 (5) 1.概述 (5) 1.1功能描述 (5) 1.2单片机资源 (5) 2.1管脚图 (5) 3.1. 使用资源 (5) 2.原理篇 (6) 2.1红外发送及接收 (6) 2.1.1红外接收概述 (6) 2.1.2硬件及原理图 (7) 2.1.3红外中断接收部分程序 (8) 2.2温度原理 (9) 2.2.1 DS18B20 的主要特性 (9) 2.2.2原理图与硬件 (10) 2.2.3 DS18B20时序和程序 (10) 2.3 QC1602A (12) 2.3.1 1602外部结构及管脚说明 (12) 2.3.2 写命令/数据时序与部分程序 (13) 3.效果图 (15) 4.软件篇 (15) 4.1程序框图 (15) 4.1.1 Main函数 (15) 4.1.2 中断 (16) 4.1.3 60ms定时中断 (16) 4.2 完整程序 (16) 4.2.1 Project.c文件 (16) 4.2.2 onewire.c 文件 (23) 5.参考文献 (26)

基于51单片机的红外遥控器设计

天津职业大学 二○一五~二○一六学年第1学期 电子信息工程学院 通信系统综合实训报告书 课程名称:通信系统综合实训 班级:通信技术(5)班 学号:1304045640 1304045641 1304045646姓名:韩美红季圆圆陈真真指导教师:崔雁松 2015年11月17日

一、任务要求 利用C51单片机设计开发一套红外线收发、显示系统。 具体要求: ●编写相关程序(汇编、C语言均可); ●用Proteus绘制电路图并仿真实现基本功能; ●制作出实物 二、需求分析(系统的应用场景、环境条件、参数等) 现在各种红外线技术已经源源不断进入我们的生活中,在很多场合发挥着作用。 机场、宾馆、商场等的自动门,会在人进出时自动地开启和关闭。原来,在自动门的一侧有一个红外线光源,发射的红外线照射到另一侧的光电管上,红外线是人体察觉不到的。当人走到大门口,身体挡住红外线,电管接收不到红外线了。根据设计好的指令,触发相应开关,就把门打开了。等人进去后,光电管又可以接到红外线,恢复原来的线路,门又会自动关闭。因此这种光电管被称为“电眼”,在许多自动控制设备中大显身手。 在家庭中,许多电子设备如彩色电视、空调、冰箱和音响等,都使用了各种“红外线遥控器”。利用它我们可以非常方便的转换电视频道或设定空调的温度档次。 三、概要设计(系统结构框图/系统工作说明流程图) 红外线收发、显示系统硬件由以下几部分组成:红外遥控器,51单片机最小系统,接收放大器一体集成红外接收头,LED灯显示电路。 红外线接收是把遥控器发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。这些工作通常由一体化的接收头来完成,输出TTL兼容电平。最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 红外遥控系统电路框图

红外线遥控系统原理及软件解码实例

红外线遥控系统原理及软件解码实例 简介:红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功 关键字:红外 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1、红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 、遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125 ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25 ms的组合表示二进制的“1”,其波形如图2所示。 图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。U PD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108 ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。 图4 遥控连发信号波形 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8 位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。 图5 引导码图6连发码 3 、遥控信号接收 接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 接收器对外只有3个引脚:Out、GND、Vcc与单片机接口非常方便,如图7所示。

单片机红外电视遥控器C51程序代码单片机程序

单片机红外电视遥控器C51程序代码单片机程序 //************************************************************** //名称:单片机红外电视遥控器C51程序代码() /*-------------------------------------------------------------- 描述: 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行 脉冲幅度调制而产生的.当发射器按键按下后,即有遥控码发出,所按的键 不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。上述“0”和“1”组成的32位二进制码经38kHz 的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。 一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位 为8位的操作码和8位的操作反码,用于核对数据是否接收准确。 根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms的结果码。接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。 所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低 电平处发送38kHz红外信号,高电平处则不发送红外信号。 ----------------------------------------------------------------*/ //编辑: //日期: //**************************************************************** #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include //包括一个51标准内核的头文件 static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag; //红外发送标志 char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); //************************************************************** void main(void) {

红外解码程序详解

//此程序为网上下载后修改,要弄懂的话,可以去看看HT6221的时序图。当然也欢迎在这里留言。 ///C51的红外解码程序,可以根据需要自己修改: //11.0592Mhz #include //根据自己的接线来改 sbit IRIN = P3^2; //红外接收器数据线 sbit led = P3^7; //指示灯 //////////////////////////////////////////// //定义数组IRCOM,分别装解码后得到的数据 //IRCOM[0] 低8位地址码 //IRCOM[1] 高8位地址码 //IRCOM[2] 8位数据码 //IRCOM[3] 8位数据码的反码 ///////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int uchar IRCOM[4]=0; bit flag=0; /********************/ void delay014ms(unsigned char x); //x*0.14MS void IR_init(void); void delay014ms(unsigned char x) //x*0.14MS STC10F04延时约0.15MS { unsigned char i; while(x--) { for (i = 0; i<125; i++) //13 {;} } } /////////////// //初始化 //////////// void IR_init(void) { EA=1; EX0=1; //允许总中断中断,使能 INT0 外部中断 IT0=1; //触发方式为脉冲负边沿触发 IRIN=1; //I/O口初始化

c51、c52单片机红外线遥控接收解码c程序(可直接使用)

/ 亲,此程序以经过测试,可直接使用!!!/ #include #define uchar unsigned char #define uint unsigned int void 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;

最简单详细的红外解码程序

#include //包含头文件名 sbit IRIN=P3^2; //定义红外接收头的外部接口,即外部中断0 sbit BEEP=P1^5; //定义蜂鸣器接口,我的在P1^5 unsigned char IRCOM[7]; //定义数组,用来存储红外接收到的数据 void delay(unsigned char x) { //延时子程序unsigned char i; //延时约x*0.14ms while(x--) //不同遥控器应设置不同的参数

{for(i=0;i<13;i++){}} //参数的选择咱们先不管,先看这个 } void beep() { unsigned char i; //蜂鸣器发声子程序 for(i=0;i<100;i++) { delay(4); //这个得看你的蜂鸣器内部是否有振荡源 BEEP=~BEEP; } //如果没有振荡源就应该输入脉冲信号 BEEP=1; }

void IR_IN() interrupt 0 using 0 //外部中断0程序 { unsigned char j,k,n=0; //先定义变量,记住n=0 EX0=0; //禁止中断,以免再次进入中断 delay(15); //延时0.14ms*15=2.1ms if(IRIN==1) //如果在这期间有高电平说明 { //信号不是来自遥控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循环,等待9ms前导低电平信号的结束for(j=0;j<4;j++) //一共有4组数据

红外线遥控器解码程序

资料整理自互联网,版权归原作者! 欢迎访问 https://www.360docs.net/doc/668530972.html, 新势力单片机,嵌入式
专业技术论坛:https://www.360docs.net/doc/668530972.html,
红外线遥控器解码程序
Wang1jin 收藏. 交流论坛: https://www.360docs.net/doc/668530972.html,/ 推荐网站: https://www.360docs.net/doc/668530972.html, 个人博客: https://www.360docs.net/doc/668530972.html,
红外线遥控是目前使用最广泛的一种通信和遥控手段.由于红外线遥控装置具有体积小,功耗低,功能强,成本低等特点,因 而,继彩电,录像机之后,在录音机,音响设备,空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控.工业设备中, 在高压,辐射,有毒气体,粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰.
1 红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图 1 所示.发射部分 包括键盘矩阵,编码调制,LED 红外发送器;接收部分包括光,电转换放大器,解调,解码电路.
2 遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明, 现以日本 NEC 的 uPD6121G 组成发射电路为例说明编码原理.当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码 也不同.这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为 0.565ms,间隔 0.56ms,周期为 1.125ms 的组合表示二进制的"0";以脉宽为 0.565ms, 间隔 1.685ms,周期为 2.25ms 的组合表示二进制的"1",其波形如图 2 所示.
个人博客:https://www.360docs.net/doc/668530972.html,
电子综合站点:https://www.360docs.net/doc/668530972.html,

单片机如何通过捕获来实现对红外遥控器解码

单片机如何通过捕获来实现对红外遥控器解码 一、内容提要 上讲介绍并应用了单片机动态扫描驱动数码管,并给出了实例。这一讲将重点介绍单片机如何通过捕获来实现对红外遥控器解码。通过该讲,读者可以掌握红外遥控器的编码原理以及如何通过单片机对遥控器进行解码。 二、原理简介 随着家用电器、视听产品的普及,红外线遥控器已被广泛使用在各种类型的家电产品上(如遥控开关、智能开关等)。其具有体积小、抗干扰能力强、功耗低、功能强、成本低等特点,在工业设备中也得到广泛应用。 一般而言,一个通用的红外遥控系统由发射和接收两大部分组成,如图1 所示: 图1 红外遥控系统框图 其中发射部分主要包括键盘矩阵、编码调制、红外发射管;接收部分包括光、电信号的转换以及放大、解调、解码电路。举例来说,通常我们家电遥控器信号的发射,就是将相应按键所对应的控制指令和系统码(由0 和1 组成的序列),调制在32~56kHz 范围内的载波上,然后经放大、驱动红外发射管将信号发射出去。此外,现在流行的控制方法是应用编/ 解码专用集成电路芯片来实现(如下文提到的SAA3010 红外编码芯片和HS0038 红外接收头)。 不同公司的遥控芯片,采用的遥控码格式也不一样。在此介绍目前广泛使用较普遍的两种,一种是NEC Protocol 的PWM(脉冲宽度调制)标准,一种是Philips RC-5 Protocol 的PPM(脉冲位置调制)标准。 NEC 标准:遥控载波的频率为38kHz(占空比为1:3);当某个按键按下时,系统首先发射一个完整的全码,然后经延时再发射一系列简码,直到按键松开即停止发射。简码重复为延时108ms,即两个引导脉冲上升沿之间的间隔都是108ms。一个完整的全码如图2所示。

51单片机红外解码程序

51单片机红外解码程序 1、红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。 发射部分包括键盘矩阵、编码调制、LED红外发送器; 接收部分包括光、电转换放大器、解调、解码电路。 下面,我们将使用下面两种设备: 另外,使用51单片机进行解码。 2、原理图

从原理图看出,IR的data脚与51的PD2(P3.2)相连。 2、红外发射原理 要对红外遥控器所发的信号进行解码,必须先理解这些信号。 a) 波形 首先来看看,当我们按下遥控器时,红外发射器是发送了一个什么样的信号波形,如下图: 由上图所示,当一个键按下超过22ms,振荡器使芯片激活,将发射一组108ms 的编码脉冲(由位置1所示)。如果键按下超过108ms仍未松开,接下来发射的 代码(连发代码由位置3所示)将仅由起始码(9ms)和结束码(2.5ms)组成。 下面把位置1的波形放大:

由位置1的波形得知,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(用户编码)(9ms~18ms),高8位地址码(用户编码)(9ms~18ms),8位数据码(键值数据码)(9ms~18ms)和这8位数据的反码(键值数据码反码)(9ms~18ms)组成。 b) 编码格式 遥控器发射的信号由一串0和1的二进制代码组成.不同的芯片对0和1的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。XS-091遥控板的0和1采用PWM方法编码,即脉冲宽度调制。下图为一个发射波形对应的编码方法: 放大0和1的波形如下图: 这种编码具有以下特征:以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。 3、红外接收原理 a) 波形 红外接收头将38K载波信号过虑,接收到的波形刚好与发射波形相反:

基于单片机的红外遥控系统设计

单片机红外遥控系统设计 随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。传统的遥控器采用专用的遥控编码及解码集成电路,这种方法虽然制作简单、容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用,应用范围受到限制。而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。 本设计主要应用了AT89C51单片机作为核心,综合应用了单片机中断系统、定时器、计数器等知识,应用红外光的优点,设计了一个红外线遥控系统。本系统包含发射和接收两大部分,利用编码/解码芯片来进行控制操作。发射部分包括键盘矩阵、编码调制、LED 红外线发射器;接收部分包括红外线接收芯片、光电转换器、调解电路。其优点硬件电路 简单,软件功能完善,性价比较高等特点,具有一定的使用和参考价值。 关键词:单片机AT89C51;LED红外线发射器

目录 目录 (2) 1 绪论 (2) 1.1研究背景 (2) 1.2国内外研究现状 (3) 1.3研究目的与意义 (3) 2系统方案设计论证 (5) 2.1单片机红外遥控发射器设计原理 (5) 2.2单片机红外遥控接收器设计原理 (5) 2.3方案选择和论证 (6) 3红外解码硬件电路设计 (8) 3.1红外解码系统设计 (8) 3.2单片机及其硬件电路设计 (8) 3.3红外发射电路设计 (10) 3.4红外接收电路设计 (11) 3.5本章小结 (13) 4红外解码程序设计 (14) 4.1红外接收电路主程序流程图 (14) 4.2红外接收电路子程序流程图 (14) 4.3本章小结 (15) 5 联机与调试 (16) 结论和展望 (23) 附录A:系统原理图 (24) 附录B:系统PCB图 (25) 附录C:系统仿真图 (26) 附录D:系统源程序 (27) 1 绪论 1.1研究背景 目前市场上采用的一般是遥控编码及解码集成的电路。此方案的特点是制作简单、容

基于单片机的红外解码的设计

基于单片机的红外遥控器解码器的设计 时间:2011-05-17 22:25:18来源:电子元器件应用作者:李泽光TC9012F是一种通用型红外遥控信号发送用CMOS大规模集成电路,适用于电视(TV),磁带录像机(VTR),激光唱机等设备的遥控操作。市场上,以TC9012F为核心的9012型红外遥控器被广泛使用且价格便宜。将设计的基于单片机AT89C51的9012型红外遥控解码器应用于生产即时显示系统中,作为参数设置和系统控制用红外遥控器,在实际应用中收到了良好效果。 1 红外线遥控信号发送器电路 TC9012F的遥控信号 TC9012F为4位专用微控制器,其内部振荡电路的振荡频率fosc典型值为455 kHz。当不按下操作键时,其内部455 kHz的时钟振荡器停止工作,以减少电池消耗。内部分频电路将振荡频率,fosc进行12分频后,变成频率fc=37.9 kHz,占空比为1/3的脉冲载波信号。红外遥控信号发送器电路由集成电路TC9012F、键盘矩阵电路、驱动器和红外发光二极管组成,遥控信号为37.9 kHz的脉冲载波被遥控编码脉冲调制的已调波,如图1所示。 遥控编码脉冲由引导码、用户码、功能码和功能码的相反码组成,用户码是同一组码发送两次,如图2所示。用户码为8位,所以整个脉冲码为32位。引导码作为接收数据的准备脉冲,他由8TCP(4.5 ms)的高电平和8TCP(4.5 ms)的低电平组成。用户码和功能码采用脉冲位置调制(PPM)方式编码,根据脉冲之间的时间间隔来区分码值的"0"或"1"。对应于二进制数字信号的"0"或"1",脉冲时间间隔分别为2TCP(1.125 ms)和4TCP(2.25 ms),而每一脉冲的宽度仍不变,均为TCP(0.562 6 ms)。由于用户码发送两次,功能码与其相反码一起发送,因此系统的误动作很少。 本遥控器采用第一次发送的遥控信号的编码脉冲(图3所示)和第二、第三次连续发送的遥控信号的编码脉冲(图4所示)不同的工作方式。这样,当按键一直按着的时候,从第二次连续发送开始,只发送引导码和用户码第一位SO的相反码SO,因此可减少接收处理时间和红外发光二极管功耗,遥控编码脉冲经脉冲载波调制后由TC9021F的第脚输出,再经激励器驱动红外发光二极管,发送出波长为940nm的脉冲红外光。假设用户码为十六进制的76H 则第一次发送的遥控信号的编码脉冲如图3所示。

红外遥控原理及解码程序

红外遥控系统原理及单片机 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC 的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周

期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。 图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。

单片机实现红外接收解码

单片机实现红外接收解码 摘要:接收到红外遥控器的脉冲波形,并通过解析其波形得到红外遥控器的相应解码,实习对相应设备的控制。本文详细接受红外遥控技术原理并如何通过C51单片机实现红外遥控。关键字:单片机,红外遥控,解码 1.引言 遥控器相信大家不会陌生,日常生活中会使用到各种各样的遥控器,比如电视机、DVD 机、空调、机顶盒甚至音响、热水器等都用到遥控器,其实红外技术已经走进与人们的生活并且与人们的生活息息相关了。 红外遥控器作为设备的输入控制具有操作简便、价格便宜等诸多好处。您可以根据您公司产品需要和遥控器提供商协商定制遥控器,包括遥控器键盘布局、每个按键的键码等。 遥控器键盘上每个按键的键码是一个小于256的一个数值,按键后通过遥控器红外管产生脉冲发送出去,红外接收器接收到脉冲后,对脉冲流进行分析,提取键码值,并按照键码值实现其遥控目的。 2.红外接收原理 红外遥控信号接收: 红外接收电路可以使用集成接收器,接收器包括红外接收管及信号处理IC,接收器对外只有三个引脚,一个接电源的Vcc脚、一个接地的GND脚、一个脉冲信号输出脚,当然脉冲信号输出脚直接接单片机的某个可以使用的IO脚就可以了。

3.脉冲波形分析: 每次按键,红外接收器这边会收到一串脉冲宽度不等的脉冲波形流,其脉冲流由35个脉冲波形构成: 前导码:第1个脉冲波形 用户码1:第2到第9个脉冲波形 用户码2:第10到第17个脉冲波形 键码:第18到第25个脉冲波形 键码反码:第26到第33个脉冲波形 连续按键脉冲:第34和第35个脉冲为结束脉冲(也即连续按键脉冲),在每次按键结束后会有两个结束脉冲,如果一直按键不放的话,会一直发送连续按键脉冲,并可以认为在收到10个连续按键脉冲后是下一个按键。 注意:不同的遥控器产生的用户码值可能不一样,笔者碰到两种不同的用户码:0x00,0xFF及0x04,0x7F。 脉冲流中有四种不同的脉冲波形宽度: 其中前导码脉宽为:40(4ms) < 脉冲宽度< 50(5ms) 连续按键脉宽为:21(2.1ms) < 脉冲宽度< 25(2.5ms) bit "0" 脉宽为:3(0.3ms) < 脉冲宽度< 7(0.7ms) bit "1" 脉宽为:14(1.4ms) < 脉冲宽度< 19(1.9ms) 在收到一串脉冲流后,就要对其进行分析,先要检测第一个脉冲波形是不是前导码,如果不是,则继续检测前导码,如果是则检测如下32个脉冲波形: 用户码1为1字节,由8个脉冲波形组成(其中一个脉冲波形表示字节中1 bit); 用户码2为1字节; 键值为1字节; 键值反码为1字节,键值反码为键值取反值。 先判断所收到用户码是否正确,如果不正确则丢弃此次所收键码,如果正确则利用键值反码取反与键值比较,判断收码是否正确,如果不正确则丢弃所收键码。 如下图所示:

51单片机实现红外线编码检测

51单片机实现红外编码检测 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,设备显示。 红外传感基础知识: ?红外发光管:红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。 产生的光波波长为940nm左右,为红外光 ?红外接收头:左图为一常用的红外接收模块。其内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KH),并送出接收到的信号。当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器 发出的数字编码,只要经过单片机解码程序进行解码,便可以 得知按下了哪一个按键,而做出相应的控制处理,完成红外遥 控的动作。 ?红外发送协议:引导码+客户码1+客户码2+操作码 +操作反码 ***用户真正须要的只有操作码***

?调制:“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率(因红外接收头能接收的红外线为38KHz 左右),还可达到降低电源功耗的 目的。 主要内容: 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,用设备显示,(lcd或数码管);这里管脚的对应P3.2接受红外对管信息,lcd接线:

主程序: #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include sbit IR=P3^2; //红外接口标志 /*------------------------------------------------ 全局变量声明 ------------------------------------------------*/ unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33]; /*------------------------------------------------ 函数声明 ------------------------------------------------*/ void Ircordpro(void); /*------------------------------------------------ 定时器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; //是否开始处理标志位 if(startflag) {

单片机红外发射(原理与设计程序)

用AT89S51单片机制作红外电视遥控器 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。 当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。 根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms的结果码。 遥控串行数据编码波形如下图所示: 接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38kHz红外信号,高电平处则不发送红外信号。 单片机红外电视遥控器电路图如下:

C51程序代码: #include static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器static unsigned int endcount; //终止延时计数static unsigned char flag; //红外发送标志char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); void main(void) { count = 0;

红外解码数码管显示

基于STC89C54单片机设计的红外解码数码管显示 1.红外解码原理 红外遥控器发送数据时,是将二进制数据调制成一系列的脉冲信号红外发射管发射出去,红外载波为频率38KHz的方波,红外接收端在收到38KHz的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号,再经过1838一体化红外接收头解调便可以恢复出原数据信号。如图所示, 我们可以通过单片机的定时器给红外接收管接收的每个点电平计时,并把每个点电平的时间存起来。根据时间的不同来分辨是引导码、“0”还是“1”。下面是我做的实验原理图 上图式数码管显示原理图,下面是红外接收管与单片机的连接原理图。

注:上图的J27是和单片机的P3^2相连的。 程序中用到的定时器1、定时器0和外部中断0. 下面是实验的C语言程序: /*----------------------------------------------- 名称:遥控器红外解码数码管晶显示 论坛:无 编写:yang-baoan 日期:2011.10 修改:无 内容:按配套遥控器按键,液晶显示4组码值,分别是用户码用户码数据码数据反码 显示如下:

1E1E00FF ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char Tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char TempWei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*------------------------------------------------

相关文档
最新文档