欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機紅外解碼并更新遙控碼至stc單片機的EPROM
[打印本頁]
作者:
51黑z
時間:
2016-9-11 22:16
標題:
單片機紅外解碼并更新遙控碼至stc單片機的EPROM
本例程的完整keil工程文件下載:
http://www.raoushi.com/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
};
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1