1. 程式人生 > >emWin 2天速成實例教程004_軟件定時器(Timer)和位圖片動畫

emWin 2天速成實例教程004_軟件定時器(Timer)和位圖片動畫

emwin timer image 定時器 動畫

備註:(1)打開工程目錄下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就基本會用emWin做項目,其他章節可以需要時再參考。
emWin的TIMER是一個軟件定時器,它以OS_TimeMS變量的值作為定時基準,而OS_TimeMS則通過一個硬件定時器每1ms中斷加1,在emWin內部程序不斷查詢OS_TimeMS的變化實現軟件定時。
在很多應用場合,我們需要用到定時器,比如每隔一定時間查詢某一事件有沒有被觸發,每隔一定時間改變數字顯示以實現動態計數,每隔一定時間顯示一幅圖片實現圖片動畫等等….
TIMER的使用是比較簡單的(請閱讀例程源碼),不過有幾個地方需要註意:(1)使用TIMER實現定時的精度是比較差的(但OS_TimeMS的值是精確的),如果需要精確定時請使用硬件定時器產生中斷實現。(2)用TIMER定時刷新數字或圖片顯示時,時間間隔不宜過短,比如需要實現一個毫秒級的計數器顯示,你當然不能每1ms刷新一次數字,比較合適的是每30ms刷新一次數字顯示即可(即計數器每30ms變化一次)。(3)TIMER不會因為隱藏其父窗體而停止計數(當然有處理的方法,請閱讀例程源碼)。
利用BmpCvt.exe工具(在Tool目錄下)將動畫BMP圖片轉成C文件,然後將此C文件加入emWin工程,並每隔100ms(WM_TIMER消息有效時)用IMAGE_SetBitmap()函數將不同圖片設置給IMAGE控件即可(emWin內部會自己處理更新,無需我們操心):
技術分享圖片
技術分享圖片

在例程中,其實是提供了一個emWin實現圖片動畫的模板,用戶需要做動畫時只需要在此例程的基礎上實現即可。還有就是由於emWin的模擬器是單顯存顯示,因此畫面難免會有"撕裂"現象,在雙顯存的GLCD上不會有這種現象:
技術分享圖片


源碼/軟件下載


emWin 2天速成實例教程004_軟件定時器(Timer)和位圖片動畫