1樓:
是掃描頻率太低了,人眼能夠分辨出來,所以只看到一位數字在顯示。你試試把主程式delay(50000);的時間改短一點,慢慢除錯,總能成功的。
2樓:匿名使用者
很容易,首先假如我們有6位數碼管,每位數碼管需要8個段選1個公共選通端, 那麼6位數碼管自然是8位端選訊號 6位選通訊號(分別選通1-6其中的一個數碼管)
#define smg_wei p0 //p1.0 -p1.5 分別驅動數碼管選通
#define smg_duan p1 //p1.0 -p1.7接數碼管8個段選
unsigned char smgcode= //對應數碼管0-9的值,實際根據段訊號確定
void delay(unsigned long w)
void display(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的數碼管需要顯示的數字
void main()}
數碼管動態顯示原理 (如何讓數碼管的動態掃描慢一點)
3樓:匿名使用者
不用中斷也可:
1,初始化
2,顯示第一位
3,延時(2ms)
4,顯示第二位
5,延時(2ms)
6,顯示第三位
7,延時(2ms)
8,顯示第四位
9,延時(2ms)
10,增加數字(這裡設定一個暫存器加1,只有計數到1000顯示數值才增加,這樣就是4秒顯示數值增加1)
11,跳轉到第2步
4樓:
我覺得位選不要一起開啟。
延時加的太長了,超過人眼視覺停留時間,燈才會閃的。
5樓:匿名使用者
掃描在定時中斷內執行,秒脈衝可以用軟體延時,也可以用定時中斷產生,最好用定時中斷,儘量少佔用cpu的資源。
6樓:匿名使用者
//簡單的寫一個,自己參考一下
#include
#define uchar unsigned char#define uint unsigned intsbit k1 = p1^0;
sbit k2 = p1^1;
sbit k3 = p1^2;
sbit k4 = p1^3;
uchar a,b,c,d;
uint e;
uchar code tab_num = ;//共陽數碼管void delay(uchar k) //延時函式
;if(c>9);
if(b>9);
if(a>9);
}void main()}
51微控制器數碼管怎樣才能同時在兩個數碼管上面顯示不同的數字??
7樓:小丑魚啦
是因為人眼的視覺暫留效應,實際上兩個數碼管是交替顯示的,但是因為交替的速度十分快,所以會有因為視覺暫留效應而看到兩個數碼管都是同時現實的。
視覺暫留現象即視覺暫停現象(persistence of vision,visual staying phenomenon,duration of vision)又稱「餘暉效應」,2023年由英國倫敦大學教授皮特.馬克.羅葛特在他的研究報告《移動物體的視覺暫留現象》中最先提出。
人眼在觀察景物時,光訊號傳入大腦神經,需經過一段短暫的時間,光的作用結束後,視覺形象並不立即消失,這種殘留的視覺稱「後像」,視覺的這一現象則被稱為「視覺暫留」。
8樓:匿名使用者
如果是2個及以上的smg,是不會用你的放法的。使用數碼管都是用動態顯示實現的。
人能方便的頻率是50hz,你只要保證單個現實的時間在20ms一下就可以了。
你要現實2個數碼管,線點亮第一個數碼管,然後點亮第二個數碼管。
9樓:益力多2號
利用人眼的視覺暫留,先寫第一個數碼管的數字,再寫第二個數碼管, 只要兩個數碼管動態顯示快,人眼就可以看成同時顯示。
51微控制器,數碼管動態顯示,不影響其它程式
10樓:做而論道
動態顯示程式,必須不停的、反覆的呼叫。
稍有停頓,就只能看見最後顯示的一位字元。
解決方法,可以參考我以前回答的問題:
11樓:匿名使用者
就在主程式裡反覆呼叫 改變變化數字,用暫存最好 要改變的時候改變暫存就可以了 不影響其他程式 如果閃就可以改變顯示子程式的延時子程式時間
12樓:匿名使用者
動態掃描程式放定時器中斷裡面做,nms進一中斷。
數碼管動態掃描顯示,出現問題,請大神幫助一下。 5
13樓:匿名使用者
你這**圖是跟誰學的,誰教你的,數碼管的公共端加限流電阻的,這種**電路,不論程式怎麼寫,數碼管都不會正常顯示的。要加限流電阻,要加在七段控制端。其實**圖不用加限流電阻的。
那p0口要加一個排電阻,你那數碼管是共陽的,還是共陰的?
把你的程式發上來看一下。結論,**圖有問題,程式沒有看到,不知道怎樣。
14樓:做而論道
加上消隱部分,試試看。
關於proteus**數碼管,動態掃描時有的數字不能顯示問題!
15樓:水知餘心
遇到相同的問題,我是這樣解決的:
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()
下面是效果圖:
16樓:匿名使用者
首先你要確定,你的程式是否對,這個可以在相應的地方設定斷點來幫助你。
如果程式沒太大的問題,可能是你的每個數碼管顯示的延時時間不夠,至少要延時1-2ms,也不能太長,延時時間太長的話顯示會出現閃爍。這個問題其實也是軟體問題。
還有一點,proteus的**實際上是動畫,每秒20-50幀(可設定),因此有時程式正確,顯示卻有點問題(如你所說的問題),此時可以適當修改動畫的幀速:在「系統」的選單的倒數第三項就是。
17樓:匿名使用者
我也遇到和你一摸一樣的問題,去掉兩個八位鎖存器之後就是正常,不知道,你有沒有解決這個問題呢
數碼管動態顯示和靜態顯示哪個更穩定?我想用微控制器驅動數碼管,動態掃描是不是會有閃爍
用74ls164的帶鎖存的靜態顯示?靜待顯示不是由74ls164決定的 當你想使用2個數碼管分別顯示不同內容時,而且這兩個數碼管的位選埠還是一樣的時候,你就不得不進行動態掃描了。準確來說,肯定是靜態顯示好,原因你也知道。不過,調好時序的話,就不會有閃爍出現 胖大海君 1數碼管動態顯示 和靜態顯示 哪...
微控制器驅動數碼管顯示問題,51微控制器數碼管顯示問題
引腳夠的話,直接p0口接個位的數碼管,p2口接十位數碼管,引腳不夠就兩個數碼管掃描顯示,用一暫存器存計數值,然後設一無限迴圈不斷讀暫存器值七段譯碼輸出就可以了,然後計數端接在中斷上,有計數就進中斷 51微控制器數碼管顯示問題 大草原黃花菜 等於零顯示,然後置一關掉,再顯示下一位吧 鎖存器吧。關掉後。...
使用組合語言,如何實現鍵盤控制數碼管顯示程式?如何對應鍵盤值在數碼管輸出相應的數值
line equ 30h row equ 31h val equ 32h org 00h start mov dptr,table 段碼錶首地址mov p2,00h 數碼管顯示初始化lscan mov p3,0f0h 列線置高電平,行線置高電平 l1 jnb p3.0,l2 逐行掃描lcall de...