51單片機之數(shù)碼管靜態(tài)顯示,鎖存器的使用

八段數(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);  //別切換太快了
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容