14 動態數碼管的使用

2021-10-02 21:10:55 字數 4533 閱讀 2529

工作原理:

動態顯示的特點是將所有的位數碼管的段選線併聯在一起,由位選線控制是哪一位數碼管有效。這樣一來,就沒有必要每一位數碼管配乙個鎖存器,從而大大簡化了硬體電路。選亮數碼管採用動態掃瞄顯示。所謂動態掃瞄顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的餘暉和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。動態顯示的亮度比靜態要差一點。

前四個數碼管分別顯示1234的程式:

#include

void

delayms

(int ms)

;void

main

(void)}

void

delayms

(int ms)

數碼管99秒倒計時程式:

#include

unsigned

char tab=

;unsigned

char num=99;

unsigned

int i=0;

void

delayms

(int ms)

;void

main

(void)

p2=0xc0

;//開啟數碼管位選537鎖存器

p0=0x01

;//選中第乙個數碼管

p2=0xe0

;//開啟數碼管段選537鎖存器

p0=tab[num/10]

;//數碼管顯示十位的數字

delayms(1

);p2=

0xc0

;//開啟數碼管位選537鎖存器

p0=0x02

;//選中第二個數碼管

p2=0xe0

;//開啟數碼管段選537鎖存器

p0=tab[num%10]

;//數碼管顯示個位的數字

delayms(1

);}}

void

delayms

(int ms)

數碼管99秒倒計時程式,用定時器延遲。

#include

unsigned

char tab=

;unsigned

char num=99;

unsigned

char tt=0;

void

delayms

(int ms)

;void

timer0init

(void);

void

main

(void)}

void

delayms

(int ms)

void

timer0init

(void

)//5毫秒@11.0592mhz

void

timer0

(void

) interrupt 1

}

此程式實現了用定時器0來進行數碼管計時間隔1s的延時,而掃瞄的1ms仍使用了軟體延時。

大致思路:我們可以看到原來的程式是在主函式中,計數迴圈次數,迴圈500次即1s,操作使num自減,而此程式是在定時器中定時1s,定時到了num自減。其核心思想都是使num每1s自減1。

數碼管99秒倒計時程式,呼叫子函式(第一種方法)

#include

unsigned

char num=99;

unsigned

char tab=

;unsigned

int i=0;

unsigned

char yi,er;

void

display

(unsigned

char yi,

unsigned

char er)

;void

delayms

(int ms)

;void

main

(void

) yi=num/10;

er=num%10;

display

(yi,er);}

}void

delayms

(int ms)

void

display

(unsigned

char one,

unsigned

char two)

數碼管99秒倒計時程式,呼叫子函式(第二種方法)

#include

unsigned

char num=99;

unsigned

char tab=

;unsigned

int i=0;

void

display

(unsigned

char sum)

;void

delayms

(int ms)

;void

main

(void

)display

(num);}

}void

delayms

(int ms)

void

display

(unsigned

char sum)

8個數碼管的程式,前2位仍然99秒倒計時,其他位依次為345678

//8個數碼管的程式,讓前兩位仍然99秒倒計時,其他位分別顯示345678

#include

unsigned

char num=99;

unsigned

char tab=

;unsigned

int i=0;

unsigned

char yi,er,san,si,wu,liu,qi,ba;

void

delayms

(int ms)

;void

display1

(unsigned

char yi,

unsigned

char er)

;void

display2

(unsigned

char san,

unsigned

char si)

;void

display3

(unsigned

char wu,

unsigned

char liu)

;void

display4

(unsigned

char qi,

unsigned

char ba)

;void

main

(void

) yi=num/10;

er=num%10;

san=

3;si=

4;wu=

5;liu=

6;qi=

7;ba=8;

display1

(yi,er)

;display2

(san,si)

;display3

(wu,liu)

;display4

(qi,ba);}

}void

delayms

(int ms)

void

display1

(unsigned

char yi,

unsigned

char er)

void

display2

(unsigned

char san,

unsigned

char si)

void

display3

(unsigned

char wu,

unsigned

char liu)

void

display4

(unsigned

char qi,

unsigned

char ba)

由上可知,想要哪一位顯示哪乙個值,即可在主函式中相應的對變數賦值,例如:想要第三個顯示8,即san=8(也可以為乙個可求出值的表示式,如上程式中yi=num/10)

:通過觀察我們可以發現,主函式和子函式中均有yi,er,san…它們是否衝突是否會被認為是重複定義?實則不然,在c語言中變數分為整體變數和區域性變數,且區域性變數優先於整體變數,也就是當我們在子函式和主函式中都定義了yi,那麼在子函式過程中,yi遵循的是子函式的定義,而主函式對它的定義在子函式中是無效的。當然,在僅有主函式定義而沒有子函式定義時,即便它在子函式中,也一定遵循主函式的定義,為整體變數。

FPGA動態掃瞄數碼管

功能 用兩個數碼管顯示0 99的數,每隔一秒加1。由於數碼管的段選段是連在一起的,要想兩個數碼管顯示不一樣的值,就必須動態地掃瞄數碼管。因為人眼地時間解析度是20ms,只要掃瞄數碼管地的週期小於20ms,就可以使用殘影讓數碼管顯示數值,給人的感覺就是數碼管同時顯示了兩個數字。使用到的模組 1.查詢表...

51微控制器 數碼管動態顯示 數碼管鬼影

以郭天祥微控制器為例 wei 指 位 位鎖存 duan 指 段 段鎖存 不好的方式 duan 1 開鎖存 p0 0x45 duan 0 關鎖存好的方式 p0 0x45 duan 1 開鎖存 duan 0 關鎖存p0 0x45 wei 1 wei 0 p0 0x45 duan 1 duan 0 p0 ...

1 數碼管動態顯示

1.數碼管介紹 數碼管其實就是相當於由8個led燈拼成的 當然,有些是7段,你看有些數碼管是不是沒有右下角那個點 那麼數碼管有分共陰跟共陽數碼管 大家都知道 led有兩個極,也就是陰極和陽極。數碼管共陰,也就是把所有組成數碼管的led的陰極都接起來,這不就是共陰嘛,然後你想要點亮數碼管的某一段,就把...