![]() |
發布時間: 2020-8-26 15:13
正文摘要:求指導,想要實現按鍵4按下LED4延時0.5秒閃爍,按其他鍵或者再按一下熄滅;按鍵2按下LED2稍暗,按其他鍵或者再按一下熄滅,按鍵3按下LED2稍亮,按其他鍵或者再按一下熄滅,程序應該怎么修改呢?程序及按鍵編碼值如下 ... |
截個圖看看,你完成的單個功能。 你這個需求由于有紅外編碼,對時序要求比較嚴,先把單個功能高質量完成才行,別一開始就搞組合功能,到時不能工作都不知道如何查起。 比如先做一個簡單功能,把這個功能封裝成函數,有了封裝換一個不同的遙控器就不至于全部推倒重來。 別想著只用幾行代碼就能解決所有問題,要舍得多聲明變量,多聲明函數,思維要有層次,不要眉毛胡子一把抓,結果啥都沒抓到。 我給你的代碼有你所缺乏的編程思維,認真做一遍后,你目前的很多問題都可迎刃而解。 千萬不要小瞧按鍵點燈程序,你試著完成下面需求: 1,單擊按鍵在按下時馬上點亮 2,單擊按鍵在抬起后才點亮 3,雙擊點亮, 4,長按3秒點亮 5,連續按3次點亮 6,按住按鍵不放,1秒后,LED每秒鐘閃爍3次,松開手后,LED熄滅 |
你上次不是提過類似問題么,我給的參考程序有沒有敲一遍?首先在IO口加幾個按鍵代替紅外接收,把LED按照需求點亮, 然后再單獨調通紅外接收。 最后組合在一起。 別急,花點時間把這些吃透,以后就輕松了。 做項目其實都是大同小異。 你這個我以前玩過。 ![]() ![]() |
XTXB 發表于 2020-8-26 16:30 這個程序搞了好久,把各個功能模塊分出來,然后再組合,對于我們初學者來說很難的,不知道從何入手 |
用個小狀態機描述比較清晰: idle state : ledOff(); if (capture(Key4)) { shine(LED4); goto state 1; } if (capture(Key2)) { darken(LED2) goto state 2; } if (capture(Key3)) { brighten(LED2) goto state 3; } state 1、state2、state3: if (capture(anykey)) { goto state idle; } 偽代碼,自己實現函數 |
你這個程序功能代碼互相交叉,牽一發動全身,沒有修改價值,先按照之前的按鍵控制LED的例子先做一遍,各功能模塊要獨立出來:LED顯示,蜂鳴器驅動,鍵值解析,紅外接收,單獨封裝成一個函數,先把這些一個個調試正常,然后一個個組合起來。另外,定時中斷中再用delay很不妥。 |