|
| 看這序好象是亂套的。還不如先寫一個小函數(shù),先在軟件里,自己調(diào)試一下。這樣才能學(xué)會。 |
本帖最后由 i_could_have 于 2020-10-22 18:41 編輯 jianuli 發(fā)表于 2020-9-3 12:54 按下會暗是因?yàn)槌绦蛞恢痹讷@取按鍵輸入,開始時燈亮,你按下S2燈滅,之后再次獲取按鍵信息,case1還是先亮,之后檢測到S2按下,又滅。這樣閃爍,但是閃的頻率很快,所以看到的就是變暗。你可以在if里加個延時,那樣就會看到閃爍了 |
| 你的switch語句缺default: breaks;而且編程風(fēng)格不是很好,一行應(yīng)該就一個;語句的; |
| 貼一個相對完整的上來,要不你就看清楚定義,分析一下是否能執(zhí)行到LED=1;這里。 |
| 學(xué)到了 |
| 條件不對啊,嘗試聲明一個全局變量,用變量來記錄按鍵 |
| cnt_2是怎么算的,按下去算一次還是按下去彈起算一次,如果按下去彈起算一次,就不可能出現(xiàn)S2=0的情況;前面的條件不滿足,下面的程序是不可能執(zhí)行的 |
| 把if(S2==0){}這段話寫到按鍵函數(shù)里面去處理 |
| 只測led1看能亮滅嗎,因該是硬件問題或者io選擇的問題 |
| 連個防抖設(shè)計(jì)都沒有,直接判斷s2==0??!! |
wlefa 發(fā)表于 2020-9-8 10:27 您好,首先謝謝你的回復(fù),我剛才按你的方法加了延時,真的可以了耶,真是像你說的這樣,反復(fù)循環(huán)點(diǎn)亮與關(guān)斷LED1了,還有個最后問題,哈哈,就是case1:在執(zhí)行后面語句的時候,是不是類似有{}加在LED1與LED8之間呢,像這樣case1:{LED1=0;LED2=1;LED3=1;LED4=1;LED=1;LED6=1;LED7=1;LE D8=1;}break; |
| 不給延時怎么看的出來 |
|
本帖最后由 wlefa 于 2020-9-8 13:11 編輯 恐怕cnt_2值都是1吧,所以程序重復(fù)運(yùn)行在在case 1;當(dāng)S2按下時,程序循環(huán)點(diǎn)亮熄滅(S2按下)LED1,單片機(jī)頻率高,所以看到的是LED1會暗一點(diǎn);松開S2后,程序進(jìn)不了if(s2==0),不能熄滅,所以LED1常亮;在if(S2==)中加個延時,LED1滅的時間長點(diǎn),人眼容易分別。在case 1中開頭點(diǎn)亮LED1,緊接著用按鍵熄滅LED1,松開按鍵后第二次循環(huán)運(yùn)行,進(jìn)入程序就又把LED1點(diǎn)亮了,應(yīng)該把LED1初始化移出循環(huán),再在循環(huán)中改變LED狀態(tài) |
| 我猜是他邏輯有問題,S2按鍵按下會不會改變cnt_2的值? |
| 上全代碼別人才好分析 |
| 沒有人說說了嗎,還沒有解開我心里的疑團(tuán)呢呢 |
| 我感覺和case后面的語句矛盾了,因?yàn)閏ase讓LED1=0,而下面我又讓LED1=1, |
| while里面清空,就留一個滅燈函數(shù),看看能不能滅 |
| 您可以根據(jù)測試結(jié)果更改代碼。 這是一個簡單的代碼,應(yīng)該很容易調(diào)試。 |
jianuli 發(fā)表于 2020-9-3 18:20 你的按鍵彈起算一次與按鍵按下去的時候LED1點(diǎn)亮矛盾了,你必須把按鍵彈起算一次改為按鍵按下去算一次才行 |
| 大家?guī)兔Ψ治鱿驴?/td> |
Roy-2010 發(fā)表于 2020-9-3 19:15 想知道什么原因 |
jianuli 發(fā)表于 2020-9-3 12:52 看樣子是 cnt_2 一直是 1 或者變成 2 的時間不夠, cnt_2 相關(guān)的邏輯問題。 |
| 無需單片機(jī),你做個非門電路就好了。LED短路了之后通過電阻防止電源短路就好了。 |
| 是不是case后面的所有語句只受switch判斷控制? |
心有浮生 發(fā)表于 2020-9-3 16:37 是的,幫忙分析下咯,謝謝 |
#include51.h 發(fā)表于 2020-9-3 15:03 您好,cnt_2不受影響的了,按鍵都有消抖處理,我感覺是case后面的語句只受switch判斷控制的了? |
山水間 發(fā)表于 2020-9-3 14:09 您好,按鍵按下彈起時后算一次,也就是松開按鍵后算一次 |
梁廷明 發(fā)表于 2020-9-3 16:33 他的掃描函數(shù)叫an_jian()吧 |
| 程序里面怎么還掃描按鍵? |
|
你好 你看看是不是if(S2==0){}與break之間沒有加分號; 如果改良還有問題的話 那就好好看一下硬件 |
|
本帖最后由 #include51.h 于 2020-9-3 15:13 編輯 你這是邏輯上有問題,case 1:后面應(yīng)用if........else來寫,還有你那cnt_2值是不是不受影響的變化,這都能導(dǎo)致你得不到你想要的結(jié)果,可以用單步查一下你值的變化,要養(yǎng)成用調(diào)試查結(jié)果的習(xí)慣,你現(xiàn)在代碼還少,到你代碼多了出現(xiàn)錯誤時,別人也會看得頭大!說不定就不拱理你了 |
| cnt_2是怎么算的,按下去算一次還是按下去彈起算一次,如果按下去彈起算一次,就不可能出現(xiàn)S2=0的情況,鍵沒有消抖,不知道你的按鍵函數(shù)中執(zhí)行了沒? |
| 用程序檢測 LED 燈能否正常亮滅,能的話就是你寫的程序有問題,不能就是你電路有問題 |
jianuli 發(fā)表于 2020-9-3 12:52 查下電路吧,會暗估計(jì)有用,但是哪里出問題了 不會太清楚 |
| 大家?guī)兔Ψ治鱿驴?/td> |
烈火 發(fā)表于 2020-9-3 11:16 圖中就是這樣寫的呀,但LED不為1啊 |
wps10025 發(fā)表于 2020-9-3 12:10 寫啦,再下面呢,就是按鍵的函數(shù) |
心有浮生 發(fā)表于 2020-9-3 11:15 您好,可以運(yùn)行到的,S2按下時,LED1會暗一點(diǎn),松開S2后,LED1恢復(fù)正常亮度, |
山水間 發(fā)表于 2020-9-3 10:55 cnt_2是表示按鍵按下的次數(shù),按第1次時,LED1亮,按第2次時,LED燈亮 |
Powered by 單片機(jī)教程網(wǎng)