51微控制器入門之五:數碼管顯示(動態)
本文旨在介紹微控制器入門的基礎知識,為初接觸或即將接觸單片的新手提供一個入門指導。本文章會陸續推出,隔幾天一個章節。所使用微控制器為ATMEL公司的AT89C52,軟體為PROTEUS和KEIL;只提供原理圖和KEIL環境下的註釋,希望對廣大即將接觸微控制器的人有所幫助,如果有錯誤歡迎回帖指出或加入QQ群143586739. 微信公眾號:micropoint8.
微控制器輕鬆入門之五數碼管的動態顯示
上次說了數碼管的靜態顯示,這次介紹動態顯示。動態顯示是每隔一段很小的時間依次點亮一個數碼管,再利用人視覺的暫留效應,從而看起來數碼管顯示是連續的。相對而言,動態顯示的電路、程式稍微複雜,但是可以節約微控制器的介面資源。動態顯示涉及位選和段選。位選就是選通顯示的數碼管,段選就是控制該片數碼管所要顯示的內容。
本次實驗讓4片數碼管顯示“1234”,實驗中用到了74LS373鎖存器。
實驗原理圖如下:
實驗程式如下:
#include<reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit du=P2^0; //位定義段選端
sbit we=P2^1; //位定義位選端
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段選資料表
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位選資料表
uchar i,j,z;
uint numd,numw;
void delay(z) //延時子函式
{
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void display() //顯示子程式
{
P0=tabledu[numd]; //控制段顯示
delay(10);
du=1; //開啟段選訊號
du=0; //鎖存訊號
P0=tablewe[numw]; //控制位選
delay(10);
we=1; //開啟位選訊號
we=0; //鎖存訊號
numd++; //段選自加
if(numd==5)
numd=1;
numw++; //位選自加
if(numw==4)
numw=0;
}
void main()
{
numd=1;
numw=0;
while(1)
{
display(); //呼叫顯示子程式
delay(30);
}
}
試驗結果圖:
模擬軟體在截圖時,老顯示不全,所以圖片上無法看出連續顯示。但是在實驗板上效果很好。
更多電子知識請關注微信公眾號: