微控制器做數碼管的動態顯示,消影消不掉,怎麼回事?求指教

2021-03-07 06:21:52 字數 4245 閱讀 8689

1樓:匿名使用者

#include//  供參考

#define uchar unsigned char

#define uint unsigned int

uchar code table[18]=;

uchar num,miao,miaoge,miaoshi,feng,fengge,fengshi,shi,shishi,shige;

sbit second=p3^3;

sbit minuate=p3^4;

sbit hour=p3^5;

/***延時***/

void delay(uint x)    //延時xms  晶振頻率12mhz

/***中斷初始化***/

void start()                              //初始化函式

/***顯示函式***/

void display()

/***設定時間***/

timeupdown()

}if(minuate==0)              //分設定

}if(hour==0)                 //時設定}}

/***主函式***/

void main()

}/***t0***/

void t0_time() interrupt 1

if(miao==60)

if(feng==60)

if(shi==24)

shige=shi%10;

shishi=shi/10;

fengge=feng%10;

fengshi=feng/10;

miaoge=miao%10;

miaoshi=miao/10;}

2樓:匿名使用者

1、先檢視一下每位的顯示時間,不能太短了,至少在1ms,否則就會出現重影。

2、因輸出段碼和位碼的時間差過長了,調整一下程式,儘量做到輸出段碼和輸出位碼的兩條指令緊跟著,中間不要加其他指令。也可以在輸出新的段碼之前,輸出位碼斷開所有的顯示,然後再輸出新的段碼,緊跟著再輸出對應的位碼。

3樓:匿名使用者

更新顯示時,

1. 請先消除原有顯示

2. 設定新的顯示內容

如果有問題,就調整1.的時間,或是掃瞄頻率

4樓:匿名使用者

要是明顯閃爍就把頻率調快,要是重影了就調慢。

89c52微控制器無論在做動態數碼管的掃描時,無論怎樣消影,都有一定的重影,這是怎麼回事?

5樓:匿名使用者

1.顯示前先將所有數碼管熄滅,然後再顯示。

2.除了顯示數碼外,其他時間都是熄滅的。

3.檢查是否存在交替顯示不同數字。

4.掃描速度要足夠快。

6樓:匿名使用者

應該是你延時時間太短所致,兩個段碼之間的延時時間大於3毫秒就應該沒有重影了。

51微控制器中在編寫數碼管動態顯示時,書上是這樣做的: 開啟段選,送段選資料,關閉段選,消影,開啟位

7樓:匿名使用者

按照你的順序來說,輸出下一位數字時是會在上一位的數碼管上顯示一會兒的,因為你先開啟內的是段選。所以容在送下一位段選訊號時,位選仍然保持在上一位數碼管那裡,但是由於程式執行很快,所以你只看到上一位數碼管會隱隱約約的顯示下一位數字;由於顯示正確資料加了延時,使得正確的顯示時間比較長,所以你看到會很清晰,而下一位的資料雖然也加了進來,但顯示時間很短(約1us,視晶振頻率而定),所以你會看到數碼管會隱約顯示下一位的數字。這也就是為什麼加延時的原因,延時之後,正確的數字顯示時間長一點,顯示就會清晰一點;如果你沒有延時,那麼數碼管顯示就會比較暗,而且你會發現顯示出來的數字有點亂。

8樓:浮華落盡

書上講的不好,我的做法是 關閉位選,送入資料,開啟相應位選, 另外,我的程式中,如果不是遇到通訊需要延時外,我從來不會去加延時函式

9樓:花茶茶

先弄清楚什麼是位選什麼是段選再說。

10樓:匿名使用者

沒錯呀!位選不開啟數碼管上是不會顯示資料的,延時是為了讓你看到顯示的資料,要不你看到的就是好幾個重疊的顯示了!延時時間依據視覺停留,要大於它!

11樓:匿名使用者

不會亂,開啟段選,埠為上一次的位選資料,然而埠馬上陪被賦予新的短選資料,這時你的位選還沒開啟,所以不會亂

12樓:匿名使用者

微控制器讀程式的速度是很快的,不延時的話是看到兩個數字一起顯示

微控制器數碼管動態顯示浪費資源怎麼辦

13樓:匿名使用者

你的問題挺常見的 多集中在新手

咱們算一下

數碼管要掃描 每秒100趟 不低了吧? 4個要400次

鍵盤的值我們每20ms查一下io口的狀態 也就可以了

實際算一下啊就算一次數碼管要50條指令 按鍵要100條指令(其實沒這麼多) 每秒不過才22000個指令 如果12m晶振 那麼 每秒微控制器可以跑1000000條指令

這兩個任務的cpu才佔用了2.2%!!!!

那麼你為什麼時間不夠呢 因為你把cpu全耗在無謂的延時上了

