OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5306|回复: 7

求教原子哥啊 红外遥控函数求解!!!!!

[复制链接]

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-8-19
在线时间
0 小时
发表于 2013-9-26 00:18:52 | 显示全部楼层 |阅读模式
//处理红外键盘
//返回值:
// 0,没有任何按键按下
//其他,按下的按键键值.
谁能给我解释一下下面的这个函数u8 Remote_Scan(void)!麻烦给我详细解答一下,谢谢了 ,菜鸟刚学!!!
u8 Remote_Scan(void)
{        
u8 sta=0;       
    u8 t1,t2;  
if(RmtSta&(1<<6))//得到一个按键的所有信息了
   t1=RmtRec>>24; //得到地址码    这段代码是怎么得到地址码的???
   t2=(RmtRec>>16)&0xff; //得到地址反码        为什么要右移16再跟0xff与运算才能得到地址反码???
     if((t1==(u8)~t2)&&t1==REMOTE_ID)//检验遥控识别码(ID)及地址 
   { 
       t1=RmtRec>>8;//这里为什么要右移8位??
       t2=RmtRec;
       if(t1==(u8)~t2)sta=t1;//键值正确  
}   
if((sta==0)||((RmtSta&0X80)==0))//按键数据错误/遥控已经没有按下了
{
RmtSta&=~(1<<6);//清除接收到有效按键标识
RmtCnt=0; //清除按键次数计数器
}
}  
    return sta;
}
下面的key数是怎么得来的,为什么162是POWER等等????是不是在那一份数据报告里,应该是看那一份数据报告???
switch(key)
{
case 0:str="ERROR";break;   
case 162:str="POWER";break;    
case 98:str="UP";break;    
case 2:str="PLAY";break;  
case 226:str="ALIENTEK";break;  
case 194:str="RIGHT";break;   
case 34:str="LEFT";break;  
case 224:str="VOL-";break;  
case 168:str="DOWN";break;   
case 144:str="VOL+";break;    
case 104:str="1";break;  
case 152:str="2";break;   
case 176:str="3";break;    
case 48:str="4";break;    
case 24:str="5";break;    
case 122:str="6";break;  
case 16:str="7";break;  
case 56:str="8";break;  
case 90:str="9";break;
case 66:str="0";break;
case 82:str="DELETE";break;  
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-26 01:23:14 | 显示全部楼层
楼主详细了解下红外遥控器的NEC协议,就明白了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-8-27
在线时间
2 小时
发表于 2013-9-26 08:31:07 | 显示全部楼层
0点都还在学习啊

是发送4个8位二进制码,第一二个是遥控识别码(REMOTE_ID),
第一个为  正码(0),第二个为反码(255),接着两个数据是键值,第一个为正码 
第二个为反码.
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-9-26 11:57:19 | 显示全部楼层
回复【3楼】qqcaiyin:
---------------------------------
能说清楚点吗?为什么要右移24位才得到地址码?
t1=RmtRec>>24; //得到地址码    这段代码是怎么得到地址码的???
    t2=(RmtRec>>16)&0xff; //得到地址反码        为什么要右移16再跟0xff与运算才能得到地址反码???
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-9-26 12:22:41 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥 这个地址码和地址反码是怎么取得啊??能给我讲解一下吗??
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-8-27
在线时间
2 小时
发表于 2013-9-26 16:13:33 | 显示全部楼层
回复【4楼】willkong:
---------------------------------
32位(32个bit)4个byte ,即:8bit(1),8bit(2),8bit(3),8bit(4);

若想要第1个8bit,就得把第1个8bit移到第4个位置上,,这时需要右移3*8=24个位(第1个8bit后面有3个8bit),

同理若想要第2个8bit,就得把第2个8bit移到第4个位置上,,这时需要右移2*8=16个位(第2个8bit后面有2个8bit),

因为t1,t2是8bit的,所以一个32位的值赋给它,它也只取这个32位的低8位,

另单字节数和0xff与操作得到的还是这个数;
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-9-26 18:07:26 | 显示全部楼层
回复【6楼】qqcaiyin:
---------------------------------
谢谢您的耐心解答,我明白了,十分感谢啊!!!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-26 22:35:09 | 显示全部楼层
回复【6楼】qqcaiyin:
---------------------------------
精彩。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 14:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表