微控制器C程式疑問,數碼管鎖存器靜態顯示

2022-11-21 23:37:04 字數 3915 閱讀 9721

1樓:匿名使用者

這個程式是很正常的,你的疑是多餘的。上電後i/o為高電平,沒錯,p1=0xfe,是段選碼(不是位選碼),這時的位選鎖存器(wela)確實也是加0xfe,但卻不會鎖存下來,而是由於dula=0; 0xfe被鎖存在段選鎖存器內,對位選鎖存器毫無影響。接下來,又有p1=0x7f,又送入位選鎖存器,這時,wela=0; 這才真正被鎖存到位選鎖存器內。

所以,段選碼和位選碼都是正確的。

2樓:範璇夏詩蕾

這個就是數碼管的動態重新整理問題,你直接將要顯示的數的對應數碼管值從你的p1口輸出,然後選擇1或者2來顯示,再做個幾毫秒的延時,再將下一個要顯示的數的對應數碼管值從你的p1口輸出,然後選擇2或者1來顯示,再做個幾毫秒的延時,迴圈這個過程就行了。當然數碼管的1、2也要接到微控制器的輸出口上,才能選擇,而且還要考慮你的數碼管是共陰還是共陽的接法,這樣才能正確的選擇p1口的輸出電平和1、2兩個介面的輸入電平

3樓:匿名使用者

你的dula 和wela弄反了,dula送的是數碼管顯示的內容,wela是哪個數碼管亮。

至於你說的復位後,微控制器各個io口所輸出高電平,你再看一下i/o定義吧,準雙向。

微控制器彙編程式:led數碼管靜態顯示問題

4樓:

顯示8,是因為你程式跑飛了,加上延時,自然是延時後跑飛,所以顯示8。靜態顯示不需特殊的延時。想要一直顯示就寫個死迴圈就程式停住就可以了,ret是子程式呼叫的返回,你這裡不用加。

5樓:匿名使用者

靜態顯示不需要延時,動態顯示一定要有延時。

程式修改如下:

org 0000h

ljmp main

org 0030h

main:

clr p2.1

mov p0,#06h

sjmp $end

6樓:

你的程式沒有結束,程式會一直執行下去。應該加一條ajmp $。

那個延時程式是個子程式,應該用acall呼叫,直接進入子程式,ret不知道返回到**

51微控制器共陰數碼管利用靜態顯示,讓六個數碼管顯示1~6,程式怎麼寫? 10

7樓:匿名使用者

沒有原理圖,bai只好虛du擬一個了,假設p0作為zhi段選,p2作為位dao選,且由373作為鎖存器內,來控制靜容態數碼管的顯示,因為是靜態顯示,所以不需要掃描和延時。

#include

#define uchar unsigned char;

uchar distab=;

main()

8樓:匿名使用者

#include

unsigned char code table[6]=; //1~6

void delay(unsigned int i)void main(void)}}

上面那個程式有錯for(i=0;i>5;i++),這內是錯容的

9樓:匿名使用者

還是動態掃描嗎?

靜態能輸出這麼多碼位碼。除非用電阻搭出各管的段選。

在微控制器系統中什麼情況下用靜態顯示 什麼情況下用動態顯示

10樓:

主要是看來

你的顯示位數和系源統的要求,顯示位數起bai主要因素du.

比如:如果你的系統只有一位數碼管

zhi,那麼肯定是靜態顯示dao,如果是兩位及以上,為了節省資源,一般用動態顯示.因為驅動1位數碼管需要至少7個io口,如果兩位的你還用靜態顯示,那麼就要14個io口,同理,更多的位則更多的io口,而微控制器的io口實在有限,所以多位,一般用動態.

有一個特殊方法,就是外加晶片和電路,比如用多片74hc595或者74hc373,也可以利用少量的io口實現靜態顯示,這樣雖然沒有佔用太多io口資源,但是佔用了晶片,因為你一個靜態顯示就要用一個晶片來配合,從成本上,電路上都不合算.

所以動態顯示可以節約硬體資源而以軟體來實現,靜態顯示則消耗了硬體,節省了軟體的開消.

11樓:匿名使用者

靜態顯示,一個數碼管就需要一個鎖存器,如果是8位數碼管,要用8片鎖存器,你內能這麼用容嗎?所以,只有1,2個很少的數碼管時,才用靜態顯示。其實,這不過就是講個原理罷了,告訴你還有這麼一種顯示方式,你願意用就用。

