作者共发了2篇帖子。 内容转换:不转换▼
 
点击 回复
354 1
【键码】我的万能遥控器的键码
一派护法 十九级
1楼 发表于:2013-9-21 14:21

设置的代码为101时,键码如下

101键码表:
用户码:0x1c(=28) 0x61(=97)
电源键:0xb4
数字键:
0xf8 0xf4 0xf0
0xec 0xe8 0xe4
0xe0 0xdc 0xd8
0xd4 0xfc 0x94
方向键:
0xb0        0xa0
      0xb0
 0xac 0xc4 0xbc
      0xa0
0xac        0xbc
其他键:
0x84 0xc0 0x8c 0x80
xxxx 0x88 0x90 0xa4
xxxx 0x8c 0xd0 0x98

数字2:028097244011
 
bit DeCode(void)       
{
   
   unsigned char  i,j;
 unsigned char temp;    //储存解码出的数据
 for(i=0;i<4;i++)      //连续读取4个用户码和键数据码
   {
   for(j=0;j<8;j++)  //每个码有8位数字
    {
          temp=temp>>1;  //temp中的各数据位右移一位,因为先读出的是高位数据         
      TH1=0;         //定时器清0
      TL1=0;         //定时器清0
      TR1=1;         //开启定时器T0
        while(IR==0)   //如果是低电平就等待
                ;       //低电平计时
        TR1=0;         //关闭定时器T0
      LowTime=TH1*256+TL1;    //保存低电平宽度
      TH1=0;         //定时器清0
      TL1=0;         //定时器清0
      TR1=1;         //开启定时器T0
      while(IR==1)   //如果是高电平就等待
          ;     
      TR1=0;        //关闭定时器T0
      HighTime=TH1*256+TL1;   //保存高电平宽度
      if((LowTime<370)||(LowTime>640))
           return 0;        //如果低电平长度不在合理范围,则认为出错,停止解码   
      if((HighTime>420)&&(HighTime<620))   //如果高电平时间在560微秒左右,即计数560/1.085=516次
              temp=temp&0x7f;       //(520-100=420, 520+100=620),则该位是0
      if((HighTime>1300)&&(HighTime<1800)) //如果高电平时间在1680微秒左右,即计数1680/1.085=1548次
              temp=temp|0x80;       //(1550-250=1300,1550+250=1800),则该位是1
       }                
    a[i]=temp; //将解码出的字节值储存在a[i]                     
    }         
  if(a[2]=~a[3])  //验证键数据码和其反码是否相等,一般情况下不必验证用户码
  return 1;     //解码正确,返回1
}

void Int0(void) interrupt 0
  {
     EX0=0;      //关闭外中断0,不再接收二次红外信号的中断,只解码当前红外信号
   TH1=0;      //定时器T0的高8位清0
   TL1=0;      //定时器T0的低8位清0
   TR1=1;     //开启定时器T0 
   while(IR==0);          //如果是低电平就等待,给引导码低电平计时
   TR1=0;                //关闭定时器T0    
   lowtime=TH1*256+TL1;  //保存低电平时间
   TH1=0;      //定时器T0的高8位清0
   TL1=0;      //定时器T0的低8位清0
   TR1=1;     //开启定时器T0
   while(IR==1);  //如果是高电平就等待,给引导码高电平计时
   TR1=0;        //关闭定时器T0
   hightime=TH1*256+TL1; //保存引导码的高电平长度
     if((lowtime>7800)&&(lowtime<8800)&&(hightime>3600)&&(hightime<4700))
   {
      //如果是引导码,就开始解码,否则放弃,引导码的低电平计时
        //次数=9000us/1.085=8294, 判断区间:8300-500=7800,8300+500=8800.
       if(decode()==1) // 执行遥控解码功能
   {
    execute();
   }
   }
   EX0=1;   //开启外中断EX0
  }
解888完全正确

一派护法 十九级
2楼 发表于:2013-9-21 14:21

以下是801的键码表:

用户码0x02fd
电源:0x03fc
0x08f7 0x09f6 0x0af5
0x0cf3 0x0df2 0x0ef1
0x10ef 0x11ee 0x12ed
0x15ea 0x14eb 0x04fb
0x0ff0 0x0ff0 0x13ec
0x06f9 0x0bf4 0x07f8
0x06f9 0x13ec 0x07f8
xxxxxx 0x01fe 0x1ae5 xxxxxx
xxxxxx xxxxxx xxxxxx 0x00ff
xxxxxx 0x05fa 0x16e9 0x1ae5
[指示灯] 电源
1 2 3
4 5 6
7 8 9
-/-- 0 BACK
up up down
left menu right
left down right
确认 声音 图像 制式
交换 画中画 丽音16:9 静音
设置 睡眠 TV/AV 正常

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:354 回复数:1
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2013-9-21 14:21
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。