一、原理介紹
關於數碼管的控制電路,在《51單片機(八)》中有詳細的介紹,硬件電路如下圖所示。
在這個實驗中,我們對8位數碼管的一位進行控制,在進行實驗時,需要將單片機的P00~P07引腳與J44相連。接口的對應關係是(P00—D0),……,(P07—D7)。將單片機的P10和P11引腳與J45相連,P10與J45上的DM對應,P11與WM對應。
二、實例介紹
這個實驗的代碼如下所示
#include<reg52.h> //包含頭文件,一般情況不需要改動
#define DATA P0 //定義數據端口 程序中遇到DATA 則用P0口 替換
sbit DM = P1^0; //定義鎖存使能端口 段鎖存
sbit WM = P1^1; //定義鎖存使能端口 位鎖存
void main(void)
{
for(;;)
{
DATA=0xfe; //取位碼,第一位數碼管選通,即二進制1111 1110
WM=1; //位鎖存
WM=0;
DATA=0x7f; //取顯示數據,段碼 "8"
DM=1; //段鎖存
DM=0;
}
}
將代碼燒寫到單片機中,現象如下所示。
這個實驗使用兩個鎖存器來驅動發光二極管。控制數碼管的位碼和段碼都通過單片機的P0口輸出。U43用來輸出位碼,U42用來輸出段碼。
P0口首先輸出0xfe,WM=1;這個語句使U43輸出值爲0xfe,WM=0;這個語句使U43爲鎖存狀態。U43的輸出保持爲0xfe。0xfe轉換爲二進制爲1111 1110,這8個數值輸出給8位數碼管的共陰極。輸出爲1的位,由於陰極爲高電平,數碼管被關斷,輸出0的位,陰極爲低電平,數碼選通。因此數碼管的第一位選通,其它位關斷。
之後,P0口輸出0x7f,DM=1;這個語句使U42輸出值爲0x7f,DM=0;這個語句使U42爲鎖存狀態。U42的輸出保持爲0x7f。0x7f對應的二進制爲0111 1111,即數碼管的A、B、C、D、E、F、G段都爲高電平,因此A、B、C、D、E、F、G都可以點亮,顯示的是數值“8”,又由於只有第一位選通,因此最後的實驗現象是第一位顯示“8”。