51微控制器如何利用七段數碼管採用動態顯示顯示4位數字,如

2021-04-20 12:56:58 字數 6473 閱讀 7327

1樓:匿名使用者

//***************************************

//顯示函式 函式名:display56()

//***************************************

//變數定義:

unsigned char qian,bai,shi,ge; //定義顯示緩衝區

unsigned char table= ;

//表:共陽數碼管 0 1 2 3 4 5 6 7 8 9 c

//延時子函式,短暫延時

void delay56()

void display56()

你想顯示什麼,分別為qian,bai,shi ,ge

51微控制器如何利用4個七段數碼管採用動態顯示顯示4位數字,如2035? 5

2樓:匿名使用者

不停地利用人的視覺暫留,在乙個合適的速度下依次顯示1個2,1個0,1個3,1個5.

當顯示乙個「專2」的時候,其他三位都屬

是空的,以此類推。

但人眼是看不到短時間內這些變化的,假如這個行為不斷迴圈,那麼人看到的就是「2035」,而不是單個的數字。

比如說吧:

...p1=num[2];    //假設num[2]是0x5b,即"2"

p20=1;        //假設使能端是高有效,按實際情況來。

delay();      //延長50ms應該可以把,不能太長(過0.1秒就能看出來了),最好也不要太短

p1=num[0];

p21=1;

delay();...

3樓:大雨落幽燕白

依次在4個數碼管上顯示2035,快速重複即可。

幫忙看一下,51微控制器的4位數碼管動態顯示

4樓:匿名使用者

#include

void delay(unsigned int i);

unsigned char code disp_tab[16]=;

unsigned char code dispbit[4]=; // 高4位進行段選擇,每次選擇乙個數碼管

unsigned char disbuf[4];

void delayms(unsigned int ms)void led_disp()

}main()

5樓:飛雪流星

16 以前顯示的是 0 和 乙個數,如15 時顯示的是 0 和 f、14 時顯示的是 0 和 e。。。

16 時顯示的是 1 和 0 ,17 時顯示的是 1 和 1

disbuf[0]=(((firstdat&0xf0)>>4)&0x0f);

disbuf[1]=firstdat&0x0f;

disbuf[2]=(((seconddat&0xf0)>>4)&0x0f);

disbuf[3]=seconddat&0x0f;

這裡不用這麼麻煩吧,直接

disbuf[0]=firstdat>>4; 右移時,低四位被移出,高四位移入0,就是你要的結果了

disbuf[1]=firstdat&0x0f;

disbuf[2]=seconddat>>4;

disbuf[3]=seconddat&0x0f;

或者disbuf[0]=firstdat/16; 除以16 得到 16 進製的十位

disbuf[1]=firstdat%16; 對16取餘得到 16進製制的個位

disbuf[2]=seconddat/16;

disbuf[3]=seconddat%16;

就行了吧

我想應該不會出現沒消影的,不知道你說的消影是指什麼現象

6樓:匿名使用者

參考一下這個**例項的8位數碼管的動態顯示,試試

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

7樓:沈偉棟

程式如下(用的是stc89c52晶元):

#include//52系列微控制器標頭檔案

#define uchar unsigned char

#define uint unsigned int

uint x,y;

uchar code table=;//共陰極數碼管編碼

void display(uchar,uchar,uchar,uchar);//宣告子函式

void delay(int);//宣告子函式

void main()

}void display(uchar a,uchar b,uchar c,uchar d)

void delay(uint z)//延時子函式

擴充套件資料

led數碼管是由多個發光二極體封裝在一起組成「8」字型的器件,引線已在內部連線完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加乙個小數點,還有一種是類似於3位「+1」型。

位數有半位,1,2,3,4,5,6,8,10位等等,led數碼管根據led的接法不同分為共陰和共陽兩類,了解led的這些特性,對程式設計是很重要的,因為不同型別的數碼管,除了它們的硬體電路有差異外,程式設計方法也是不同的。

8樓:匿名使用者

;晶振:12mhz

