![]() |
發布時間: 2021-8-13 16:17
正文摘要:大家好: 我寫一個 2種LED流水的方式,想通過K1按鍵進行切換,怎么按下一次,能開啟一種模式,按下K1第二次,怎么也不能開啟,幫忙看下,謝謝! |
我感覺一個流水燈程序是沒有必要問的 有學習板也沒有必要仿真的 我學了十來天的C語言,到現在,BMP280,ADXL345,OLED(SH1106驅動)都寫過了,暫時還沒有遇上一定要發帖問的問題,自己解決問題可能用的時間久一點,但印象更加深刻 |
lkc8210 發表于 2021-8-16 13:53 好的 ,非常感謝,我把中斷里面的 非 改為,P1=0XFe 之類的 也可以了,謝謝!
|
SGW2020 發表于 2021-8-16 12:30 把中斷內的uint i; 移到頂
在LED 初始化里再加i=0;
|
lkc8210 發表于 2021-8-13 17:45 您好,現在可以切換了,按下K1 先是LED 按照方式1 流水,然后按下K1 按照方式2流水,然后在按下還是按照方式1 流水,可是這時的流水跟第一次不一致了,效果有差異,我在LED 初始化增加了 P1=0xff 還是一樣的,能否幫忙在分析一下,非常感謝!代碼如下
|
hoodieboi 發表于 2021-8-13 21:20 是的,謝謝提醒, |
lkc8210 發表于 2021-8-13 17:45 非常感謝 !用你寫的代碼可以了正常切換了 |
1.LED1_Stys()和LED2_Stys()這兩個隨便進一個就一直在while循環里了出不來了,按鍵不起作用了 2.你第一種狀態是用定時器中斷做的吧,切換至第二個狀態時,你沒關定時器中斷,第一個狀態仍然會存在,第二個狀態會受影響 |
Letitia 發表于 2021-8-13 16:48 是的,只能進去一個,不能切換,能否指點一下怎么修改 |
lkc8210 發表于 2021-8-13 17:45 謝謝 你的建議 能否幫忙修改一下 感謝 |
其一8個流水燈不用逐一定義,只有單一使用才逐一定義如定義的2個按鍵是應該的,其二中斷代碼盡量少否則日后也這樣寫估計被人看到不會用這樣的人.其三有了定時器可不用死循環延時否則日后也這樣寫估計被人看到會被人議論的. |
本帖最后由 lkc8210 于 2021-8-13 22:47 編輯 好可怕的代碼 四點建議 1.不要在大循環以外的其它地方用while(1) 2.就算很有需要,也要加離開條件 3.編程盡量模組化,一個函數負責按鍵掃描,另一個函數負責流水燈控制,他們之間用標致位交流 4.中斷內不要干太多情,有機會超時 現在最簡單的改法,就是建議2:
|
LED1_Stys()和LED2_Stys()里面的while也會卡死在里面 |
你的main里面沒有定時器初始化和while |
用定時器中斷比較好實現,延時就別用了 |