
本例程的完整keil工程文件下載:
http://www.zg4o1577.cn/bbs/dpj-55490-1.html
下面是部分程序代碼的預覽:
- #include "EEPROM.h"
- #include "ChannelShortcutDef.h"
- /*******************************************************
- 函數:void EEPROM_Write(uint16_t Addr,uint8_t Data);
- 功能:向EEPROM對應地址寫數據,
- 寫數據前要先擦除所寫地址中的數據;
- *******************************************************/
- void EEPROM_Write(uint16_t Addr,uint8_t Data)
- {
- ISP_CONTR = 0x82; //允許ISP,設置等待時間
- ISP_CMD = 0x02; //字節編程命令
- ISP_ADDRH = Addr>>8;
- ISP_ADDRL = Addr; //送地址
- ISP_DATA = Data; //送數據
- ISP_TRIG = 0x46;
- ISP_TRIG = 0xB9; //觸發命令
- }
- /*******************************************************
- 函數:uint8_t EEPROM_Read(uint16_t Addr);
- 功能:讀EEPROM對應地址中的數據;
- *******************************************************/
- uint8_t EEPROM_Read(uint16_t Addr)
- {
- ISP_CONTR = 0x82; //允許ISP,設置等待時間
- ISP_CMD = 0x01; //字節讀取命令
- ISP_ADDRH = Addr>>8;
- ISP_ADDRL = Addr; //送地址
- ISP_TRIG = 0x46;
- ISP_TRIG = 0xB9; //觸發命令
- return ISP_DATA;
- }
- /*******************************************************
- 函數:void EEPROM_Erase(uint16_t Addr);
- 功能:擦除EEPROM對應地址的數據;
- *******************************************************/
- void EEPROM_Erase(uint16_t Addr)
- {
- ISP_CONTR = 0x82; //允許ISP,設置等待時間
- ISP_CMD = 0x03; //扇區擦除命令
- ISP_ADDRH = Addr>>8;
- ISP_ADDRL = Addr; //送地址
- ISP_TRIG = 0x46;
- ISP_TRIG = 0xB9; //觸發命令
- }
- /*******************************************************************************************
- 函數:void WriteE2P_IRcode(void)
- 功能: 往EEPROM內部寫入全部遙控碼
- 第一扇區(0x2000)預置遙控通道和快捷鍵;
- 第二扇區(0x2200)開始存儲RCA協議碼,系統碼、用戶碼各占一個字節
- 第三扇區(0x2400)開始)存儲NEC8協議碼,系統碼、用戶碼各占一個字節
- 第四扇區(0x2600)開始)存儲NEC16協議碼,系統掄繭兩個字節,用戶碼占兩個個字節
- ******************************************************************************************/
- void WriteE2P_IRcode(void)
- {
- uint8_t i=0,j=0;
- uint8_t RCAcode_Offet = 0;//RCA通道快捷鍵對應的遙控碼EEPROM地址偏移量
- uint8_t NEC8code_Offet = 0;//NEC8通道快捷鍵對應的遙控碼EEPROM地址偏移量
- uint8_t NEC16code_Offet = 0;//NEC16通道快捷鍵對應的遙控碼EEPROM地址偏移量
- EEPROM_Erase(Channel_ShortcutKey); //擦除第一扇區
- EEPROM_Write(Channel_ShortcutKey+0,RCA); //預置RCA通道
- EEPROM_Write(Channel_ShortcutKey+1,AV1); //預置AV1
- EEPROM_Write(Channel_ShortcutKey+2,HDMI1); //預置HDMI1
- EEPROM_Write(Channel_ShortcutKey+3,TV5); //預置TV5
- EEPROM_Write(Channel_ShortcutKey+4,Wifi_ON);//預置Wifi_ON
- EEPROM_Write(Channel_ShortcutKey+5,Exit); //預置Exit
- EEPROM_Erase(RCAcode_HeadAddr); //擦除第二扇區
- for(i=0;i<29;i++)
- {
- RCAcode_Offet += i*2; //確定NEC8偏移量
- for(j=0;j<2;j++)
- {
- EEPROM_Write(RCAcode_HeadAddr+RCAcode_Offet,RCAcode_Table[i][j]);
- RCAcode_Offet++;
- }
- RCAcode_Offet=0; //偏移量歸零
- }
-
- EEPROM_Erase(NEC8code_HeadAddr); //擦除第三扇區
- for(i=0;i<29;i++)
- {
- NEC8code_Offet += i*2; //確定NEC8偏移量
- for(j=0;j<2;j++)
- {
- EEPROM_Write(NEC8code_HeadAddr+NEC8code_Offet,NEC8code_Table[i][j]);
- NEC8code_Offet++;
- }
- NEC8code_Offet=0; //偏移量歸零
- }
-
- EEPROM_Erase(NEC16code_HeadAddr);//擦除第四扇區
- for(i=0;i<29;i++)
- {
- NEC16code_Offet += i*4; //確定NEC16偏移量
- for(j=0;j<2;j++)
- {
- EEPROM_Write(NEC16code_HeadAddr+NEC16code_Offet,(NEC16code_Table[i][j])/256);
- NEC16code_Offet++;
- EEPROM_Write(NEC16code_HeadAddr+NEC16code_Offet,(NEC16code_Table[i][j])%256);
- NEC16code_Offet++;
- }
- NEC16code_Offet=0; //偏移量歸零
- }
- }
- /*******************************************************************************************
- 函數void ReadE2P_IRcode(uint8_t Channel,uint8_t ShortcutKey,uint8_t *pHex_IRcode)
- 功能: 從EEPROM內部讀取對應快捷鍵的遙控協議碼,外部傳入4字節數組以存儲遙控碼
- 第二扇區(0x2200開始)存儲RCA協議碼,系統碼、用戶碼各占一個字節
- 第三扇區(0x2400開始)存儲NEC8協議碼,系統碼、用戶碼各占一個字節
- 第四扇區(0x2600開始)存儲NEC16協議碼,系統碼占兩個字節,用戶碼占兩個字節
- 注:第一扇區(0x2000)存儲的是設置好的遙控通道和快捷鍵;
- ******************************************************************************************/
- void ReadE2P_IRcode(uint8_t Channel,uint8_t ShortcutKey,uint8_t *pHex_IRcode)
- {
- uint8_t RCAcode_Offet = 0;//RCA通道快捷鍵對應的遙控碼EEPROM地址偏移量
- uint8_t NEC8code_Offet = 0;//NEC8通道快捷鍵對應的遙控碼EEPROM地址偏移量
- uint8_t NEC16code_Offet = 0;//NEC16通道快捷鍵對應的遙控碼EEPROM地址偏移量
-
- switch(Channel)//先讀取系統碼,后讀取用戶碼
- {
- case RCA:
- {
- RCAcode_Offet=ShortcutKey*2;
- pHex_IRcode[0]=EEPROM_Read(RCAcode_HeadAddr+RCAcode_Offet);
- pHex_IRcode[1]=EEPROM_Read(RCAcode_HeadAddr+RCAcode_Offet+1);break;
- }
- case NEC8:
- {
- NEC8code_Offet=ShortcutKey*2;
- pHex_IRcode[0]=EEPROM_Read(NEC8code_HeadAddr+NEC8code_Offet);
- pHex_IRcode[1]=EEPROM_Read(NEC8code_HeadAddr+NEC8code_Offet+1);break;
- }
- case NEC16:
- {
- NEC16code_Offet=ShortcutKey*4;
- pHex_IRcode[0]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet); //系統碼高8位
- pHex_IRcode[1]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+1);//系統碼低八位
- pHex_IRcode[2]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+2);//0x00
- pHex_IRcode[3]=EEPROM_Read(NEC16code_HeadAddr+NEC16code_Offet+3);break;//用戶碼
- }
- default:{break;}
- }
- }
復制代碼- #include "ChannelShortcutDef.h"
- //遙控通道列表
- uint8_t code Channel_Table[3][7]=
- {
- "RCA",
- "NEC-8",
- "NEC-16"
- };
- //遙控快捷鍵列表
- uint8_t code Shortcut_Table[22][9]=
- {
- "AV1",
- "AV2",
- "HDMI1",
- "HDMI2",
- "HDMI3",
- "HDMI4",
- "TV5",
- "TV6",
- "TV8",
- "TV10",
- "TV62",
- "TV",
- "Cable",
- "3D_ON",
- "3D_OFF",
- "Wifi_ON",
- "MIC_ON",
- "MIC_OFF",
- "Show_SN",
- "OOB_Shop",
- "PW_OFF",
- "Exit"
- };
- //RCA協議遙控碼,系統碼+用戶碼,對應工廠遙控器000通道
- uint8_t code RCAcode_Table[29][2]=
- {
- {0x08,0x01},//AV1
- {0x08,0x02},//AV2
- {0x08,0x08},//HDMI1
- {0x08,0x09},//HDMI2
- {0x08,0x0A},//HDMI3
- {0x08,0x0B},//HDMI4
- {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
- {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
- {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
- {0x0B,0x0A},//TV10=TV+10+OK三個按鍵
- {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
- {0x0B,0x0A},//TV
- {0x0C,0x0D},//Cable
- {0x08,0x3D},//3D_ON
- {0x08,0x3E},//3D_OFF
- {0x06,0x1D},//Wifi_ON
- {0x08,0x18},//MIC_ON
- {0x08,0x19},//MIC_OFF
- {0x08,0x14},//Show_SN
- {0x06,0x2E},//OOB_Shop
- {0x06,0x15},//PW_OFF
- {0x00,0xF9},//Exit
-
- {0x00,0xCF},//Num0
- {0x00,0xCE},//Num1
- {0x00,0xCD},//Num2
- {0x00,0xCA},//Num5
- {0x00,0xC9},//Num6
- {0x00,0xC7},//Num8
- {0x00,0x0B} //OK
- };
- //NEC8協議遙控碼,系統碼+用戶碼,對應工廠遙控器001通道
- uint8_t code NEC8code_Table[29][2]=
- {
- {0x08,0x01},//AV1
- {0x08,0x02},//AV2
- {0x08,0x08},//HDMI1
- {0x08,0x09},//HDMI2
- {0x08,0x0A},//HDMI3
- {0x08,0x0B},//HDMI4
- {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
- {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
- {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
- {0x0B,0x0A},//TV10=TV+1+0+OK三個按鍵
- {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
- {0x0B,0x0A},//TV
- {0x0C,0x0D},//Cable
- {0x08,0x3D},//3D_ON
- {0x08,0x3E},//3D_OFF
- {0x06,0x1D},//Wifi_ON
- {0x08,0x18},//MIC_ON
- {0x08,0x19},//MIC_OFF
- {0x08,0x14},//Show_SN
- {0x06,0x2E},//OOB_Shop
- {0x06,0x15},//PW_OFF
- {0x40,0x43},//Exit
-
- {0x40,0x00},//Num0
- {0x40,0x01},//Num1
- {0x40,0x02},//Num2
- {0x40,0x05},//Num5
- {0x40,0x06},//Num6
- {0x40,0x08},//Num8
- {0x40,0x21} //OK
- };
- //NEC16協議遙控碼,系統碼+用戶碼,對應工廠遙控器002通道
- uint16_t code NEC16code_Table[29][2]=
- {
- {0x08,0x01},//AV1
- {0x08,0x02},//AV2
- {0x08,0x08},//HDMI1
- {0x08,0x09},//HDMI2
- {0x08,0x0A},//HDMI3
- {0x08,0x0B},//HDMI4
- {0x0B,0x0A},//TV5=TV+5+OK三個按鍵
- {0x0B,0x0A},//TV6=TV+6+OK三個按鍵
- {0x0B,0x0A},//TV8=TV+8+OK三個按鍵
- {0x0B,0x0A},//TV10=TV+10+OK三個按鍵
- {0x0B,0x0A},//TV62=TV+6+2+OK三個按鍵
- {0x0B,0x0A},//TV
- {0x0C,0x0D},//Cable
- {0x08,0x3D},//3D_ON
- {0x08,0x3E},//3D_OFF
- {0x06,0x1D},//Wifi_ON
- {0x08,0x18},//MIC_ON
- {0x08,0x19},//MIC_OFF
- {0x08,0x14},//Show_SN
- {0x06,0x2E},//OOB_Shop
- {0x06,0x15},//PW_OFF
- {0x2012,0x42},//Exit
-
- {0x2012,0x10},//Num0
- {0x2012,0x11},//Num1
- {0x2012,0x12},//Num2
- {0x2012,0x15},//Num5
- {0x2012,0x16},//Num6
- {0x2012,0x18},//Num8
- {0x2012,0x40} //OK
- };
復制代碼
|