1. 程式人生 > >51單片機的初了解(12)

51單片機的初了解(12)

span 多個 16px nbsp abc 硬件 ++ 端口 換工作

動態數碼管:段碼一側仍接一個單片機端口,COM(共級)接單片機一個IO口,多個聯排數碼管的COM共同接一個IO端口。

靜態和動態數碼管的本質區別:靜態數碼管只給段碼數碼管就一定工作(只取決於段碼端),動態數碼管需段碼值及COM端配合。

動態數碼管工作:

(1)某一特定時間段,只有一個數碼管工作,其他不工作。

(2)COM端選定哪一數碼管工作,段碼端輸出顯示的數字段碼;延時;COM端選下一個,段碼端改輸這要顯示的數字段碼;延時;......

(3)快速切換工作的數碼管,人看到的是所有數碼管都亮(亮度比靜態驅動低)。

(4)動態數碼管利用人眼的視覺暫留。

動態數碼管的段碼表顯示:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

#include <reg51.h>

void delay(void)

{

unsigned char i,j;

  for(i=0;i<10;i++)

    for(j=0;j<10;j++);

}

unsigned char duanma[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char weima[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void main (void)

{

while(1)

  {

    unsigned char i=0;

    for(i=0;i<8;i++)

    {

      P2=weima[i]; //依次選擇數碼管1-8

      P0=duanma[i+1]; //依次顯示1-8

      delay ();

      P0=0x00; //消隱

    }

  }

}

38譯碼器:由3個二進制進行編碼的硬件設備。

作用:用3個IO口來控制8路輸出

驅動數碼管意義:用3路輸入來控制數碼管的8路位碼,省5個IO口。

連接方式:J15和J16連接;ABC分別接P1.0、P1.1、P1.2三個。

#include <reg51.h>

void delay(void)

{

unsigned char i;

  for(i=0;i<200;i++);

}

unsigned char duanma[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char weima[8]={0,1,2,3,4,5,6,7};

void main (void)

{

while(1)

  {

    unsigned char i=0;

    for(i=0;i<8;i++)

    {

      P1=weima[i]; //依次選擇數碼管1-8

      P0=duanma[i+3]; //依次顯示1-8

      delay ();

      P0=0x00; //消隱

    }

  }

}

51單片機的初了解(12)