菜鸟学习51单片机之红外解码.pdf
文本预览下载声明
菜鸟学习51单片机 while(1)世界
菜鸟学习51单片机
菜鸟学习51单片机
菜菜鸟鸟学学习习5511单单片片机机
红外解码
《菜鸟学习51单片机》由while(1)世界推出的非常简单的51
单片机教程。帮助刚接触单片机的童鞋快速入门。
这一讲是由Admin编写!读者有什么问题的可以在while(1)
世界的51版块发帖提问!红外遥控在生活中用的很多,那么有没有
想过运用红外遥控来做些小玩意呢!
红外遥控怎么解码呢?先来了解红外遥控发射出来的是什么
吧!遥控编码脉冲由前导码、8位用户码、8位用户码的反码、
8位操作码以及8位操作码的反码组成。这5个就是重点的啦!
前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)
和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。
(在做解码是,这个部分可以滤掉不用管)。
以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;
菜鸟学习51单片机 while(1)世界
以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。
这里我们做的是解码,所以我们看下面的两个图,就是一体化接收头
输出的码。‘1’和‘0’时的低电平时间相同,所以这里我们主要还
是判断高电平来解析现在到底是1还是0。如果高电平时间是1.685ms
则是‘1’如果高电平时间为0.56ms则是‘0’.
上面提到过,前导码可以滤掉不用管,那么我们解码就可以得到
后面的:8位的用户码,8位的用户码反码,8位操作码,8位的操作
码反码。
菜鸟学习51单片机 while(1)世界
上图就是我们用来接收红外遥控的万能接收头。将OUT脚接在外部
中断0的引脚上,也就是P3.2脚上就可以了。下面我们根据程序来
分析和学习。
采用外部中断管脚和红外接收头的信号线相连,中断方式为边
沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二
进制的“1”、“0”码。
#includereg52.h
#defineucharunsignedchar
#defineuintunsignedint
sbitHW=P3^2; //红外解码引脚
sbitled= P1^1; //来操作的灯
uint HW_TIME_H=0,HW_TIME_L=0; //之后计算时间用的
uchar HW_OK=0,HW_DAT[4]; //分别是解码成功的标志位和一个数组用来存解码
//得到的4个8位的数据
上面是最基本的一些定义了。我们只定义了两个脚,一个是用来红外
解码的,一个是LED灯的控制引脚。我们这个实验就做,用要控的一
个按键来控制灯。
这里使用的是外部中断0,下降沿触发中断。并且需要定时器0
来计算时间。所以,对中断和定时器配置如下:
EA=1; //总中断开
IT0=1; //边沿触发方式
EX0=1; //外部中断使能
TMOD=0x01; // 定时器0工作方式1
TH0=0x00; //定时器初始值为0
TL0=0x00; //定时器初始值为0
菜鸟学习51单片机 while(1)世界
当万能接收头接收到红外遥控发来的数据后就会产生下降沿来
触发外部中断,那么就在中断里进行解码,下面就是中断里的解码
/*******************************************************************
11.0592Mhz晶振
9.5MS = 8755,,,,8.5MS = 7833
5MS = 460
显示全部