【第3版emWin教程】第35章 emWin6.x的AppWizard中文實現方法
教程不斷更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429
第35章 emWin6.x的AppWizard中文實現方法
本期教程跟大家講解emWin6.x新版GUIBuilder工具AppWizard的中文顯示方法。
35.1 初學者重要提示
35.2 AppWizard建立帶中文介面
35.3 AppWizard生成的VS工程使用VS2019執行方法
35.4 AppWizard建立的介面新增到工程
35.5 實驗例程說明(RTOS)
35.6 實驗例程說明(裸機)
35.7 總結
35.1 初學者重要提示
1、 使用的AppWizard版本一定要和emWin版本匹配,本章配套例子使用的emWin版本是V6.16。對應的AppWizard版本是V1.20,下載地址:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=105049 。
2、 AppWizard工程路徑不支援中文,使用時特別注意。
3、 AppWizard生成的emWin6.x工程可以方便的融合之前的低版本emWin工程程式碼,在回撥函式裡面可以方便的新增之前基於視窗或者對話方塊建立的介面。
35.2 AppWizard建立帶中文介面
下面使用AppWizard設計帶中文的介面,然後將設計的介面移植到板子上執行,讓大家有個整體的認識,後面章節再為大家說明AppWizard具體選項的功能。
35.2.1 下載安裝AppWizard
下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=105049
35.2.2 建立AppWizard工程
選擇Create new project:
下面要需要設定配置項,主要是Color format顏色格式別配置錯了,要跟開發板emWin工程的顏色格式一致,我們這裡設定為16位色,M565。
建立後效果如下:
35.2.3 新增控制元件
依次點選左上角的控制元件物件:Screen和Box:
設定背景色:
新增兩個按鈕控制元件和一個二維碼:
35.2.4 設定預設的點陣圖格式
點選選單Edit -> Preferences:
由於我們前面設定的M565顏色格式,這裡設定GUICC_M565選項即可:
這個設定很重要,否則很容易造成AppWizard生成的工程程式碼移植到板子上硬體異常。
35.2.5 設定預設的字型檔方式
點選選單Edit -> Preferences:
Project text only表示僅展示工程裡面設定的中文漢字。
35.2.6 新增帶中文的文字控制元件
新增text文字控制元件:
新增文字內容:
新增後會多出一列,方便我們新增中文:
新增文字:
設定字型:
由於我們選擇的字型名稱“微軟雅黑”是中文,導致僅顯示了_24_Normal_EXT_AA4,沒有字首,但不影響使用。現在再看TEXT控制元件,會發現我們前面設定的中文已經可以正常顯示了:
相同的方法,再新增一個文字控制元件
繼續使用相同的字型,只是我們這裡不可以直接點選這裡選擇,必須按照前面的方法重新生成一次即可:
完整的效果如下:
35.2.7 執行AppWizard
點選下面這個小按鈕可以執行設計的介面:
35.2.8 匯出AppWizard程式碼
點選選單File -> Export & Save即可匯出:
匯出檔案在建立時設定的路徑中。
35.3 AppWizard生成的VS工程使用VS2019執行方法
匯出的VS工程檔案位於如下路徑:
執行後效果如下:
35.4 AppWizard建立的介面新增到工程
AppWizard生成介面程式碼後,將其新增到工程中。這個過程有幾個注意事項,在下面步驟中會為大家說明。
35.4.1 新增一批xxxx_Private.h檔案到工程
開發板的工程檔案裡面沒有這些檔案,需要大家從AppWizard工程路徑:Simulation\GUI_Lib 裡面複製到開發板工程路徑\emWin\Include裡面,下面是部分截圖,詳情看本章節配套的例子即可:
35.4.2 新增AppWizard介面檔案到工程
方便起見,將AppWizard所有檔案複製到開發板工程裡面:
新增到工程的效果如下:
35.4.3 新增工程路徑
僅新增一個路徑選項即可:
35.4.4 修改程式
主要修改兩個地方:
- bsp.c檔案將LCD背光點亮。
void bsp_Init(void) { /* 省略未寫 */ /* 延遲200ms再點亮背光,避免瞬間高亮 */ bsp_DelayMS(200); LCD_SetBackLight(255); }
- APPWConf.c檔案
使能三緩衝,關閉檔案系統。
/********************************************************************* * * Multibuffering */ static U8 _MultibufEnable = 1; /********************************************************************* * * Static code * ********************************************************************** */ /********************************************************************* * * _InitText */ static void _InitText(void) { // // Empty, because application does not contain any text // } /********************************************************************* * * Public code * ********************************************************************** */ /********************************************************************* * * APPW_X_Setup */ void APPW_X_Setup(void) { APPW_SetpfInitText(_InitText); //APPW_X_FS_Init(); APPW_MULTIBUF_Enable(_MultibufEnable); APPW_SetData(_apRootList, _NumScreens, _aVarList, _NumVars); }
通過前面這幾步就完成了AppWizard工程介面的移植。剩下就可以程式設計工程程式碼下載到板子運行了。
35.5 實驗例程說明(RTOS)
配套例子:
V7-545_emWin6.x實驗_AppWizard中文顯示(RTOS)
實驗目的:
- 學習AppWizard中文顯示。
實驗內容:
1、K1按鍵按下,串列埠或者RTT列印任務執行情況(串列埠波特率115200,資料位8,奇偶校驗位無,停止位1)。
2、(1) 凡是用到printf函式的全部通過函式App_Printf實現。
(2) App_Printf函式做了訊號量的互斥操作,解決資源共享問題。
3、預設上電是通過串列埠列印資訊,如果使用RTT列印資訊:
MDK AC5,MDK AC6或IAR通過使能bsp.h檔案中的巨集定義為1即可
#define Enable_RTTViewer 1
4、各個任務實現的功能如下:
App Task Start 任務 :啟動任務,這裡用作BSP驅動包處理。
App Task MspPro任務 :訊息處理,這裡用作LED閃爍。
App Task UserIF 任務 :按鍵訊息處理。
App Task COM 任務 :暫未使用。
App Task GUI 任務 :GUI任務。
μCOS-III任務除錯資訊(按K1按鍵,串列埠列印):
RTT 列印資訊方式:
程式設計:
任務棧大小分配:
μCOS-III任務棧大小在app_cfg.h檔案中配置:
#define APP_CFG_TASK_START_STK_SIZE 512u
#define APP_CFG_TASK_MsgPro_STK_SIZE 2048u
#define APP_CFG_TASK_COM_STK_SIZE 512u
#define APP_CFG_TASK_USER_IF_STK_SIZE 512u
#define APP_CFG_TASK_GUI_STK_SIZE 2048u
任務棧大小的單位是4位元組,那麼每個任務的棧大小如下:
App Task Start 任務 :2048位元組。
App Task MspPro任務 :8192位元組。
App Task UserIF 任務 :2048位元組。
App Task COM 任務 :2048位元組。
App Task GUI 任務 :8192位元組。
系統棧大小分配:
μCOS-III的系統棧大小在os_cfg_app.h檔案中配置:
#define OS_CFG_ISR_STK_SIZE 512u
系統棧大小的單位是4位元組,那麼這裡就是配置系統棧大小為2KB
emWin動態記憶體配置:
GUIConf.c檔案中的配置如下:
#define EX_SRAM 1/*1 used extern sram, 0 used internal sram */ #if EX_SRAM #define GUI_NUMBYTES (1024*1024*24) #else #define GUI_NUMBYTES (100*1024) #endif
通過巨集定義來配置使用內部SRAM還是外部的SDRAM做為emWin的動態記憶體,當配置:
#define EX_SRAM 1 表示使用外部SDRAM作為emWin動態記憶體,大小24MB。
#define EX_SRAM 0 表示使用內部SRAM作為emWin動態記憶體,大小100KB。
預設情況下,本教程配套的所有emWin例子都是用外部SDRAM作為emWin動態記憶體。
emWin介面顯示效果:
800*480解析度介面效果。
35.6 實驗例程說明(裸機)
配套例子:
V7-544_emWin6.x實驗_AppWizard中文顯示(裸機)
實驗目的:
- 學習AppWizard中文顯示。
emWin介面顯示效果:
800*480解析度介面效果。
emWin動態記憶體配置:
GUIConf.c檔案中的配置如下:
#define EX_SRAM 1/*1 used extern sram, 0 used internal sram */ #if EX_SRAM #define GUI_NUMBYTES (1024*1024*24) #else #define GUI_NUMBYTES (100*1024) #endif
通過巨集定義來配置使用內部SRAM還是外部的SDRAM做為emWin的動態記憶體,當配置:
#define EX_SRAM 1 表示使用外部SDRAM作為emWin動態記憶體,大小24MB。
#define EX_SRAM 0 表示使用內部SRAM作為emWin動態記憶體,大小100KB。
預設情況下,本教程配套的所有emWin例子都是用外部SDRAM作為emWin動態記憶體。
35.7 總結
本章節主要是為大家講解了AppWizard中文顯示的基礎用法,後續章節將深入為大家說明。
微信公眾號:armfly_com 安富萊論壇:www.armbbs.cn 安富萊淘寶:https://armfly.taobao.com