找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)計時系統(tǒng)程序調(diào)試,有一些細(xì)節(jié)我不太會,希望大家能幫忙

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:966442 發(fā)表于 2021-12-11 19:45 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我的要求
這是我畫的仿真圖 P1.3控制數(shù)碼管(用的是定時器中斷判斷按鍵是否按下),P3.2控制LED流水燈(用的是觸發(fā)外部中斷的方法)
我現(xiàn)在的代碼可以讓流水燈流4次,數(shù)碼管能夠倒計時,并且倒計時結(jié)束后可以停在數(shù)字“4”上,但是我發(fā)現(xiàn)倒計時的時間誤差有點大,當(dāng)我P1.3的按鍵按下的時候發(fā)現(xiàn)從4到3的時間有點長,這個4要等挺久才能達(dá)到3,后面才比較正常的倒計時,我感到很迷惑,還有的話,就是后續(xù)的要求,我實在是想不出有什么比較好的方法(最好能不要用到軟件延時),希望大家能給我這個萌新一點思路,或者我的代碼有什么需要改進(jìn)的地方或者其他地方也可以提出來,感謝大家的幫助
以下是我的代碼圖
2.rar (70.88 KB, 下載次數(shù): 5)


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

使用道具 舉報

沙發(fā)
ID:966442 發(fā)表于 2021-12-12 20:32 | 只看該作者
這個難點就在于,這個定時器中斷里有一個while循環(huán),這個循環(huán)是為了保證數(shù)碼管在倒計時結(jié)束之后能夠保持住數(shù)字“4”,但是也就是因為這個while,導(dǎo)致我再一次按下按鍵時候,按鍵無法反映,我不知道該怎么辦
回復(fù)

使用道具 舉報

板凳
ID:624769 發(fā)表于 2021-12-12 22:38 | 只看該作者
1)  既然你知道問題在 while(1)  上面,為什么你還要用 while(1)?
2)  你把中斷當(dāng)什么了? 我還真沒見過主程序比中斷還要簡潔的代碼。
3)  我實在看不出來 你定時器里面 while(1)的必要, 你既然判斷了 >4  那么你直接關(guān)了 ET0 不就好了 有必要 去while(1) 死在那里么?
回復(fù)

使用道具 舉報

地板
ID:966442 發(fā)表于 2021-12-13 13:27 | 只看該作者
188610329 發(fā)表于 2021-12-12 22:38
1)  既然你知道問題在 while(1)  上面,為什么你還要用 while(1)?
2)  你把中斷當(dāng)什么了? 我還真沒見過主 ...

這里的定時器中斷我是來處理流水燈和數(shù)碼管的倒計時可能代碼有點多,ET0 = 0,確實可讓數(shù)碼管停在數(shù)字4上,但是后續(xù)我如果想再按下去數(shù)碼管重新倒計時該咋辦呢
回復(fù)

使用道具 舉報

5#
ID:843335 發(fā)表于 2021-12-13 15:47 | 只看該作者
你想用while停在這也不是非得用while(1),你可以整個while(key2==0){...};這樣再次按鍵的時候就跳出去了,但是這樣你得在前面做一個按鍵的松手檢測
回復(fù)

使用道具 舉報

6#
ID:966442 發(fā)表于 2021-12-13 18:06 | 只看該作者
wuyui 發(fā)表于 2021-12-13 15:47
你想用while停在這也不是非得用while(1),你可以整個while(key2==0){...};這樣再次按鍵的時候就跳出去了, ...

這是我想到的,起碼可以讓數(shù)碼管在倒計時結(jié)束能保持?jǐn)?shù)字4的同時,也能響應(yīng)我的按鍵讓數(shù)碼管重新倒計時,就是感覺這個時間有點慢慢的
回復(fù)

使用道具 舉報

7#
ID:966442 發(fā)表于 2021-12-13 18:09 | 只看該作者
電子浪人 發(fā)表于 2021-12-13 13:27
這里的定時器中斷我是來處理流水燈和數(shù)碼管的倒計時可能代碼有點多,ET0 = 0,確實可讓數(shù)碼管停在數(shù)字4上 ...

這是我想出來的方法,不用關(guān)閉ET0,就依靠標(biāo)志位去切換,基本能滿足要求,就是感覺有點慢啊,確實如你所說我在中斷里的代碼過于臃腫,主程序過于簡潔,我感覺自己就是一定要想出跟別人不太一樣的方法去應(yīng)對一道題,可能是把這道題想的過于難了
回復(fù)

使用道具 舉報

8#
ID:624769 發(fā)表于 2021-12-13 19:18 | 只看該作者
電子浪人 發(fā)表于 2021-12-13 13:27
這里的定時器中斷我是來處理流水燈和數(shù)碼管的倒計時可能代碼有點多,ET0 = 0,確實可讓數(shù)碼管停在數(shù)字4上 ...

后續(xù)想重新倒計時的時候 再 ET0 = 1 啊
回復(fù)

使用道具 舉報

9#
ID:966442 發(fā)表于 2021-12-13 19:56 | 只看該作者
188610329 發(fā)表于 2021-12-13 19:18
后續(xù)想重新倒計時的時候 再 ET0 = 1 啊

這是我在你說之前,想到的方法,不用改變ET0也可以滿足要求,就是感覺有點慢慢的,我的代碼有什么需要改進(jìn)的地方嗎
回復(fù)

使用道具 舉報

10#
ID:624769 發(fā)表于 2021-12-13 23:11 | 只看該作者
需要改進(jìn)的就是, 中斷里面只做兩件事, 一,就是計數(shù) 二,就是置位標(biāo)志。 其他的事情統(tǒng)統(tǒng)在主程序里面通過if(cnt2==1)  也好, 通過 if(flag2)也好進(jìn)行判斷后,選擇性的執(zhí)行。
回復(fù)

使用道具 舉報

11#
ID:161164 發(fā)表于 2021-12-14 13:15 | 只看該作者
1.審題要小心,評分標(biāo)準(zhǔn)4的要求是Led和數(shù)碼管都要用中斷,你現(xiàn)在只用了一個中斷
2.你這系統(tǒng)對按鍵中斷的要求不高,可以不用消抖
3.要求沒寫是正計時還是倒記時,但寫了要保持N,所以正計時更方便寫代碼
4.如果你"想出跟別人不太一樣的方法"來達(dá)到題目要求可以讓代碼更簡潔易讀,歡迎使用,但如果讓代碼更累贅難懂,就是畫蛇添足





回復(fù)

使用道具 舉報

12#
ID:966442 發(fā)表于 2021-12-14 18:58 | 只看該作者
lkc8210 發(fā)表于 2021-12-14 13:15
1.審題要小心,評分標(biāo)準(zhǔn)4的要求是Led和數(shù)碼管都要用中斷,你現(xiàn)在只用了一個中斷
2.你這系統(tǒng)對按鍵中斷的要 ...

我一個按鍵是外部中斷控制LED,一個按鍵是定時器中斷控制數(shù)碼管,怎么還會是只有一個呢
回復(fù)

使用道具 舉報

13#
ID:966442 發(fā)表于 2021-12-14 19:51 | 只看該作者
電子浪人 發(fā)表于 2021-12-14 18:58
我一個按鍵是外部中斷控制LED,一個按鍵是定時器中斷控制數(shù)碼管,怎么還會是只有一個呢

但是你的代碼給我很大的啟發(fā),非常感謝
回復(fù)

使用道具 舉報

14#
ID:994053 發(fā)表于 2021-12-24 14:03 | 只看該作者
看著評論我也收獲不少
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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