1. 程式人生 > >51微控制器入門之五:數碼管顯示(動態)

51微控制器入門之五:數碼管顯示(動態)

本文旨在介紹微控制器入門的基礎知識,為初接觸或即將接觸單片的新手提供一個入門指導。本文章會陸續推出,隔幾天一個章節。所使用微控制器為ATMEL公司的AT89C52,軟體為PROTEUS和KEIL;只提供原理圖和KEIL環境下的註釋,希望對廣大即將接觸微控制器的人有所幫助,如果有錯誤歡迎回帖指出或加入QQ143586739. 微信公眾號: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);

   }

}

試驗結果圖:

模擬軟體在截圖時,老顯示不全,所以圖片上無法看出連續顯示。但是在實驗板上效果很好。


更多電子知識請關注微信公眾號: