數碼管動態閃爍不能正常顯示,是重新整理時間的問題嗎?程式感覺沒有錯誤啊求幫助

2021-03-22 05:27:30 字數 4093 閱讀 7365

1樓:夏小睿

語句「| flash」應該改為"& flash",還有就是在每一句的delay(2);後增加"p0 = 0;"另外delay可以增加到10毫秒

2樓:nice藍波波

數碼管動態顯示掃描頻率2oohz就夠了,共陽極數碼管的共陽極藉口看看有沒有譯碼器

數碼管動態顯示總是會閃爍,無論怎麼延時,請問怎麼處理?

3樓:做而論道

參考一下這個題目:

數碼管動態顯示不穩定怎麼辦?

4樓:

1、延時問題

2、數碼管位選沒有關斷

3、沒有共地

4、其他、、、自己多調一下就差不多了,可能的原因很多。。。。

5樓:向少年拉飛馳

必須是延時函式的問題。

慢慢調。 3ms左右 。

數碼管動態顯示不停閃爍 5

6樓:匿名使用者

這要看你中斷接受資料時,中斷的頻度了,是不是中斷過於頻繁了,且頻率過高,中斷程式又過長了,執行中斷的時間比較長。

不要在中斷程式中處理過多的資料,要及時從中斷返回,需要處理資料要回到主程式來處理。

問一句,是**,還是實物。

**的話,因受電腦速度的影響,會有這種現象。

實物,是什麼微控制器?

7樓:做而論道

中斷程式,寫的太邋遢。

數碼管動態顯示問題,為什麼顯示不穩定,而且延時有問題?

8樓:做而論道

改一改:

for(i = 0; i < 2; ++i)增加了消隱環節,試試看。

----

另外,延時函式中的:

for(t = 121; t > 0; t++);

應該是 t-- 吧?

關於proteus**數碼管,動態掃描時有的數字不能顯示問題!

9樓:水知餘心

遇到相同的問題,我是這樣解決的:

1、在位選和段選開啟之前先賦值

2、新增延時

以下是我的程式(顯示數字19930309),僅供參考,先截圖修改的部分,貼上來的**排版不行,不知道為啥:

#include

#define uint  unsigned int#define uchar unsigned charsbit we = p2^7;

sbit du = p2^6;

void delay(uint z)

uchar code leddata=;

void main()

下面是效果圖:

10樓:匿名使用者

首先你要確定,你的程式是否對,這個可以在相應的地方設定斷點來幫助你。

如果程式沒太大的問題,可能是你的每個數碼管顯示的延時時間不夠,至少要延時1-2ms,也不能太長,延時時間太長的話顯示會出現閃爍。這個問題其實也是軟體問題。

還有一點,proteus的**實際上是動畫,每秒20-50幀(可設定),因此有時程式正確,顯示卻有點問題(如你所說的問題),此時可以適當修改動畫的幀速:在「系統」的選單的倒數第三項就是。

11樓:匿名使用者

我也遇到和你一摸一樣的問題,去掉兩個八位鎖存器之後就是正常,不知道,你有沒有解決這個問題呢

數碼管動態顯示

12樓:匿名使用者

我先來幫你分析一下這個程式:

(1)到(4)的功能是由p0口給出數碼管的段碼。我猜想在p0口和數碼管的段碼線之間是一個鎖存器,這樣能夠保證當p0口的資料變化之後,數碼管的數字不變化。這時,數碼管不能顯示相應數字,因為位碼線還沒有被選中。

(5)到(8)的功能是由p0口給出數碼管的位碼。這時位碼線被選中,在段碼和位碼的同時作用下,數碼管被啟用,顯示shi對應的數字。

然後延時delay(5);

執行到時(10),由於p0給出了ge的段碼,而位碼還沒改變,這時候當然要在第一個數碼管上顯示第二個數碼管的內容。

執行到(14),位碼改變,第二個數碼管被選中,這時段碼和位碼共同作用,第二個數碼管顯示ge所對應的數字。

然後延時。

由於第一個數碼管顯示ge的時間很短,只有不到十個機器週期,而正常顯示的時間很長,這個時間是delay(5),所以看不出ge曾經在第一個數碼管上經過,所以看上去顯示效果是對的。

這也就是為什麼要加延時程式(8)和(16)。如果不加的話,第一個數碼管會快速的在ge和shi之間進行「切換」,最後的結果是數碼管一顯示8,而數碼管二正常顯示,你可以試一下。

因此回答如下:

問題一:延時程式的目的是為了掩蓋數碼管一上的「切換」,給你的眼睛「錯覺」。

問題二:沒有講究,是鎖存器的鎖存特性造成的,延時程式很好解決了這一問題。

樓上的回答很不準確,我不贊同。即使把13.14.15和9.10.11換一下,如果不加延時程式,問題同樣存在,只不過成了數字shi經過數碼管二而已。

郭天祥講的時候,程式不是現成的,是當時現場寫的,出現錯誤也是正常的。

13樓:匿名使用者

郭天祥的書吧?

問題1:我覺得延時其實可以不加,你可以嘗試一下不加延時,效果應該一樣的,他加了延時主要是讓你能明白動態顯示的原理,之前延時是比較長的,所以感覺有閃爍,現在延時短了,就不閃爍了

問題2:執行到10的時候,1顯示的是2的資料,是因為這個時候,位選選中的還是數碼管1,而位選發出的已經是2的資料了,所以1顯示的還是2的資料,後面位選選中了2,資料就到2上了,這個應該沒什麼講究,你可以把13.14.

15和9.10.11換一下,效果應該是一樣的,這樣單步執行的時候,資料也沒有問題了。

以上,希望對你有幫助。

14樓:匿名使用者

1.數碼管的編碼有沒有錯誤!數碼管分為共陰極和共陽極。

2.你這個程式count1是秒鐘,count2是分鐘。

display(count1/10,count1%10,count2/10,count2%10);對於display(秒的十位,秒的個位,分的十位,分的個位)好像不是對應(分十位,分個位,秒十位,秒個位)。

3.unsigned char code bit_tab=;//片選中的0xfd是選中p3.1不是p3.5,所以有一位數碼管不亮是正常的。

4.你所說的亂碼是什麼意思?數字不對還是不顯示數字?

15樓:匿名使用者

位選之後再段選,肯定會在該顯示1的地方突然顯示2了,然後有瞬間正常顯示,沒法避免,郭天祥的程式里加了一個對p0清零,只加在了段選後,是因為段選只針對一個數碼管,而位選是對好幾個數碼管,影響比較大,其實位選後p0口的資料對之後的段選也是有影響的,和你提的問題影響一樣,只是這兩個問題都能用延時的方法解決,或者看不出來,所以就忽略了,單步執行肯定會不合理,但高速下就沒問題了,就像現在的電燈泡,其實都是一閃一閃的,50hz,只是頻率比較高,看不出來,其實沒有完美,只有看起來很好

關於微控制器,誰可以幫我解決下,如果程式執行時間過長導致6個數碼管顯示閃爍,怎麼樣用中斷重新整理啊!

16樓:匿名使用者

可以把顯示程式放在定時中斷裡面

17樓:琪羅琳

這種情況我還沒有遇到過,我也是經常使用很長時間的。其實使用中斷重新整理很好掌握的。和原來的一樣,只是用到了中斷中

數碼管動態顯示時,位掃描間隔時間是多少

18樓:匿名使用者

先廢話一下:掃描頻率太低數碼管會出現閃爍的現象,頻率太高則亮度不夠甚至無法看清,所以一般掃描間隔多為幾毫秒。

一般間隔1ms就差不多了,如果不夠亮可以適當地增大間隔時間,不會有影響。但是,有一點需要注意,從點亮第一支數碼管到最後一隻數碼管被點亮,整個過程最好不要超過20ms,一旦超過則會出現閃爍的現象。

另外,點亮一隻數碼管後,在點亮第二支數碼管之前需要先關斷第一支數碼管,否則會出現顯示混亂的情況。

請教有關proteus數碼管動態顯示問題

proteus數碼管動態顯示問題,具體是什麼問題,說清楚啦。proteus 動態顯示時數碼管一閃一閃的,不穩定。數碼管動態顯示,每個管間的延時時間以1 2ms為宜,如果是這個範圍,顯示是 版不會出現閃的權。但是,你在proteus 時,由於你的電腦速度或者你的 內容比較複雜,計算機的 的執行時間長實...

微控制器動態數碼管顯示的餘暉問題微控制器動態數碼管顯示的餘暉問題

建議你把掃描的程式放在中斷中處理,而把計算b1 b6的內容放在主迴圈中處理。餘暉的問題,我感覺是掃描過程中,你延時控制的不一致引起的。幫你改了下程式,你試試 include include intrins.h define uchar unsigned char define uint unsign...

這是共陽極數碼管顯示吧,如果是共陰極數碼管,程式應該怎麼改呢?我改了總是出錯

直接將共陽極數 來碼管換成共源陰極.是不行的。比如二極體,連線方向改變後肯定不能工作了。但是,如果將共陽極數碼管錯買成了共陰極的 如果腳位和驅動筆畫是一樣的話,還是可以用的。改動如下 1 將共陽訊號改為共陰訊號 2 將原來所有驅動訊號都反一次相。不能正常工作的,如果是靜態顯示的話你需要做兩件事 1硬...