目前共有2篇帖子。
【鍵碼】我的萬能遙控器的鍵碼
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 正常

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2024 Arslanbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。