51 數碼管動態顯示 李園7舍 404

2021-06-16 09:17:03 字數 1979 閱讀 1277

首先根據位選與段選理念(數碼管靜態顯示一文)編寫程式去控制不同數碼管顯示不同的數字。根據程式控制需要,在除錯程式的過程中明白需要了解我們所要的控制物件(數碼管)的一些特性。由於我自己擁有的這個微控制器非常的簡單,只有四個數碼管。我的目標是

基於前一篇「數碼管靜態顯示」,我以相同的控制訊號理念去編寫程式。發現不能達到預期的目標。為了達到相應的目標,我需要了解控制物件的輸入訊號特性,再進一步修改程式。

1.我的微控制器上面的數碼管是共陰極的,所需的位選訊號為低(0)時相應的數碼管被選中,反之被關閉。

2.數碼管的編碼

不同電路,數碼管的編碼可能不同。共陰極和共陽極的數碼管編碼也可能不同。對與我所擁有的微控制器上面的共陰極數碼管的編碼規律如下

數碼管用二進位制來和數碼管內發光二級管一一對應:1 1 1 1  1 1 1 1dp g f e d c b a

當對應的二進位制為為高時相應的發光二級管被點亮,顯示的數字由被點亮的發光二級管組成。如當二進位制數為0 0 0 0 0 1 1 0是數碼管顯示數字1.其中dp表示小數點的顯示。

擁有了上述知識後我們就可以編寫(修改)程式來實現目標了。

#include#define	uchar 	unsigned char

#define uint unsigned int

//位選陣列

sbit p20=p2^0;

sbit p21=p2^1;

sbit p22=p2^2;

sbit p23=p2^3;

//加給位選陣列的訊號

uint p2_ninfo = ;

//數碼管段選編碼陣列

uchar code d0_n = ;

//自定義函式宣告

void deaytime(int deaytime);

void main()

}//自動以函式

//使這段**的執行時間為xms

void deaytime(int deaytime)

電路圖:

(1)對應於了解到的第乙個知識點,我們用低電平選中數碼管cs4。根據第二個知識點使被選中的數碼管顯示數字1.

(2)保持這個狀態0.5s(相應知識點在

,第乙個for迴圈的初始數值為多少就會延遲多少ms)。

(3)延遲相應的時間之後使顯示此數字的數碼管關閉(對應位選訊號為真)。

(4)為下乙個數碼管進行相應的設定。

以上程式執行的結果是cs4數碼管顯示1,0.5s後cs3數碼管顯示2, 0.5s後cs4數碼管顯示1......當做到這一步的時候,同理可得後面的數字3,和4的顯示,即可達到最開始的目標。

(1)學習的過程分階段,後乙個階段了解知識的程度要比前乙個階段深。需繼續深入。

(2)在對4個數碼管數字顯示程式設計之前,有對此目標進行過設計,但是微控制器的擴充套件資料型別sbit不支援定義陣列變數,這讓我很惱火,原本乙個while迴圈就可以完成的事情,需要分步來實現(每次位選都需要獨佔幾行**),不過還好數量不多,作為練習,多敲幾行**也沒關係

(3)晶元上面的引腳「編號」對應的二進位制數是一一對應的,如上圖中的d0 d1 ...d7,d0對應二進位制數的最低位,d1對應二進位制的次低位,依次後退。

(4)共陰極數碼管

位選:    高電平   數碼管不被選中,           低電平  數碼管被選中

段選:   高電平   二極體亮,                        低電平   二極體熄

(5)電路中的鎖存器可以記憶先前的狀態,指導狀態被新輸入訊號覆蓋

51 靜態和動態顯示數碼管

include reg52.h typedef unsigned int u16 typedef unsigned char u8 sbit lsa p2 2 sbit lsb p2 3 sbit lsc p2 4 u8 code smgduan 17 0 f void delay u16 i vo...

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的陰極都接起來,這不就是共陰嘛,然後你想要點亮數碼管的某一段,就把...