什么是红外线?人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;比红光波长还长的光叫红外线。红外遥控在生产和生活中应用越来越广泛,不同的红外遥控芯片有不同的发码协议,但一般都是由引导码,系统码,键码三部分组成. 红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。红外发光二极管一般有黑色、深蓝、透明三种颜色。

红外遥控系统一般分发射和接收两个部分。

发射部分的主要元件为红外发光二极管。目前大量使用的红外发光二极管发出的红外线波长为940mm左右,外形与普通φ5发光二极管相同。

接收部分的红外接收管是一种光敏二极管。红外发光二极管一般有圆形和方形两种。由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。最近几年大多都采用成品红外接收头。

成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。但在使用时注意成品红外接收头的载波频率。红外遥控常用的载波频率为38kHz,这是由发射端所使用455kHz晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36 kHz、40 kHz、56 kHz等,由发射端晶振的振荡频率来决定。

红外遥控的特点是不影响周边环境的、不干扰其他电器设备。室内近距离(小于10米)遥控中得到了广泛的应用。红外遥控在生产和生活中应用越来越广泛,不同的红外遥控芯片有不同的发码协议,但一般都是由引导码,系统码,键码三部分组成. 引导码是告诉接收机准备接收红外遥控码.系统码是识别码,不同的遥控芯片有不同的误别码,以免搞错.

遥控器上不同的按键有不同的键码,系统码和键码都是16位码,8位正码,8位反码.如SC6122的系统码是FF00,FF和00互为反码,键码1为EF10也是互为反码.

SC6122的引导码为低电平为9000微秒,高电平为4500微秒.当然高电平不可能精确为9000微秒,在8000微秒到10000微秒都看作是正常范围,低电平在4000-5000之间都看作是正常范围.引导码后的32位编码(16位系统码和16位键码)不管高低电平,载波时间都是560微秒,但低电平持续时间是1125微秒,高电平持续时间是2250微秒,所以低电平除去载波时间大约是560微秒,高电平除去载波时间大约是1680微秒.低电平也有一个波动范围,在400-700之间都看作是正常的,具体多少可以通过示波器测量出来.高电平也有一个波动范围,在400-2000之间都看作是正常的,具体多少也是根据经验.当然范围越宽,捕捉红外线的范围也越宽,越精确.在捕捉到有高低电平之间,在560-1680之间取一个中间值1120微秒,认为小于1120微秒是低电平,大于1120微秒是高电平.

//

//

红外接收后的数据通过UART发出

//

晶振:12M

//

author:cole

//

date:09.6.6

//

#include

void

uart_init(void);

#define c(x)

(x)

sbit Ir_Pin

= P3^2;

unsigned

char Ir_Buf[4]; //用于保存解码结果

unsigned int

Ir_Get_Low()

{

TL0=0;

TH0=0;

TR0=1;

while(!Ir_Pin

&& (TH0&0x80)==0);

TR0=0;

return

TH0*256+TL0;

}

//=============================================================

unsigned int

Ir_Get_High()

{

TL0=0;

TH0=0;

TR0=1;

while(Ir_Pin

&&

(TH0&0x80)==0);

TR0=0;

return

TH0*256+TL0;

}

//==============================================================

main()

{

unsigned

int temp;

char

i,j;

P3

= 0xff;

uart_init();

do{

restart:

while(Ir_Pin);

temp=Ir_Get_Low();

if(temp

temp>c(9500)) continue;//引导脉冲低电平9000

temp=Ir_Get_High();

if(temp

temp>c(5000)) continue;//引导脉冲高电平4500

for(i=0;i<4;i++)

//4个字节

{

for(j=0;j<8;j++)

//每个字节8位

{

temp=Ir_Get_Low();

if(temp

temp>c(800)) goto restart;

temp=Ir_Get_High();

if(temp

temp>c(2000)) goto restart;

Ir_Buf[i]>>=1;

if(temp>c(1120))

Ir_Buf[i]|=0x80;

}

}

for (i=2; i<4;

i++)

{

SBUF =

Ir_Buf[i];

while (TI ==

0);

TI =

0;

}

}while(1);

}

/

//

UART初始化

//

波特率:9600

/

void

uart_init(void)

{

unsigned char u;

ET1=0;

TMOD = 0x21;  // 定时器1工作在方式2(自动重装)

SCON = 0x50;  // 10位uart,容许串行接受

TH1 = 0xFD;

TL1 = 0xFD;

u = SBUF;

TR1 = 1;

}

