八段數(shù)碼管顯示原理
八段數(shù)碼管由8顆LED組成,根據(jù)LED的接法,數(shù)碼管可分為共陰極和共陽極
共陰極是指每一顆LED的陰極都接在低電平0V上
共陽極是指每一顆LED的陽極都接在高電平5V上
對于共陰極數(shù)碼管,單片機“控制”LED的陽極。想要謀顆LED亮,單片機就應該給對應LED的支路送高電平。

對于共陽極數(shù)碼管,單片機“控制”LED的陰極。想要謀顆LED亮,單片機就應該給對應LED的支路送低電平。

鎖存器的使用
為什么要用鎖存器?你想,一個數(shù)碼管就對應8個IO口。但是如果要用好多個數(shù)碼管呢?單片機的引腳根本不夠用。
先放上原理圖(相同的標號代表是連在一起的,即電位相同。如紅色圈中的D0電位都是相同的)

P27高電位,鎖存器的“鎖”打開,新數(shù)據(jù)傳進去

P27低電位,鎖存器的“鎖”鎖住,新數(shù)據(jù)傳不進去,依然輸出舊的數(shù)據(jù)

下面的芯片使用方法相同
位選,段選
比如要第三個數(shù)碼管的a段亮起來
位選WE3=0,段選A=1,就能形成如圖回路

如果位選WE3=1,WE4=0,段選A=1,就能形成如圖回路

#include <reg52.h>
sbit DU = P2^6; //數(shù)碼管段選
sbit WE = P2^7; //數(shù)碼管位選
void delay(unsigned int z)
{
unsigned int x, y;
for(x = z; x > 0; x--)
for(y = 114; y >0; y--);
}
//第一個數(shù)碼管顯示1
void main()
{
P0 = 0xff; //1111 1111不選擇任何一個數(shù)碼管
WE = 1; //打開位選
P0 = 0XFE; //1111 1110 即WE1 = 0
WE = 0; //鎖住位選數(shù)據(jù),即保持1111 1110
//這樣之后單片機P0數(shù)據(jù)的改變不會影響位選數(shù)據(jù)
DU = 1; //打開段選
P0 = 0x06; //這里雖然改變了P0,但不影響位選,因為位選關閉了。
DU = 0; //鎖住段選數(shù)據(jù)
delay(5); //別切換太快了
}