![]() |
看著評論我也收獲不少 |
電子浪人 發表于 2021-12-14 18:58 但是你的代碼給我很大的啟發,非常感謝 |
lkc8210 發表于 2021-12-14 13:15 我一個按鍵是外部中斷控制LED,一個按鍵是定時器中斷控制數碼管,怎么還會是只有一個呢 |
1.審題要小心,評分標準4的要求是Led和數碼管都要用中斷,你現在只用了一個中斷 2.你這系統對按鍵中斷的要求不高,可以不用消抖 3.要求沒寫是正計時還是倒記時,但寫了要保持N,所以正計時更方便寫代碼 4.如果你"想出跟別人不太一樣的方法"來達到題目要求可以讓代碼更簡潔易讀,歡迎使用,但如果讓代碼更累贅難懂,就是畫蛇添足 ![]() ![]() ![]() |
需要改進的就是, 中斷里面只做兩件事, 一,就是計數 二,就是置位標志。 其他的事情統統在主程序里面通過if(cnt2==1) 也好, 通過 if(flag2)也好進行判斷后,選擇性的執行。 |
電子浪人 發表于 2021-12-13 13:27 后續想重新倒計時的時候 再 ET0 = 1 啊 |
你想用while停在這也不是非得用while(1),你可以整個while(key2==0){...};這樣再次按鍵的時候就跳出去了,但是這樣你得在前面做一個按鍵的松手檢測 |
188610329 發表于 2021-12-12 22:38 這里的定時器中斷我是來處理流水燈和數碼管的倒計時可能代碼有點多,ET0 = 0,確實可讓數碼管停在數字4上,但是后續我如果想再按下去數碼管重新倒計時該咋辦呢 |
1) 既然你知道問題在 while(1) 上面,為什么你還要用 while(1)? 2) 你把中斷當什么了? 我還真沒見過主程序比中斷還要簡潔的代碼。 3) 我實在看不出來 你定時器里面 while(1)的必要, 你既然判斷了 >4 那么你直接關了 ET0 不就好了 有必要 去while(1) 死在那里么? |
這個難點就在于,這個定時器中斷里有一個while循環,這個循環是為了保證數碼管在倒計時結束之后能夠保持住數字“4”,但是也就是因為這個while,導致我再一次按下按鍵時候,按鍵無法反映,我不知道該怎么辦 |