51單片機的初了解(12)
動態數碼管:段碼一側仍接一個單片機端口,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)