博客專欄

        EEPW首頁 > 博客 > 嵌入式開發的一個騷操作!你用過嗎?

        嵌入式開發的一個騷操作!你用過嗎?

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

          • 1.1 數據結構

        • 1.2 指令、函數映射表

          • 1.3 串口解析函數實現

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

          • 2.1 數據結構

          • 2.2 函數映射表

          • 2.3 定義兩個變量保存當前場景和上一個場景

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

          • 2.5 場景改變后 根據映射表執行相應的函數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 串口解析函數實現
        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)(); //當前場景的處理函數
          SCENE Index;               //當前場景的標簽
          SCENE Up;                  //按下Up鍵跳轉的場景
          SCENE Down;                //按下Down鍵跳轉的場景
          SCENE Right;               //按下Left鍵跳轉的場景
          SCENE Left;                //按下Right鍵跳轉的場景
        }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 定義兩個變量保存當前場景和上一個場景
        char current_stage=stage1;
        char prev_stage=current_stage;
        2.4 按下Up按鍵 跳轉到指定場景current_stage的值根據映射表改變
        current_stage =stage_tab[current_stage].Up;
        2.5 場景改變后 根據映射表執行相應的函數Handler
        if(current_stage!=prev_stage)
        {
          stage_tab[current_stage].current_operate();
          prev_stage=current_stage;
        }

        文章來源:物聯網IoT技術 

        本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯系我進行刪除。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 嵌入式

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 通化县| 绿春县| 小金县| 广河县| 潮州市| 黑河市| 凭祥市| 美姑县| 区。| 罗城| 宝山区| 和龙市| 通江县| 日土县| 贺州市| 武鸣县| 平远县| 东源县| 登封市| 绥中县| 那曲县| 苍山县| 文水县| 元阳县| 三明市| 舟曲县| 玉环县| 类乌齐县| 德令哈市| 泰和县| 合水县| 原平市| 舞阳县| 府谷县| 林西县| 湘潭县| 班玛县| 澎湖县| 巴马| 庄河市| 南平市|