3. 根据下表提供的信息,请将电子电表偷电遥控器器发送的一个数据包解码:

红外线遥控器解码原理
红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
1&红外遥控系统通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
2&遥控发射器及其编码&&&
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。
UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。
遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。
当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
代码格式(以接收代码为准,接收代码与发射代码反向)
①位定义&
②单发代码格式&
③连发代码格式&
注:代码宽度算法:
16位地址码的最短宽度:1.12&16=18ms&16位地址码的最长宽度:2.24ms&16=36ms&
易知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms)&8=27ms
所以32位代码的宽度为(18ms+27ms)~(36ms+27ms)
1.&解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
2.&根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。
接收器及解码&&&
一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把上图32键的红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。
红外遥控器软件解码原理及程序&
红外一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序经过试用,能解大部分遥控器的编码!
#include&&&
"at89x52.h"
#define&&&&
NULL&&&&&&
0x00//数据无效
#define&&&&
RESET&&&&&
0X01//程序复位
#define&&&&
REQUEST&&&
0X02//请求信号
#define&&&&
ACK&&&&&&&
0x03//应答信号,在接收数据后发送ACK信号表示数据接收正确,
也位请求信号的应答信号
#define&&&&
NACK&&&&&&
0x04//应答信号,表示接收数据错误
#define&&&&
BUSY&&&&&&
0x05//忙信号,表示正在忙
#define&&&&
FREE&&&&&&
0x06//空闲信号,表示处于空闲状态
#define&&&&
READ_IR&&&
0x0b//读取红外
#define&&&&
STORE_IR&& 0x0c//保存数据
#define&&&&
READ_KEY&& 0x0d//读取键值
#define&&&&
RECEIVE&&&
0Xf400//接收缓冲开始地址
#define&&&&
SEND&&&&&&
0xfa00//发送缓冲开始地址
#define&&&&
IR&&&&&&&&
0x50//红外接收缓冲开始地址
#define&&&&
HEAD&&&&&&
0xaa//数据帧头
#define&&&&
TAIL&&&&&&
0x55//数据帧尾
#define&&&&
SDA&&&&&&&
#define&&&&
SCL&&&&&&&
unsigned char xdata *buf1; //接受数据缓冲
unsigned int buf1_ //接收到的数据实际长度
unsigned char xdata *buf2; //发送数据缓冲
unsigned int buf2_ //要发送的数据实际长度
//接收标志,1表示接受到一个数据帧,0表示没有接受到数据帧或数据帧为空
//发送标志,1表示需要发送或没发送完毕,0表示没有要发送的数据或发送完毕
unsigned char
state1,state2;&&&&&&&&
//用来标志接收字符的状态,state1用来表示接收状态,state2用来表示发送状态
unsigned char data *
&&& unsigned
char a[2];
&&& unsigned int
&&& unsigned
char data *p1[2];
&&& unsigned int
data *p2[2];
&&& unsigned
char xdata
//红外缓冲的指针
&&& unsigned int
xdata *p4;
//union{&&&&&&&&&&&&&&&&&&&&&&
// unsigned char
a[2];&&&&&&&&&&
// unsigned char data *p1[2];
// unsigned int data *p2[2];
// unsigned char xdata *p3;
// unsigned int xdata
*p4;&&&&&&
//地址指针
//}q;&&&&&&&&&&&&&&&&&&&&&&&
&& unsigned char a[2];
&& unsigned char a[2];
&& unsigned char a[4];
&& unsigned int b[2];
&& unsigned char a[4];
&& unsigned int b[2];
&& unsigned char data
&& unsigned int data
&& unsigned char xdata
&& unsigned int xdata
unsigned char ir_
ir_&&&&&&&
//红外接收标志,0为缓冲区空,1为接收成功,2为缓冲溢出
void sub(void);
void delay(void);
void ie_0(void);
void tf_0(void);
void ie_1(void);
void tf_1(void);
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_iic(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;&&&&&&&&&&&&&&&&&&&&&&&&&&
//如果是溢出产生的中断则清除溢出位,重
新开放中断退出
EXF2=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除电平变化产生的中断位
*ir=RCAP2H;&&&&&&&&&&&&&&&&&&&&&&&&&&&
//把捕捉的数保存起来
&& *ir=RCAP2L;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//开启计数器0
&& TL0=0; //将计数器0重新置为零
while(!EXF2){&&&&&&&&&&&&&&&&&&&&&&&&
//查询等待EXF2变为1
if(TF0)goto
&&&&&&&&&&&&&&&
//检查有没超时,如果超时则退出
EXF2=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//将EXF2清零
if(!TH0)&&&&&&&&&&&&&&&&&&&&&&&&&&&
//判断是否是长低电平脉冲过来了
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//不是长低电平脉冲而是短低电平
if(F0)count.b++;&&&&&&&&&&&&&&&&&&&&&
//短脉冲数加一
temp.a[0]=RCAP2H;&&&&&&&&&&&&&&&&&
//将捕捉数临时存放起来
temp.a[1]=RCAP2L;
&&&&&&&&&&&&&&&&&&&&&&&&
//返回继续查询
else{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//是低电平脉冲,则进行处理
*ir=temp.a[0];&&&&&&
//把连续的短脉冲总时间记录下来
*ir=temp.a[1];
*ir=RCAP2H;&&&&&&&&&
//把长电平脉冲时间记录下来
*ir=RCAP2L;
if(ir&=0xda) {
&&&&&&&&&&&&&&&&
//判断是否溢出缓冲,如果溢出则失败退出
//返回继续查询
ir_flag=1;&&&&&&
//置ir_flag为1表示接收成功
void rs232(void)&& interrupt
static unsigned char
sbuf1,sbuf2,rsbuf1,rsbuf2;&&&&&
//sbuf1,sbuf2用来接收发送临时用,rsbuf1,rsbuf2用来分别用来存放接收发送的半字节
EA=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//禁止中断
RI=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除接收中断标志位
sbuf1=SBUF;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//将接收缓冲的字符复制到sbuf1
if(sbuf1==HEAD){&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//判断是否帧开头
&&&&&&&&&&&&&&&&&&&&&&&&
state1=10;&&&&&&&&&&&&&&&&
//是则把state赋值为10
&&&&&&&&&&&&&&&&&&&&&&&&
buf1=RECEIVE;&&&&&&&&&&&&&
//初始化接收地
址&&&&&&&&&&&&&&&&&&&&&&&
switch(state1){
10:sbuf2=sbuf1&&4;&&&&&&&&&&&&&&&&&&
//把高半字节右移到的半字节
&&&&&&&&&&&&&&&&
sbuf2=~sbuf2;&&&&&&&&&&&&&&&&&&&&
//把低半字节取反
&&&&&&&&&&&&&&&&
if((sbuf2&0x0f)!=(sbuf1&0x0f))&&&
//判断接收是否正确
&&&&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&
//接收错误,有可能接收的是数据帧尾,也有可能是接收错误
&&&&&&&&&&&&&&&&&&&&&&
if(sbuf1==TAIL)&&&&&&&&&&&&
//判断是否接收到数据帧尾
&&&&&&&&&&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&
//是接收到数据帧尾
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
buf1=RECEIVE;&&&&&
//初始化接收的地址
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(*buf1==RESET)&&
//判断是否为复位命令
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
sbuf2=SP+1;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
for(p.p1[0]=SP-0x10;p.p1[0]&=sbuf2;p.p1
[0]++)*p.p1[0]=0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
state1=0;&&&&&&&&&
//将接收状态标志置为零,接收下一个数据帧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
buf1_flag=1;&&&&&&
//置接收标志为1,表示已经接收到一个数据帧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
REN=0;&&&&&&&&&&&&
//禁止接收
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&
//不是接受到数据帧尾,表明接收错误
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
state1=0;&&&&&&&&&&
// 将接收状态标志置为零,重新接收
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
buf1=RECEIVE;&&&&&&
//初始化发送的地址
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*buf1=NACK;&&&&&&&&
//把NACK信号存入接收缓冲里
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
buf1_flag=1;&&&&&&&
//置标志位为1,使主程序能对接收错误进行处理
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
REN=0;&&&&&&&&&&&&&
//禁止接收
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//接收正确
&&&&&&&&&&&&&&&&&&&&
rsbuf1=~sbuf1;&&&&&&&&&&&&&&&
//按位取反,使高半字节变原码
&&&&&&&&&&&&&&&&&&&&
rsbuf1&=0xf0;&&&&&&&&&&&&&&&&
//仅保留高半字节,低半字节去掉
&&&&&&&&&&&&&&&&&&&&
state1=20;&&&&&&&&&&&&&&&&&&&
//将状态标志置为20,准备接收低半字节
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
20:sbuf2=sbuf1&&4;&&&&&&&&&&&&&&&&&&
//把高半字节右移到的半字节
&&&&&&&&&&&&&&&&
sbuf2=~sbuf2;&&&&&&&&&&&&&&&&&&&&
//将低半字节取反
&&&&&&&&&&&&&&&&
if((sbuf2&0x0f)!=(sbuf1&0x0f))&&&
//判断接收是否正确
&&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//接受错误
&&&&&&&&&&&&&&&&&&&&&&&
state1=0;&&&&&&&&&&&&&&&&&
// 将接收状态标志置为零,重新接收
&&&&&&&&&&&&&&&&&&&&&&&
buf1=RECEIVE;&&&&&&&&&&&&&
//初始化接收的地址
&&&&&&&&&&&&&&&&&&&&&&&
*buf1=NACK;&&&&&&&&&&&&&&&
//把NACK信号存入发送缓冲里
&&&&&&&&&&&&&&&&&&&&&&&
buf1_flag=1;&&&&&&&&&&&&&&
//置标志位为1,使主程序能对接收错误进行处理
&&&&&&&&&&&&&&&&&&&&&&&
REN=0;&&&&&&&&&&&&&&&&&&&&
//禁止接收
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
sbuf1&=0x0f;&&&&&&&&&&&&&&&&&&
//仅保留低半字节,去掉高半字节
&&&&&&&&&&&&&&&&&&&
rsbuf1|=sbuf1;&&&&&&&&&&&&&&&&
//高低半字节合并
&&&&&&&&&&&&&&&&&&&
*buf1++=rsbuf1;&&&&&&&&&&&&&&&
//将接收的数据保存至接收缓冲里,并且数据指针加一
&&&&&&&&&&&&&&&&&&&
buf1_length++;&&&&&&&&&&&&&&&&
//接收数据长度加一
&&&&&&&&&&&&&&&&&&&
state1=10;&&&&&&&&&&&&&&&&&&&&
//将state1置为10,准备接收下个字节的高半字节
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
TI=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除发送中断标志
if(buf2_length)&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//判断发送长度是否为零
&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//发送长度不为零
&&&&&&&&&&&&&&
if(state2==0)&&&&&&&&&&&&&&&&&&&&&&
//判断是否发送高半字节
&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//发送高半字节
&&&&&&&&&&&&&&&&&&&&&&
sbuf2=*buf2;&&&&&&&&&&&&&&&
//将要发送的字节送到sbuf2
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2=~sbuf2;&&&&&&&&&&&&&
//取反,使高半字节变为反码
&&&&&&&&&&&&&&&&&&&&&&
sbuf2&&=4;&&&&&&&&&&&&&&&&&
//将高半字节右移到低半字节
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2&=0xf0;&&&&&&&&&&&&&&
//保留高半字节,去掉低半字节
&&&&&&&&&&&&&&&&&&&&&&
sbuf2&=0x0f;&&&&&&&&&&&&&&&
//保留低半字节,去掉高半字节
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2|=sbuf2;&&&&&&&&&&&&&
//合并高低半字节
&&&&&&&&&&&&&&&&&&&&&&
SBUF=rsbuf2;&&&&&&&&&&&&&&&
//发送出去
&&&&&&&&&&&&&&&&&&&&&&
state2=10;&&&&&&&&&&&&&&&&&
//将state2置为10准备发送下半字节
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//发送低半字节
&&&&&&&&&&&&&&&&&&&&&&
sbuf2=*buf2;&&&&&&&&&&&&&&&
//将要发送的字节送到sbuf2
&&&&&&&&&&&&&&&&&&&&&&
buf2++;&&&&&&&&&&&&&&&&&&&&
//指针加一
&&&&&&&&&&&&&&&&&&&&&&
buf2_length--;&&&&&&&&&&&&&
//发送数据长度减一
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2=~sbuf2;&&&&&&&&&&&&&
//取反,使低半字节变为反码
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2&&=4;&&&&&&&&&&&&&&&&
//将低半字节反码左移到高半字节
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2&=0xf0;&&&&&&&&&&&&&&
//保留高半字节,去掉低半字节
&&&&&&&&&&&&&&&&&&&&&&
sbuf2&=0x0f;&&&&&&&&&&&&&&&
//保留低半字节,去掉高半字节
&&&&&&&&&&&&&&&&&&&&&&
rsbuf2|=sbuf2;&&&&&&&&&&&&&
//合并高低半字节
&&&&&&&&&&&&&&&&&&&&&&
SBUF=rsbuf2;&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//如果发送数据长度为零则发送数据帧尾
&&&&&&&&&&&&&&&&&&&
if(buf2_flag){&&&&&&&&&&&&&&&&
//判断是否发过数据帧尾
&&&&&&&&&&&&&&&&&&&
SBUF=TAIL;&&&&&&&&&&&&&&&&&&&&
//将数据帧尾发送出去
&&&&&&&&&&&&&&&&&&&
while(TI==0);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
buf2_flag=0;&&&&&&&&&&&&&&&&&&
//置发送标志为零,表示发送完毕
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
EA=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//开放中断
机器人基地推出的此款产品:
Module是一款Arduino兼容的38KHz红外线接收模块,可接收标准38KHz调制的遥控器信号,通过对Arduino进行编程,即可实现对遥控器信号的解码操作。可使用Arduino制作一款带学习功能的万能遥控器。
1.CR2025环保纽扣电池,容量160mah
2.发射距离:8m以上(具体和周围环境、接收端的灵敏度等因素有关)
3.有效角度:60度
4.面贴材料:0.125mmPET,有效寿命2万次。
5.品质稳定,性价比高
6.静态电流3-5uA,动态电流3-5mA。
产品说明书预览:
OK,介绍完毕~
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
 专业组_控制类_深圳大学_手势电视机遥控器.doc 23页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:200 &&
你可能关注的文档:
··········
··········
德州仪器C2000及MCU创新设计大赛
手势电视机遥控器
指导教师:
应用类别:
先进控制类
参赛队成员名单(含每人的邮箱地址,用于建立人才库):
梁凯、在读研究生、深圳大学、lkphy@
徐佳瑛、在读研究生、深圳大学、@
李丹涛、在读研究生、深圳大学、lidantao@
视频文件观看地址(若未拍摄,请注明):
  时间仓促,未拍摄视频文件
邮寄地址和收件人联系方式(快递发送,请不要使用邮政信箱地址)
广东省深圳市南山区深圳大学南区机电楼S821,518061
本报告详细介绍了一款基于手势识别算法及DSP2812平台实现的手势电视机红外遥控系统。该系统可以将用户手势的运动信息转换成相应的红外信号从而达到手势遥控电视机更换频道和调节音量的目的。该系统主要由基于双端口RAM通信的双DSP并行处理平台、CMOS数字摄像头、万能红外遥控模块、上位机调试软件和以太网通信模块组成。实验测试表明,该系统能成功实现用户手势图像的采集,手势动作的识别、红外遥控功能及以太网通信功能。
关键词:手势识别、DSP 2812、红外遥控、UDP协议
This paper introduced a system called hand gesture-based IR Remote Controller, which based on the gesture recognition algorithm and was realized on DSP platform. The Controller can convert the motion information of the user’s hand gesture into corresponding infrared signal so as to achieve the purpose of changing channels and adjusting volumes of TV with hand gesture.
The Controller consists of a dual-DSP parallel processing platform which based on dual-port RAM communicating technology, CMOS digital camera, universal infrared remote control module, PC debugging software and Ethernet communication  module.
The experimental tests show that the system can successfully realize collecting the images of user’s hand gestures, recognizing gestures and Ethernet communication function.
Keywords: gesture recognition,?DSP?2812, infrared remote controller,?UDP
把新技术应用到日常生活当中,不仅能够发挥新技术的优势,达到推广新技术的目的,而且能够提高大众的生活水平,方便人们的日常生活。基于这样的目的,本设计针对家庭电视机红外遥控器进行了重新的思考和探索。传统的电视机遥控器需要用户按键进行更换频道,调节音量等操作。虽然大部分人已经习惯了这样的一种的遥控方式,但是,当中的弊端相信不少人也能够体会。对比最符合人的控制交互方式,按键操作始终不是最优和最容易接受的选择。那么能否找到一种更加直观,更加人性化的遥控方式,让我们在不依赖于传统遥控器的情况下也能随心所欲遥控电视机?为了找到答案,本设计结合手势识别新技术,将手势识别技术与电视机红外遥控功能相融合,制作出名为手势电视机遥控器的遥控装置。
手势识别技术是指计
正在加载中,请稍后...
46页45页55页64页31页145页60页38页66页46页您的访问出错了(404错误)
很抱歉,您要访问的页面不存在。
1、请检查您输入的地址是否正确。
进行查找。
3、感谢您使用本站,3秒后自动跳转至网站首页利用Wireshark截取数据包,并对数据包进行解析
时间: 10:52:31
&&&& 阅读:107474
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&
wireshark安装文件下载地址:
(提取码:0bbc)
安装步骤:
解压文件之后,在\wireshark-win32-1.4.9中文版\文件夹中找到安装文件,双击即可安装。
安装完成之后,双击wireshark图标即可启动,界面如下:
抓包步骤:
1、点击开始按钮列出可以抓包的接口:
2、点击选项可以配置抓包参数:
3、配置完成点击开始,即可开始抓包:
4、点击停止完成抓包。
抓包界面分析:
抓包结果整个窗口被分成三部分:
1、最上面为数据包列表,用来显示截获的每个数据包的总结性信息;
2、中间为协议树,用来显示选定的数据包所属的协议信息;
3、最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。
数据包列表中,第一列是编号(如第1个包),第二列是截取时间(0.000000),第三列source是源地址(115.155.39.93),第四列destination是目的地址(115.155.39.112),第五列protocol是这个包使用的协议(这里是UDP协议),第六列info是一些其它的信息,包括源端口号和目的端口号(源端口:58459,目的端口:54062)。
协议树可以得到被截获数据包的更多信息,如主机的MAC地址(Ethernet
II)、IP地址(Internet protocol)、UDP端口号(user datagram
protocol)以及UDP协议的具体内容(data)。
分析ICMP协议数据包
实验原理:&ping是用来测试网络连通性的命令,一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。
实验步骤:
点击开始抓包,为了抓取使用ICMP的包,我们要设置过滤条件,点击“选项”:
再点击“抓包过滤”按钮:
因此初始状态下没有只抓取ICMP协议包的过滤条件,因此我们点击新建按钮:
在过滤名字和过滤条件中分别输入“ICMP
only”(自定义),“icmp”,点击确定:
这是可以看到抓包过滤按钮后面的文本框出现了ICMP字样,说明过滤条件设置成功:
点击开始,发现现在抓取不到任何包:
打开命令行窗口,执行命令:ping&:
这时可以看到数据包抓取页面抓取到了8包,与命令行显示的已发送和已接受的包的数量是一致的:
选择任意一个包查看详细信息:
可以看到ICMP报文的格式为:
在这个试验中,可以发现,icmp的报文就只有两种,请求和应答:
这两个报文的type不一样,8代表请求,0代表应答;code都为0,表示为回显应答;标示符和序列号都是一样的,表示这两个报文是配对的
协议,所以此次实验选取
DHCP数据包分析&&&&&&&&&&&
使用DHCP获取IP地址:
(1)打开命令窗口,启动Wireshark。&
(2)输入“ipconfig&&/release”。这条命令会释放主机目前的IP地址,此时,主机IP地址会变为0.0.0.0&
(3)然后输入“ipconfig&&/renew”命令。这条命令让主机获得一个网络配置,包括新的IP地址。&
(4)等待,直到“ipconfig&&/renew”终止。然后再次输入“ipconfig&&/renew”&命令。&
(5)当第二个命令“ipconfig&&/renew”&终止时,输入命令“ipconfig&/release”&释放原来的已经分配的IP地址&
(6)停止分组俘获。如下图:
五.实验分析
由截图可知,本机发起DHCP
Discover包,用来寻找DHCP服务器,源ip是0.0.0.0,因为刚开始还不知道,目的地址是255.255.255.255的广播地址,广播到整个网段。
Message type为1表明是请求包,由客户端发出。
Hardware address
length为6表示本机的网络硬件地址长度为6bytes
Hops为0表示跳数,此处为0 表示没有经过网关。
此字段表示DHCP报文类型:
此字段表示DHCP客户端的报文类型。
这是UDP上的DHCP,本机发起的端口是68,目标端口是67.
DHCP服务器收到客户端发的DHCP
Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP
Offer包发送出去。
此时源IP是DHCP服务器的IP,目的IP是255.255.255.255的广播。这时候本机还无法获得IP,所以DHCP服务器只能用广播来回应。
此截图表明通过UDP传输,客户端端口号68,服务器是67。
Message type为2表明是回复包。
Hops为1不标明经过了一个中继。
表明给客户端的IP地址,但是现在还没有确认。
这是中断的地址,就是网关
DHCP服务器地址
客户端收到这个DHCP Offer后,会再发出一个DHCP
Request给服务器来申请这个Offer中包含的地址。这个时候,客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。
此时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255。
将这些都广播出去,告诉其他DHCP服务器和分配给本机的服务器。
被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。
本次抓包过程将采用显示过滤器的方法来过滤数据包。
&标签:&&&&&&&&&&&&&&&&&&原文:/hewenwu/p/3720084.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 电子电表偷电遥控器 的文章

 

随机推荐