;p2.0、p2.1、p2.2、p2.3接共陽數碼管的選通端,p0口接資料輸出端

cs0 bit p2.0 ;個位位選

cs1 bit p2.1 ;十位位選

cs2 bit p2.2 ;百位位選

cs3 bit p2.3 ;千位位選

dsw equ 30h ;位選計數

dsb0 equ 31h ;顯示緩衝單元個位dsb1 equ 32h ;顯示緩衝單元十位dsb2 equ 33h ;顯示緩衝單元百位dsb3 equ 34h ;顯示緩衝單元千位org 0000h

ljmp main

org 0030h

mov dsb0,#04h ;顯緩="1234"

mov dsb1,#03h

mov dsb2,#02h

mov dsb3,#01h

mov tmod,#01h ;方式1定時

mov th0,#0f0h ;4ms定時

mov tl0,#60h

setb tr0

mloop: jnb tf0,$ ;4ms到?

clr tf0 ;清定時標誌

mov th0,#0f0h ;4ms定時重設mov tl0,#60h

lcall disp

ajmp mloop

;====4位數碼管掃瞄子程式====

disp: orl p2,#1fh ;關閉數碼顯示器mov a,dsw ;根據掃瞄迴圈變數轉移anl a,#07h

rl a

mov dptr,#dstab

jmp @a+dptr

dstab: ajmp dis0

ajmp dis1

ajmp dis2

ajmp dis3

ajmp dis0 ;冗餘

ajmp dis0

ajmp dis0

ajmp dis0

dis0: mov a,dsb0 ;掃瞄個位數碼管anl a,#0fh

mov dptr,#led7 ;查顯緩個位值的七段碼表movc a,@a+dptr

mov p0,a ;七段碼送p0口

clr cs0 ;點亮個位數碼管

mov dsw,#01h ;掃瞄指標指向下十位retdis1: mov a,dsb1 ;掃瞄十位數碼管anl a,#0fh

mov dptr,#led7

movc a,@a+dptr

mov p0,a

clr cs1

mov dsw,#02h

retdis2: mov a,dsb2 ;掃瞄百位數碼管anl a,#0fh

mov dptr,#led7

movc a,@a+dptr

mov p0,a

clr cs2

mov dsw,#03h

retdis3: mov a,dsb3 ;掃瞄千位數碼管anl a,#0fh

mov dptr,#led7

movc a,@a+dptr

mov p0,a

clr cs3

mov dsw,#00h

ret;====led七段共陽段碼表====led7: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

db 80h,90h,88h,83h,86h,0a1h,86h,8eh

end希望可以幫助你。

9樓:匿名使用者

利用動態掃瞄讓四位數碼管穩定的顯示1234。

3.2 子情境目標:

(1)掌握微控制器控制四位數碼管的動態掃瞄技術,包括程式設計和電

路設計,本任務的效果是讓四位數碼管穩定的顯示1234。

(2)用proteus進行電路設計和實時**

3.3 知識點鏈結

(1)數碼管動態掃瞄 (動態掃瞄的定義以及與靜態顯示的區別)

動態顯示的特點是將所有位數碼管的段選線s一位數碼管有效。選亮數碼管採用動態掃瞄顯示。所謂動態掃瞄顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的餘輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。

(2)匯流排的應用

元器件與匯流排的連線

p0口的接線採用匯流排方式,詳細如圖5-17所示。

① 選擇匯流排按鈕

② 繪製匯流排:與普通電線的繪製方法一樣,選擇合適的起點、終點單擊。

如果終點在空白處,左鍵雙擊結束連線。

畫匯流排的時候為了和一般的導線區分,我們一般喜歡畫斜線來表示分支線。此時我們需要自己決定走線路徑,只需在想要拐點處單擊滑鼠左鍵即可。在畫斜線時,需要關閉線路自動路徑功能 才好繪製。

proteus的線路自動路徑功能簡稱war,當選中兩個連線點後,war將選擇乙個合適的路徑連線。war可通過使用標準工具欄裡的「war」命令按鈕 來關閉或開啟,也可以在選單欄的「tools」下找到這個圖示。

