<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 嵌入式開(kāi)發(fā)的一個(gè)騷操作!你用過(guò)嗎?

嵌入式開(kāi)發(fā)的一個(gè)騷操作!你用過(guò)嗎?

發(fā)布人:xiaomaidashu 時(shí)間:2023-12-06 來(lái)源:工程師 發(fā)布文章
目錄
  • 1 映射表在串口數據解析中的應用

    • 1.1 數據結構

  • 1.2 指令、函數映射表

    • 1.3 串口解析函數實(shí)現

  • 2 映射表在UI設計中的應用

    • 2.1 數據結構

    • 2.2 函數映射表

    • 2.3 定義兩個(gè)變量保存當前場(chǎng)景和上一個(gè)場(chǎng)景

    • 2.4 按下Up按鍵 跳轉到指定場(chǎng)景current_stage的值根據映射表改變

    • 2.5 場(chǎng)景改變后 根據映射表執行相應的函數Handler

1 映射表在串口數據解析中的應用1.1 數據結構
typedef struct 
{
    char CMD[CMDLen];
    unsigned char (*cmd_operate)(char *data);
}Usart_Tab;
1.2 指令、函數映射表
static const Usart_Tab InstructionList[CMDMax]=
{
    {"PWON",PowOn},
    {"PWOFF",PowOff},
    {"HDCP",HdcpOnOff},
    {"/V",QueryKaVersion},
    {"EDIDUpgrade",UpdataEDID},
    {"Psave",Psave},
    {"Precall",Precall},
    {"Pclear",Pclear},
};
1.3 串口解析函數實(shí)現
unsigned char DataAnalysis(char *buf){
  unsigned char i,Result;
  char *NEXT=NULL;
  for(i=0;i<CMDMax;i++)
  {
    NEXT=StrCmp(buf,(char*)InstructionList[i].CMD);
    if(NEXT!=NULL)
    {
      usartfuncp=InstructionList[i].cmd_operate;
      Result=(*usartfuncp)(NEXT);
    }
  }
  return Result;
}
2 映射表在UI設計中的應用2.1 數據結構

菜單枚舉:

typedef enum
{
  stage1=0,
  stage2,
  stage3,
  stage4,
  stage5,
  stage6,
  stage7,
  stage8,
  stage9,
}SCENE;

數據結構:

typedef struct {
  void (*current_operate)(); //當前場(chǎng)景的處理函數
  SCENE Index;               //當前場(chǎng)景的標簽
  SCENE Up;                  //按下Up鍵跳轉的場(chǎng)景
  SCENE Down;                //按下Down鍵跳轉的場(chǎng)景
  SCENE Right;               //按下Left鍵跳轉的場(chǎng)景
  SCENE Left;                //按下Right鍵跳轉的場(chǎng)景
}STAGE_TAB;
2.2 函數映射表
STAGE_TAB stage_tab[]={
  #.    operate       Index    Up     Down    Left   Right   
  {Stage1_Handler,  stage1,  stage4,  stage7,  stage3, stage2},
  {Stage2_Handler,  stage2,  stage5,  stage8,  stage1, stage3},
  {Stage3_Handler,  stage3,  stage6,  stage9,  stage2, stage1},
  {Stage4_Handler,  stage4,  stage7,  stage1,  stage6, stage5},
  {Stage5_Handler,  stage5,  stage8,  stage2, stage4,  stage6},
  {Stage6_Handler,  stage6,  stage9,  stage3, stage5,  stage4},
  {Stage7_Handler,  stage7,  stage1,  stage4, stage9,  stage8},
  {Stage8_Handler,  stage8,  stage2,  stage5, stage7,  stage9},
  {Stage9_Handler,  stage9,  stage3,  stage6, stage8,  stage7},
};
2.3 定義兩個(gè)變量保存當前場(chǎng)景和上一個(gè)場(chǎng)景
char current_stage=stage1;
char prev_stage=current_stage;
2.4 按下Up按鍵 跳轉到指定場(chǎng)景current_stage的值根據映射表改變
current_stage =stage_tab[current_stage].Up;
2.5 場(chǎng)景改變后 根據映射表執行相應的函數Handler
if(current_stage!=prev_stage)
{
  stage_tab[current_stage].current_operate();
  prev_stage=current_stage;
}

文章來(lái)源:物聯(lián)網(wǎng)IoT技術(shù) 

本文來(lái)源網(wǎng)絡(luò ),免費傳達知識,版權歸原作者所有。如涉及作品版權問(wèn)題,請聯(lián)系我進(jìn)行刪除。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>