久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4360|回復: 0
打印 上一主題 下一主題
收起左側

單片機紅外解碼并更新遙控碼至stc單片機的EPROM

[復制鏈接]
跳轉到指定樓層
樓主
ID:137504 發表于 2016-9-11 22:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

本例程的完整keil工程文件下載:
http://www.zg4o1577.cn/bbs/dpj-55490-1.html

下面是部分程序代碼的預覽:
  1. #include "EEPROM.h"
  2. #include "ChannelShortcutDef.h"

  3. /*******************************************************
  4. 函數:void EEPROM_Write(uint16_t Addr,uint8_t Data);
  5. 功能:向EEPROM對應地址寫數據,
  6.        寫數據前要先擦除所寫地址中的數據;
  7. *******************************************************/
  8. void EEPROM_Write(uint16_t Addr,uint8_t Data)
  9. {
  10.         ISP_CONTR = 0x82;          //允許ISP,設置等待時間
  11.         ISP_CMD   = 0x02;          //字節編程命令
  12.         ISP_ADDRH = Addr>>8;
  13.         ISP_ADDRL = Addr;          //送地址
  14.         ISP_DATA  = Data;          //送數據

  15.         ISP_TRIG  = 0x46;
  16.         ISP_TRIG  = 0xB9;          //觸發命令
  17. }
  18. /*******************************************************
  19. 函數:uint8_t EEPROM_Read(uint16_t Addr);
  20. 功能:讀EEPROM對應地址中的數據;
  21. *******************************************************/
  22. uint8_t EEPROM_Read(uint16_t Addr)
  23. {
  24.         ISP_CONTR = 0x82;          //允許ISP,設置等待時間
  25.         ISP_CMD   = 0x01;          //字節讀取命令
  26.         ISP_ADDRH = Addr>>8;
  27.         ISP_ADDRL = Addr;          //送地址

  28.         ISP_TRIG  = 0x46;
  29.         ISP_TRIG  = 0xB9;          //觸發命令

  30.         return ISP_DATA;
  31. }
  32. /*******************************************************
  33. 函數:void EEPROM_Erase(uint16_t Addr);
  34. 功能:擦除EEPROM對應地址的數據;
  35. *******************************************************/
  36. void EEPROM_Erase(uint16_t Addr)
  37. {
  38.         ISP_CONTR = 0x82;          //允許ISP,設置等待時間
  39.         ISP_CMD   = 0x03;          //扇區擦除命令
  40.         ISP_ADDRH = Addr>>8;
  41.         ISP_ADDRL = Addr;          //送地址

  42.         ISP_TRIG  = 0x46;
  43.         ISP_TRIG  = 0xB9;          //觸發命令
  44. }
  45. /*******************************************************************************************
  46. 函數:void WriteE2P_IRcode(void)
  47. 功能: 往EEPROM內部寫入全部遙控碼
  48.                          第一扇區(0x2000)預置遙控通道和快捷鍵;
  49.                          第二扇區(0x2200)開始存儲RCA協議碼,系統碼、用戶碼各占一個字節
  50.                          第三扇區(0x2400)開始)存儲NEC8協議碼,系統碼、用戶碼各占一個字節
  51.                    第四扇區(0x2600)開始)存儲NEC16協議碼,系統掄繭兩個字節,用戶碼占兩個個字節
  52. ******************************************************************************************/
  53. void WriteE2P_IRcode(void)
  54. {
  55.         uint8_t i=0,j=0;
  56.         uint8_t RCAcode_Offet   = 0;//RCA通道快捷鍵對應的遙控碼EEPROM地址偏移量
  57.         uint8_t NEC8code_Offet  = 0;//NEC8通道快捷鍵對應的遙控碼EEPROM地址偏移量
  58.         uint8_t NEC16code_Offet = 0;//NEC16通道快捷鍵對應的遙控碼EEPROM地址偏移量

  59.         EEPROM_Erase(Channel_ShortcutKey);                //擦除第一扇區
  60.         EEPROM_Write(Channel_ShortcutKey+0,RCA);          //預置RCA通道
  61.         EEPROM_Write(Channel_ShortcutKey+1,AV1);          //預置AV1
  62.         EEPROM_Write(Channel_ShortcutKey+2,HDMI1);        //預置HDMI1
  63.         EEPROM_Write(Channel_ShortcutKey+3,TV5);                //預置TV5
  64.         EEPROM_Write(Channel_ShortcutKey+4,Wifi_ON);//預置Wifi_ON
  65.         EEPROM_Write(Channel_ShortcutKey+5,Exit);                //預置Exit

  66.         EEPROM_Erase(RCAcode_HeadAddr);  //擦除第二扇區
  67.         for(i=0;i<29;i++)
  68.         {
  69.                 RCAcode_Offet += i*2;                             //確定NEC8偏移量
  70.                 for(j=0;j<2;j++)
  71.                 {
  72.                         EEPROM_Write(RCAcode_HeadAddr+RCAcode_Offet,RCAcode_Table[i][j]);
  73.                         RCAcode_Offet++;
  74.                  }
  75.                 RCAcode_Offet=0;                                                         //偏移量歸零                                                
  76.          }
  77.          
  78.         EEPROM_Erase(NEC8code_HeadAddr); //擦除第三扇區
  79.         for(i=0;i<29;i++)
  80.         {
  81.                 NEC8code_Offet += i*2;                           //確定NEC8偏移量
  82.                 for(j=0;j<2;j++)
  83.                 {
  84.                         EEPROM_Write(NEC8code_HeadAddr+NEC8code_Offet,NEC8code_Table[i][j]);
  85.                         NEC8code_Offet++;
  86.                  }
  87.                 NEC8code_Offet=0;                                                         //偏移量歸零                                                
  88.          }
  89.          
  90.         EEPROM_Erase(NEC16code_HeadAddr);//擦除第四扇區
  91.         for(i=0;i<29;i++)
  92.         {
  93.                 NEC16code_Offet += i*4;                           //確定NEC16偏移量
  94.                 for(j=0;j<2;j++)
  95.                 {
  96.                         EEPROM_Write(NEC16code_HeadAddr+NEC16code_Offet,(NEC16code_Table[i][j])/256);
  97.                         NEC16code_Offet++;
  98.                         EEPROM_Write(NEC16code_HeadAddr+NEC16code_Offet,(NEC16code_Table[i][j])%256);
  99.                         NEC16code_Offet++;
  100.                  }
  101.                 NEC16code_Offet=0;                                                 //偏移量歸零                                                
  102.          }
  103. }
  104. /*******************************************************************************************
  105. 函數void ReadE2P_IRcode(uint8_t Channel,uint8_t ShortcutKey,uint8_t *pHex_IRcode)
  106. 功能: 從EEPROM內部讀取對應快捷鍵的遙控協議碼,外部傳入4字節數組以存儲遙控碼
  107.                          第二扇區(0x2200開始)存儲RCA協議碼,系統碼、用戶碼各占一個字節
  108.                          第三扇區(0x2400開始)存儲NEC8協議碼,系統碼、用戶碼各占一個字節
  109.                    第四扇區(0x2600開始)存儲NEC16協議碼,系統碼占兩個字節,用戶碼占兩個字節
  110.                    注:第一扇區(0x2000)存儲的是設置好的遙控通道和快捷鍵;
  111. ******************************************************************************************/
  112. void ReadE2P_IRcode(uint8_t Channel,uint8_t ShortcutKey,uint8_t *pHex_IRcode)
  113. {        
  114.         uint8_t RCAcode_Offet   = 0;//RCA通道快捷鍵對應的遙控碼EEPROM地址偏移量
  115.         uint8_t NEC8code_Offet  = 0;//NEC8通道快捷鍵對應的遙控碼EEPROM地址偏移量
  116.         uint8_t NEC16code_Offet = 0;//NEC16通道快捷鍵對應的遙控碼EEPROM地址偏移量
  117.         
  118.         switch(Channel)//先讀取系統碼,后讀取用戶碼
  119.         {
  120.                 case RCA:               
  121.                 {
  122.                         RCAcode_Offet=ShortcutKey*2;
  123.                         pHex_IRcode[0]=EEPROM_Read(RCAcode_HeadAddr+RCAcode_Offet);
  124.                         pHex_IRcode[1]=EEPROM_Read(RCAcode_HeadAddr+RCAcode_Offet+1);break;
  125.                  }
  126.                 case NEC8:               
  127.                 {
  128.                         NEC8code_Offet=ShortcutKey*2;
  129.                         pHex_IRcode[0]=EEPROM_Read(NEC8code_HeadAddr+NEC8code_Offet);
  130.                         pHex_IRcode[1]=EEPROM_Read(NEC8code_HeadAddr+NEC8code_Offet+1);break;
  131.                  }
  132.                 case NEC16:               
  133.                 {
  134.                         NEC16code_Offet=ShortcutKey*4;
  135.                         pHex_IRcode[0]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet);         //系統碼高8位
  136.                         pHex_IRcode[1]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+1);//系統碼低八位
  137.                         pHex_IRcode[2]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+2);//0x00
  138.                         pHex_IRcode[3]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+3);break;//用戶碼
  139.                  }
  140.                 default:{break;}
  141.          }
  142. }