③ 給與匯流排連線的導線貼標籤part labels

與p0口相連的線標籤名依次為p00—p06,本電路中的p0口的上拉電阻通過匯流排與p0口相連,數碼管也是通過匯流排與p0口相連,這些都需要標註,以表明正確的電氣連線。單擊繪圖工具欄中的導線標籤按鈕 ,使之處於選中狀態。將滑鼠置於圖形編輯視窗的欲標標籤的導線上,跟著滑鼠的指標就會出現乙個「×」號,表明找到了可以標註的導線,單擊滑鼠左鍵,彈出編輯導線標籤視窗,如圖5-16所示。

在「string」欄中,輸入標籤名稱(如p00),單擊「ok」按鈕,結束對該導線的標籤標定。同理,可以標註其它導線的標籤,如圖5-16所示。

注意,在標定導線標籤的過程中,相互接通的導線必須標註相同的標籤名。

圖5-16編輯導線標籤視窗

3.4 任務步驟

3.4.1 步驟一:proteus電路設計,微控制器控制四位共陰極數碼管動態掃瞄顯示的原理圖如圖5-17所示。

圖5-17 四位共陰極數碼管動態掃瞄顯示的原理圖

1、選取元器件

①微控制器:at89c52

②帶公共端的排阻:respack-8

③四位共陰極數碼管:7seg-mpx4-cc

2、放置元器件、放置電源和地、連線、元器件屬性設定

數碼管動態掃瞄顯示的原理圖如圖5-17所示,整個電路設計操作都在isis平台中進行。

(1)帶公共端的排阻(respack-8)如圖5-18所示,在本電路中作為p0的

上拉電阻,在如圖5-19所示component value一欄中可更改阻值,例如本例中將阻值更改為200歐姆。

圖5-18排阻                           圖5-19排阻屬性框

至此,我們便完成了整個電路圖的繪製。

3.4.2 步驟二:源程式設計與目標**檔案生成

(1)程式流程圖

圖5-20 數碼管動態掃瞄的流程圖

(2)源程式設計

#include//52系列微控制器標頭檔案

#define uchar unsigned char

#define uint unsigned int

uint x,y;

uchar code table=;            //共陰極數碼管編碼

void display(uchar,uchar,uchar,uchar);  //宣告子函式

void delay(int);                      //宣告子函式

void main()

}void display(uchar a,uchar b,uchar c,uchar d)

void delay(uint z)                   //延時子函式

如何確定數碼管段碼表七段數碼管的段碼怎麼編輯呢?

確定數碼管段碼表方法如下 共陰 0 0x3f 1 0x06 2 0x5b 3 0x4f 4 0x66 5 0x6d 6 0x7d 7 0x07 8 0x7f 9 0x6f a 0x77 b 0x7c c 0x39 d 0x5e e 0x79 f 0x71 無顯示 0x00 只顯示一點 0x80 共陽...

PLC西門子s7 200七段數碼管如何顯示一串無序數字例如

可以利用計數器的輔助觸頭作為數位電路中計數器的脈衝訊號 然後將數字內電路中的計數容器與解碼器配合起來作為7段數碼管的輸入訊號 在配合驅動電路就可以了 方法好幾回發個好幾回v個吃醋你就把v吃非常v那句重新小時下次吧哈根達斯手抄報借記卡 網路1ld sm0.0 seg vb0,qb2 網路2ld sm0...

用微控制器控制8段數碼管,其迴圈顯示數字0到9,每位數字顯示時間為一秒,定時功能用微控制器中斷顯示

有乙個一模一樣的提問,好吧,俺再發布一次 給你乙份我自己寫的,利用四位數碼管顯示模擬時鐘的程式吧,供你研究 另外,再給你乙個一位數碼管的,是你要求的那種 這兩個都是利用微控制器的定時器中斷來產生秒訊號的 下面這個是 四位數碼管的,最下邊的是一位數碼管的,埠不一樣的話,自己改下 include sbi...