1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
想問一下關于單片機按鍵切換顯示內容的問題
[打印本頁]
作者:
chengyuyu
時間:
2020-5-20 11:55
標題:
想問一下關于單片機按鍵切換顯示內容的問題
因為在顯示的時候加了左右滾動,上下滾動特效,所以切換時要一直按著按鍵,一直顯示的內容停止,松開按鍵才能切換,師傅跟我說可以定義一個切換標志位,按下按鍵置1,然后顯示內容再置0,可是我要切換的內容有5項,請問怎么才能用標注位來切換程序?(之前我用的是按下按鍵i++,不同的顯示不同的內容,i==5的時候i=0。)
單片機源程序如下:
]@SDX[`U2XMS}55T[CI6H77.png
(67.85 KB, 下載次數: 38)
下載附件
2020-5-20 11:55 上傳
作者:
egypt
時間:
2020-5-20 16:55
本帖最后由 egypt 于 2020-5-21 09:37 編輯
從題主給的代碼,無法看出 “切換的內容有5項”,所以只能從別的角度來分析
首先假設一個 main 中主邏輯循環長這樣
main ()
{
InitHardware(); // 硬件初始化
while(1)
{ GetKey(); // 掃描按鍵函數
ProcessKey(); // 根據按鍵設定標志函數
DoDisplay(); // 根據標志進行顯示函數
.... // 此處為 delay 或者其它功能性的函數
}
}
這個流程簡單說,像 獲取消息事件 → 分揀處理消息事件并生成內部標志 → 根據內部標志執行對應動作
回過來說題主的代碼, 假設 GetKey / ProcessKey / DoDisplay 函數都是只耗費 【1毫秒】的代碼, 那么 GetKey 哪怕寫在 DoDisplay() 里頭都沒問題(代價是:可讀性、可維護性就非常差了。一點都不模塊化);
但是,大部分情況下 DoDisplay() 函數的耗時,經常是一個不定的,而且很大的值。可以設想一下,假設 DoDisplay() 這個函數耗費 10秒 才結束,那么跑完一次外圍 while 循環,就得 10秒,衍生為,讀取按鍵就變成 10秒讀取一次,或者說按鍵要按住 10秒才能讓邏輯循環往下走一輪(從題主開頭的表述就是,一直按著按鍵,一直顯示的內容停止,松開按鍵才能切換)……
常見改法是,要確保 GetKey / ProcessKey 有機會被執行和【設置標志】。這也是題主提及的,【定義一個切換標志位】的核心意思了。至于 GetKey 在 中斷上 或者 輪詢 等機制,或者說 DoDisplay 需要分拆為片段等【比方說每顯示一行字就為一個片段?】,留待題主自己根據項目復雜度去評估了【其實有些機器在畫面的移動卷屏時,只是操作顯示緩存,多出來的地方留黑邊。操作緩存的效率可比讀取字模快多了】
作者:
新征途
時間:
2020-5-20 21:12
這樣行嗎?當你的頁面滾動程序顯示完后把對應的頁面的標志位置為當前頁數,比如這樣if(h==1&&biaozhi==5)不過這樣的話好像只能朝著一個方向循環滾動。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1