復制代碼
  1. #include "ChannelShortcutDef.h"

  2. //遙控通道列表
  3. uint8_t code Channel_Table[3][7]=
  4. {
  5.         "RCA",
  6.         "NEC-8",
  7.         "NEC-16"
  8. };
  9. //遙控快捷鍵列表
  10. uint8_t code Shortcut_Table[22][9]=
  11. {
  12.         "AV1",                                                                                                        
  13.         "AV2",                                
  14.         "HDMI1",               
  15.         "HDMI2",
  16.         "HDMI3",
  17.         "HDMI4",
  18.         "TV5",
  19.         "TV6",
  20.         "TV8",
  21.         "TV10",
  22.         "TV62",
  23.         "TV",
  24.         "Cable",
  25.         "3D_ON",
  26.         "3D_OFF",
  27.         "Wifi_ON",
  28.         "MIC_ON",
  29.         "MIC_OFF",
  30.         "Show_SN",
  31.         "OOB_Shop",
  32.         "PW_OFF",
  33.         "Exit"
  34. };
  35. //RCA協議遙控碼,系統碼+用戶碼,對應工廠遙控器000通道
  36. uint8_t code RCAcode_Table[29][2]=
  37. {
  38.         {0x08,0x01},//AV1
  39.         {0x08,0x02},//AV2
  40.         {0x08,0x08},//HDMI1
  41.         {0x08,0x09},//HDMI2
  42.         {0x08,0x0A},//HDMI3
  43.         {0x08,0x0B},//HDMI4
  44.         {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
  45.         {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
  46.         {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
  47.         {0x0B,0x0A},//TV10=TV+10+OK三個按鍵
  48.         {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
  49.         {0x0B,0x0A},//TV
  50.         {0x0C,0x0D},//Cable
  51.         {0x08,0x3D},//3D_ON
  52.         {0x08,0x3E},//3D_OFF
  53.         {0x06,0x1D},//Wifi_ON
  54.         {0x08,0x18},//MIC_ON
  55.         {0x08,0x19},//MIC_OFF
  56.         {0x08,0x14},//Show_SN
  57.         {0x06,0x2E},//OOB_Shop
  58.         {0x06,0x15},//PW_OFF
  59.         {0x00,0xF9},//Exit
  60.         
  61.         {0x00,0xCF},//Num0
  62.         {0x00,0xCE},//Num1
  63.         {0x00,0xCD},//Num2
  64.         {0x00,0xCA},//Num5
  65.         {0x00,0xC9},//Num6
  66.         {0x00,0xC7},//Num8
  67.         {0x00,0x0B} //OK
  68. };
  69. //NEC8協議遙控碼,系統碼+用戶碼,對應工廠遙控器001通道
  70. uint8_t code NEC8code_Table[29][2]=
  71. {
  72.         {0x08,0x01},//AV1
  73.         {0x08,0x02},//AV2
  74.         {0x08,0x08},//HDMI1
  75.         {0x08,0x09},//HDMI2
  76.         {0x08,0x0A},//HDMI3
  77.         {0x08,0x0B},//HDMI4
  78.         {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
  79.         {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
  80.         {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
  81.         {0x0B,0x0A},//TV10=TV+1+0+OK三個按鍵
  82.         {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
  83.         {0x0B,0x0A},//TV
  84.         {0x0C,0x0D},//Cable
  85.         {0x08,0x3D},//3D_ON
  86.         {0x08,0x3E},//3D_OFF
  87.         {0x06,0x1D},//Wifi_ON
  88.         {0x08,0x18},//MIC_ON
  89.         {0x08,0x19},//MIC_OFF
  90.         {0x08,0x14},//Show_SN
  91.         {0x06,0x2E},//OOB_Shop
  92.         {0x06,0x15},//PW_OFF
  93.         {0x40,0x43},//Exit
  94.         
  95.         {0x40,0x00},//Num0
  96.         {0x40,0x01},//Num1
  97.         {0x40,0x02},//Num2
  98.         {0x40,0x05},//Num5
  99.         {0x40,0x06},//Num6
  100.         {0x40,0x08},//Num8
  101.         {0x40,0x21} //OK
  102. };
  103. //NEC16協議遙控碼,系統碼+用戶碼,對應工廠遙控器002通道
  104. uint16_t code NEC16code_Table[29][2]=
  105. {
  106.         {0x08,0x01},//AV1
  107.         {0x08,0x02},//AV2
  108.         {0x08,0x08},//HDMI1
  109.         {0x08,0x09},//HDMI2
  110.         {0x08,0x0A},//HDMI3
  111.         {0x08,0x0B},//HDMI4
  112.         {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
  113.         {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
  114.         {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
  115.         {0x0B,0x0A},//TV10=TV+10+OK三個按鍵
  116.         {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
  117.         {0x0B,0x0A},//TV
  118.         {0x0C,0x0D},//Cable
  119.         {0x08,0x3D},//3D_ON
  120.         {0x08,0x3E},//3D_OFF
  121.         {0x06,0x1D},//Wifi_ON
  122.         {0x08,0x18},//MIC_ON
  123.         {0x08,0x19},//MIC_OFF
  124.         {0x08,0x14},//Show_SN
  125.         {0x06,0x2E},//OOB_Shop
  126.         {0x06,0x15},//PW_OFF
  127.         {0x2012,0x42},//Exit
  128.         
  129.         {0x2012,0x10},//Num0
  130.         {0x2012,0x11},//Num1
  131.         {0x2012,0x12},//Num2
  132.         {0x2012,0x15},//Num5
  133.         {0x2012,0x16},//Num6
  134.         {0x2012,0x18},//Num8
  135.         {0x2012,0x40} //OK
  136. };
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久蜜柚 | 日韩a视频 | 91资源在线观看 | 国产精品久久久久久久久久 | 国产色网| 在线免费视频一区 | 国外成人在线视频网站 | 成人亚洲在线 | 久久久久久国产 | 五月婷婷婷 | 国产一区视频在线 | 欧美精品在线播放 | 天堂亚洲网 | 精品国产免费一区二区三区五区 | 久久精品视频在线免费观看 | 国产精品久久久久久一区二区三区 | 国产欧美一区二区三区久久人妖 | 黄视频免费| 国产乱码精品1区2区3区 | 欧美在线一区二区三区 | 91在线视频网址 | 精品欧美乱码久久久久久1区2区 | 欧美一级大片免费观看 | 精品91视频 | 嫩草影院黄 | 亚洲精品成人 | 国外成人在线视频 | 欧美色综合一区二区三区 | 久久一区二 | 新疆少妇videos高潮 | 亚洲精品电影在线观看 | 国产精品久久av | 亚洲精品影院 | 在线看片国产 | 国产激情在线播放 | 999热在线视频 | 最新一级毛片 | 国产免费一区二区三区 | 韩日av片 | 亚洲先锋影音 | 久久av网 |