51微控制器學習筆記2 動態數碼管的使用

2021-10-09 18:59:48 字數 2191 閱讀 7048

74hc138解碼器

輸出端y0-y7(微控制器原理圖中的led1-led8)受控於三個輸入端a0~a2(p22 p23 p24)

a0 a1 a2相當於表示了乙個三位二進位制數,a0是最低位,a2是最高位,且對應的ya2

a1a0

y_ya

2​a1

​a0​

​呈現低電平(有效電平)

數碼管公共端 -> 位選線

連在一起的段線 -> 段選線

通過控制在不同位選線 不同的段選線通電(段選資料不同)以達到在不同位置顯示不同數字的目的

具體看微控制器原理圖即可

動態顯示其實乙個時刻只點亮乙個數字,在24ms內點亮下乙個就會看成是同時亮的

首先是一段轉碼用的

u8 code smgduan[17]

=;//最高位為小數點,如果需要點亮小數點只需 | (0x80)或是 | 128

然後是顯示用的函式

#include

typedef

unsigned

int u16;

typedef

unsigned

char u8;

sbit lsa = p2^2;

sbit lsb = p2^3;

sbit lsc = p2^4;

u8 code ddnum[17]

=;void

delay

(u16 k)

//k=1 -> 10us

void

dig_display

(u8 i, u8 num, u8 dot)

//ith num from right to left, the num to be displayed, whether to light the dot

if(dot)

p0=(ddnum[num]

|128);

else

p0=ddnum[num]

;delay

(100);

p0=0x00

;}

顯示乙個日期的示例程式(以1926.08.17為例)

#include

typedef

unsigned

int u16;

typedef

unsigned

char u8;

sbit lsa = p2^2;

sbit lsb = p2^3;

sbit lsc = p2^4;

u8 code ddnum[17]

=;void

delay

(u16 k)

//k=1 -> 10us

void

dig_display

(u8 i, u8 num, u8 dot)

//ith num from right to left, the num to be displayed, whether to light the dot

if(dot)

p0=(ddnum[num]

|128);

else

p0=ddnum[num]

;delay

(100);

p0=0x00;}

void

main()

}

一旦理解了還是挺容易的,主要是搞明白哪個口在什麼情況下呈現什麼電

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 ...

51微控制器數碼管詳解

led數碼管是由多個發光二極體封裝在一起組成 8 字型的器件,引線已在內部連線完成,只需引出它們的各個筆劃,公共電極。led數碼管常用的段數一般為7段,有的另加乙個小數點 led數碼管根據led的接法不同,分為共陽和共陰兩類 1.共陽極數碼管 指八段數碼管的八段發光二極體的陽極 正極 都連在一起,而...

51微控制器攻略 數碼管

使用前先明確數碼管是共陰極接法還是共陽極接法,若是共陰極接法,定義char型按位控制其輸出 共陽極與下圖相反 工作方式分為靜態顯示和動態顯示,靜態顯示數碼管必須段選接八位資料線保持字碼。下圖是共陽極數碼管,通過we控制段,p0控制位,四個數碼管共占用12個i o口,若使用74hc573等鎖存器可簡化...