但實際上,即很少有人這麼用。

那麼不適合用靜態顯示的情況下,就得用動態顯示了,也就是數碼管數量比較多的情況。

還是以8位數碼管為例,動態顯示只需要2片鎖存器就行了。比靜態少用6個。如果數碼管再多呢,16個,用靜態顯示會怎麼樣?

12樓:匿名使用者

顯示穩定且對成本要求低 io資源較多 用靜態顯示

io資源緊缺 且對成本要求很高 就用動態顯示(省資源)

13樓:匿名使用者

顯示的數位不是很多時,用靜態顯示,因為**簡單, 因為聯線太多,

顯示的段碼較多時,就用動態顯示,**相對要複雜點,不過聯線少,可靠度高,方便設計走線

14樓:匿名使用者

i/o硬體資源問題 靜態資源比較浪費

微控制器上8個數碼管這樣是讓他迴圈顯示,怎樣讓它靜態顯示呢?

15樓:匿名使用者

你沒上電路圖,但通過軟體可以看出硬體設計本身就是動態顯示方式,任何時刻只能顯示一個數碼管。如果要改為靜態顯示,必須更改電路,使得每個數碼管的段選訊號獨立,位選可以根據數碼管特徵恆定接高或接地,這樣才能保證同時顯示所有的數碼管。

16樓:煙火夜空

/**52微控制器,12mhz晶振,8位共陰數碼管,p0口段選,p2口低電平位選,p20最高位,p27最低位**/

#include

#define uchar unsigned char

#define uint unsigned int

#define true 1

#define false 0

#define th0 0xfe

#define tl0 0x0c //500us at 12mhz(定時器工作模式1 狀態)

#define distimeat500uscount 5 //單'位'數碼管顯示時間,數碼管重新整理頻率f=1/(4t),其中 t 為單'位'數碼管顯示時間,單位 s,頻率f 單位 hz

#define seg_num 8 //數碼管位數

uchar code loveyoulist[seg_num]=;//love-you

#define seg_data p0 //數碼管段驅動介面

#define seg_en p2 //數碼管位驅動介面

#define seg_alloff seg_en=0xff //關閉所有數碼管(位驅動)

bit displayflag; //顯示標誌位

void timer0() interrupt 1 //定時器0中斷函式

void systeminit() //系統初始化函式

void display() //顯示函式

void main() //主函式}}

很多設定好的引數可以在 巨集定義的時候修改,包括數碼管位數、數碼管重新整理率等,如果lz的晶振不是12mhz,那麼只需要將巨集定義中 th0,tl0的初值修改正常即可,如24mhz,就改成fc18,總體效果我沒實物測試,看lz造化了。

17樓:匿名使用者

多數碼管顯示有兩種方法:靜態顯示和動態顯示。

你這只是一個一個顯示。動態是你這種方式快速的迴圈,每一個只亮一會,當速度很快後人眼就看不出來了。

靜態顯示是需要硬體電路的,需要給你個數碼管配一個鎖存器,這樣就不用微控制器掃了,把需要顯示的數存入鎖存器就不用管了,數碼管是一直亮的。

求數碼管顯示的溫控電動機51微控制器C程式

軟體設計 有兩個檔案,ds18b20.c和ds18b20.h,將這兩個檔案新增到工程裡即可。ds18b20.c 程式名稱 ds18b20溫度測量 報警系統 簡要說明 ds18b20溫度計,溫度測量範圍0 99.9攝氏度 可設定上限報警溫度 下限報警溫度 即高於上限值或者低於下限值時蜂鳴器報警 預設上...

求一微控制器測溫度,共陰極數碼管顯示的程式,急急急望大神幫忙

光用分求程式是求不來的 求一個簡易的用微控制器做溫度計 兩個數碼管顯示 的程式 可以參考這個 例項,試試。可以用ds18b20作為溫度感測器進行開發。你好!是 還是用的實物 如何在微控制器中實時顯示溫度 那還不容易嗎?用一個溫度感測器實時測量溫度,同時用數碼管或lcd顯示出來就行了嗎。你是想用實物做...

如何利用微控制器讓4位數碼管顯示

程式如下 用的是stc89c52晶片 include 52系列微控制器標頭檔案 define uchar unsigned char define uint unsigned int uint x,y uchar code table 共陰極數碼管編碼 void display uchar,ucha...