在51微控制器過定時器讓數碼管進行精確間隔時間顯示,為什麼已經用了中斷了,但是函式裡邊還是有延時函式

時間 2021-09-01 18:44:15

1樓:戶哲茂

tt==20的時候,就開始num++然後顯示num的值,但是tt==20需要一定的時間才會變成tt==21,在20的這段時間,會一直執行括號裡的內容。如果沒有delay,那麼括號裡的幾句話執行完需要的時間很短,執行完後發現tt還是20,所以又執行了一遍,那麼num值就變了,等tt==21了,num已經從0加到4了,中間的123執行太快人眼分辨不出來,一瞬間的事情.而加了delay只要delay的時間大於tt變化的時間,這樣每次tt變化,num只會++一次,就不會出現這個情況了.

我建議儘量不要用delay,你把程式優化一下,比如

if(tt==200)

通過改變200這個值來改變頻率

2樓:匿名使用者

**沒有完全吧,中斷tt++,while裡面沒有初始化這個tt呢

dula應該是使能顯示的,使能之後,延時之後,眼睛才能看出來

3樓:那後來呢

同學你好,這個地方的延時其實就是讓數碼管顯示一段時間,不然會一閃而過,看不見其他數字,延時是為了消隱。中斷與這裡延時不衝突。

4樓:匿名使用者

程式有問題,把最後那個延時改為tt=0就可以了。

5樓:匿名使用者

數碼管顯示,是掃描顯示的,不延時,眼睛沒那麼快、數碼管的顯示也沒那麼快。。。。。~

6樓:匿名使用者

你好!中斷是計秒,延時是為了防止數碼管閃爍

7樓:匿名使用者

你這程式有問題,不過那個軟體延時應該是讓顯示停留一段時間的

51微控制器定時器中斷問題,單個數碼管間隔1秒一次顯示0到9。 5

8樓:匿名使用者

時間太長大哥 估計要好幾秒 根據你的程式 沒必要加延時 還有 如果用不到int這麼大的型別 就改為unsigned char 可以節約微控制器空間

9樓:昔勤

定時器中斷就是用來代替延時delay的 你在加個delay,怎麼可能會用

10樓:匿名使用者

if(tt>=20)/

另外程式這樣寫是不行的,費勁啊

11樓:

延時太大,等延時完成時tt>20,迴圈不能進行。

12樓:匿名使用者

因為 delay(500)延時時間太長

利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。

13樓:匿名使用者

我正好也寫了那麼一個程式,我說一下自己的思路吧,我也剛學。

先做一個段選表和位選表,用兩個陣列儲存,如果有八個燈,位選就有8個。然後再定義一個陣列

digit[8] 裡面儲存 個位十位百位等數位。然後再定時器中斷函式裡,用一個switch語句,分別表明位選在01234567的情況。 我把它貼出來吧。

switch (num_we) //控制每一次位選的數碼管顯示

上面ledcode 是段選表 wecode 是位選表 。 num_we是位選標誌,表示選到了第幾個數碼管。

然後在除錯差不多掃描幾回為1秒,每到了一定的回數,個位數字就+1,個位數字到10,個位清零,十位+1,,以此類推。

14樓:絕種好風

那得看你的數碼管是怎麼接的,其實重要的是51微控制器定時器的使用,兩個,t0和t1,隨便選一個,就行了,只是提醒下,

51微控制器控制數碼管並顯示,51微控制器控制8個數碼管並顯示

啟巖 數碼管段選連線到微控制器p0口,位選連線到p2口org 0000h main call display ajmp main display mov r0,0 mov r1,0x01 mov dptr,tab loop inc r0 mov a,r0 movc a,a dptr mov p0,0...

關於51微控制器定時器的問題,關於51微控制器使用兩個定時器進行控制的問題

工作方式1是16位的自動重灌定時計數器,能裝的最大數為65536 0 65535 那麼初值為65536 50000 15536 0x3cb0 就是你說的50ms溢位一次 12m的晶振,一個時鐘週期剛好1us,50000us 50ms 如果你需要1秒的定時,可以在定時器計數器中斷裡設一個計數變數x,進...

51微控制器定時器初始值的問題,51微控制器定時器初值公式

從本質上看,你根本不瞭解定時器的工作,你就只看 又豈能看懂。51微控制器的定時器0是16位,當然,這個模式是可以改變的。我就假設工作在16位模式下,因為大部分時候,也工作在這個模式下。16位的定時器,但只能用微控制器是8位的,所以,就拆分成了兩個位元組,高八位和低八位。th0表示定時器0的高八位,t...