1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3099|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

想問一下關(guān)于單片機(jī)按鍵切換顯示內(nèi)容的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
因?yàn)樵陲@示的時(shí)候加了左右滾動(dòng),上下滾動(dòng)特效,所以切換時(shí)要一直按著按鍵,一直顯示的內(nèi)容停止,松開按鍵才能切換,師傅跟我說可以定義一個(gè)切換標(biāo)志位,按下按鍵置1,然后顯示內(nèi)容再置0,可是我要切換的內(nèi)容有5項(xiàng),請(qǐng)問怎么才能用標(biāo)注位來切換程序?(之前我用的是按下按鍵i++,不同的顯示不同的內(nèi)容,i==5的時(shí)候i=0。)

單片機(jī)源程序如下:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:565305 發(fā)表于 2020-5-20 16:55 | 只看該作者
本帖最后由 egypt 于 2020-5-21 09:37 編輯

從題主給的代碼,無法看出 “切換的內(nèi)容有5項(xiàng)”,所以只能從別的角度來分析
首先假設(shè)一個(gè) main 中主邏輯循環(huán)長(zhǎng)這樣
main ()
{
     InitHardware();       // 硬件初始化
     while(1)
     {     GetKey();        //  掃描按鍵函數(shù)
            ProcessKey();  // 根據(jù)按鍵設(shè)定標(biāo)志函數(shù)
            DoDisplay();    // 根據(jù)標(biāo)志進(jìn)行顯示函數(shù)
            ....                  // 此處為  delay 或者其它功能性的函數(shù)
     }
}
這個(gè)流程簡(jiǎn)單說,像  獲取消息事件 → 分揀處理消息事件并生成內(nèi)部標(biāo)志 → 根據(jù)內(nèi)部標(biāo)志執(zhí)行對(duì)應(yīng)動(dòng)作

回過來說題主的代碼, 假設(shè) GetKey / ProcessKey / DoDisplay 函數(shù)都是只耗費(fèi) 【1毫秒】的代碼, 那么 GetKey 哪怕寫在 DoDisplay() 里頭都沒問題(代價(jià)是:可讀性、可維護(hù)性就非常差了。一點(diǎn)都不模塊化);

但是,大部分情況下 DoDisplay() 函數(shù)的耗時(shí),經(jīng)常是一個(gè)不定的,而且很大的值。可以設(shè)想一下,假設(shè) DoDisplay() 這個(gè)函數(shù)耗費(fèi) 10秒 才結(jié)束,那么跑完一次外圍 while 循環(huán),就得 10秒,衍生為,讀取按鍵就變成 10秒讀取一次,或者說按鍵要按住 10秒才能讓邏輯循環(huán)往下走一輪(從題主開頭的表述就是,一直按著按鍵,一直顯示的內(nèi)容停止,松開按鍵才能切換)……

常見改法是,要確保 GetKey / ProcessKey 有機(jī)會(huì)被執(zhí)行和【設(shè)置標(biāo)志】。這也是題主提及的,【定義一個(gè)切換標(biāo)志位】的核心意思了。至于 GetKey 在 中斷上 或者 輪詢 等機(jī)制,或者說 DoDisplay 需要分拆為片段等【比方說每顯示一行字就為一個(gè)片段?】,留待題主自己根據(jù)項(xiàng)目復(fù)雜度去評(píng)估了【其實(shí)有些機(jī)器在畫面的移動(dòng)卷屏?xí)r,只是操作顯示緩存,多出來的地方留黑邊。操作緩存的效率可比讀取字模快多了】


評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:756622 發(fā)表于 2020-5-20 21:12 | 只看該作者
這樣行嗎?當(dāng)你的頁面滾動(dòng)程序顯示完后把對(duì)應(yīng)的頁面的標(biāo)志位置為當(dāng)前頁數(shù),比如這樣if(h==1&&biaozhi==5)不過這樣的話好像只能朝著一個(gè)方向循環(huán)滾動(dòng)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表