c语言红外解码程序,[转载]红外遥控和C语言51红外遥控解码程序设计实例相关推荐

  1. 学了java有必要学c语言吗_程序员有必要学习C语言吗?这几点原因很现实

    原标题:程序员有必要学习C语言吗?这几点原因很现实 C语言是编程语言中的一种,有不少程序员会有这样的疑问?难道做程序员就必须要学习C语言吗?甚至有人觉得,我平时的工作中也用不到C语言我为什么要学习呢? ...

  2. c语言枪图形,6个变态的C语言Hello World程序[转载]

    下面的六个程序片段主要完成这些事情:输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过. hello1.c查 ...

  3. 用c语言设计红绿灯程序,[转载]51单片机用C语言实现交通灯(红绿灯)源程

    51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: #include bit red,green,yellow ...

  4. c语言中规定,程序中各函数之间,C语言题库-函数_(参考).doc

    C语言函数练习题 选择题 1.在函数的说明和定义时若没有指出函数的类型,则( A ) A: 系统自动地认为函数的类型为整型. B: 系统自动地认为函数的类型为字符型. C: 系统自动地认为函数的类型为 ...

  5. c语言标准化考试程序报告,在线考试系统-c语言报告.doc

    在线考试系统-c语言报告 课 程 报 告 课 程 名 称: 程序设计实践 课程报告任务书 题 目标准化考试系统主要 内容开发出一个标准化考试系统,所谓标准化考试系统即仅支持选择题型的考试系统,要求实现 ...

  6. c语言报数问题程序,转圈报数问题(C语言):有n个人围成一圈,顺序排号……...

    问题描述: 有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. 题目分析: 这道题目是我们在日常生活中也能经常见到的一种报数小游戏.首 ...

  7. 二级c语言编译完程序如何运行,计算机二级C语言辅导:C++环境下编译和运行c语言...

    一 单个文件运行 1 打开vc++出现如图 2 从file菜单中选择"new"→c++source file如图 3 单击"--"命令按扭,在choose di ...

  8. c语言单片机计时程序,C51单片机秒表计时(C语言)

    <C51单片机秒表计时(C语言)>由会员分享,可在线阅读,更多相关<C51单片机秒表计时(C语言)(4页珍藏版)>请在人人文库网上搜索. 1.南开大学滨海学院C51嵌入式软件设 ...

  9. c语言编译运行程序,用visual c++ 运行C语言程序的过程

    用visual c++ 运行C语言程序的过程 下面是用visual c++ 运行C语言程序的过程的详细步骤及操作教程,欢迎参考学习! 一:点击File-new(新建)出现如下对话框 在该对话框中选择第 ...

最新文章

  1. 从试用到使用:计算机视觉产业新一轮发展的起步年
  2. oracle 修改用户密码_干货!数据库安全之Oracle数据库安全加固
  3. linux中shell脚本启动报错
  4. 编译时MSIL注入--实践Mono Cecil(1)
  5. 织梦Cms怎么一直服务器维护中,织梦cms文档关键词维护中频率详解
  6. SAP Enterprise search test report ESH_TEST_SEARCH debug in Q2D
  7. 用GCD线程组与GCD信号量将异步线程转换为同步线程
  8. 在.NET中使用Speex -- 音频数据编解码
  9. 快速计算Distinct Count
  10. Go语言的变量、函数、Socks5代理服务器 1
  11. python前后台tcp/udp通讯示例
  12. java实现Beta函数
  13. 走进JavaScript
  14. python中pyserial模块使用方法
  15. OP-TEE内核学习笔记(一)(安全存储)—— 安全文件基础操作(创建、读、写)
  16. python训练模型一直循环怎么办_用pycharm编写程序进行模型训练时总是有memory error错误,如何解决?...
  17. 微信视频号怎么增加浏览量
  18. 读书笔记:《吴军阅读与写作讲义》
  19. 一文看懂中国清算体系
  20. excel导出java不完整_有关Java POI导出excel表格中,单元格合并之后显示不全的解决方法。...

热门文章

  1. [Visual Studio]Code Snippet
  2. turtlebot2利用turtlebot_exploration_3d进行自主建图
  3. 怎样学习英语——英语学习捷经
  4. 武汉大学转专业计算机,武汉大学的转专业须知
  5. 石河子大学计算机专业排名2019,2019石河子大学怎么样
  6. POJ1276 多重背包DP 生命不息优化不止
  7. 2018中国电子制造设备自动化市场研究
  8. vue移动端项目概述学习总结
  9. UE4(虚幻4)基础:创建玩家角色并获得控制权
  10. SQL Server系统数据库介绍