其實是這樣的 這兩個掃描程式 不要放在主程式 放在定時器中斷裡面 到一定時間 自動執行 而不是讓cpu乾耗著等著時間到來

比如你把定時時間長度設定為2.5ms 正好可以掃數碼管 再把這個長度累計8次 就是20ms 正好掃描鍵盤(這個累計是軟體實現的 這就兩個事情只用了一個定時器)

那麼他們之間怎麼溝通呢 就是用全域性變數 主程式只負責協調這些全域性變數 其他時間完全可以幹別的

我說的已經非常非常詳細了 希望能酌情給多點分 謝謝

14樓:匿名使用者

完全可以。

你把數碼管顯示的程式放在定時器中斷裡,每中斷一次只點亮一位數碼管,然後下一次中斷時點亮下一個數碼管……就這樣,在主程式中只需要一次修改顯示的資料即可,不用死迴圈加延時的方法來顯示。

15樓:a糖炒栗子

把顯示放在中斷裡面?純粹扯淡! 這個問題很好解決 把需要迴圈執行的程式都放到while(1)裡面 比如:

while(1)

這樣就可以了。

16樓:機上操作

放在中斷應該是比較好的選擇。

數碼管動態顯示的時候不該亮的地方也亮了,比該亮的地方暗一點,是怎麼回事???

17樓:高山入雲

原因是你你沒有加上「消影」。

解釋:當你顯示第一個數碼管,這時段碼和位碼都是開啟的,當顯示完第一個數碼管,由於段碼連在一起,沒有關閉段碼,這時開啟第二位位碼,在交替的瞬間第二個數碼管上就顯示第一個的數字,於是就出現第一位的暗影,假如第一位是2,第二位是1,這樣顯示1的數字不該亮的部分出現了2的暗亮,如果多個數碼管掃描的快,顯示的數字又都不同,那麼所有不該亮的地方都亮了。

解決的辦法是,在開啟下一個數碼管之前,送一個數碼管全熄滅的資料,即可。

18樓:匿名使用者

在每一個位選後面加一個消影,如:

是p2 口做輸出,數碼管共陰,p0.0是斷選訊號時mov p2,#00h

setb p0.0

clr p0.0

加了消影亮度會減小很多。。。。自己慢慢調延時吧。。。

19樓:匿名使用者

你把延時設對了,就可以了!不過也有其他問題(包括你的上拉電阻,自己測一下硬體電路,測完就剩軟體了)

微控制器數碼管動態顯示程式最後一位很亮是怎麼回事?

20樓:

因為在有參呼叫中,程式開頭有一些計算過程,例如計算要顯示的每一位數值,要佔用較長的時間,動態掃描到最後一個數碼管後重新迴圈時再次計算程式開頭的計算過程,這段時間都是最後一個數碼管在顯示,所以最後一個數碼管顯示時間較其他數碼管長,比較亮。或者是在主程式中,display()前有一段**要執行,佔用較長時間,效果和前面講的相同。

21樓:k放縱

可以把最後一位數碼管先讓它顯示再設為熄滅 使用延時函式設定適合的時間就可以了

22樓:匿名使用者

你把延時設對了,就可以了!不過也有其他問題(包括你的上拉電阻,自己測一下硬體電路,測完就剩軟體了)

微控制器用餘暉效應實現數碼管的動態顯示計時器

1.數碼管顯復示,是利用制 人眼的視覺暫留效應。不足餘輝,白熾燈斷電後還亮一會,才是餘輝,這可是有區別的,不可混淆。2.這是利用定時器t0定時1ms來實現數碼管動態顯示的。用查詢法,1ms到顯示一位,實現你說的間隔1ms顯示。3.數碼管的位控是用譯碼器74ls138的。4.雖然是書上的程式,但現在的...

c52微控制器數碼管動態顯示問題程式如圖,總提示語句shi shi temp 100 10存在系統錯誤,求大神解答

朋友,錯誤不在那一行,是上一行,少了個分號啊!細心一點。還有儘量不要用拼音來做變數名。英語不會就去查。修改一個51微控制器c語言程式問題,要求實現數碼管燈動態閃爍 數碼管的動態顯示原理沒搞懂。只要一個if語句就夠了,先顯十位,再顯各位。利用人眼的視覺暫留效應實現動態顯示。你的tr0 1只執行一次啊。...

51微控制器中在編寫數碼管動態顯示時,書上是這樣做的 開啟段選,送段選資料,關閉段選,消影,開啟位

按照你的順序來說,輸出下一位數字時是會在上一位的數碼管上顯示一會兒的,因為你先開啟內的是段選。所以容在送下一位段選訊號時,位選仍然保持在上一位數碼管那裡,但是由於程式執行很快,所以你只看到上一位數碼管會隱隱約約的顯示下一位數字 由於顯示正確資料加了延時,使得正確的顯示時間比較長,所以你看到會很清晰,...