
如上圖所示:要讓一個(gè)四位數(shù)碼管能按要求顯示出自己需要的數(shù)據(jù).首先要知道數(shù)碼和的工作原理.在這例子里采用了共陽(yáng)數(shù)碼管(即:每位7段LED發(fā)光二極管的陽(yáng)極接到一起,如數(shù)碼管的第6、8、9、12腳.a-g這個(gè)幾引腳是數(shù)碼管的段位,如a接著4位的a段,到這里如還不是很清楚數(shù)碼管內(nèi)部結(jié)構(gòu)的自己去查下資料吧.
在了解數(shù)碼管之后對(duì)數(shù)碼管的驅(qū)動(dòng)就就得很簡(jiǎn)單了,如果我們需要DIG1顯示一個(gè)8字,我們可以拉低a-f引腳,然后讓K1輸出高電平,這樣DIG1就會(huì)顯示一個(gè)8字.如果我們要顯示4個(gè)8,那又什么操作呢?是不是將K1-K4都同時(shí)拉高就行了?當(dāng)然可以這樣操作,但通常不會(huì)這樣子去操作,因?yàn)闀?huì)有這樣情況,如果我們顯示的不是4個(gè)8,而是需要顯示“1234”這樣就不能同時(shí)接高K1-K4了.而是通過(guò)掃苗方式顯示,也就是說(shuō)按順序先讓第一位顯示1,第二位顯示2,第三位顯示3,第四位顯示4,注意:每時(shí)刻只有一位顯示,只要刷新夠快(大于40HZ)我們就不會(huì)看到有閃動(dòng)的感覺(jué).

上圖中,我們可以看出如果要數(shù)碼管顯示1,那么拉低b與c的引腳電平,由于a-f接于PB端口,我們可以向PB口寫(xiě)入“0xF9”采用同樣的方法我們可算出要顯示0-9時(shí)對(duì)應(yīng)的輸入數(shù)據(jù)為:
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
下面舉個(gè)實(shí)例
//數(shù)碼管顯示部分
unsigned char display_code[18]=
{
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x88,/*A*/
0x83,/*b*/
0xC6,/*C*/
0xA1,/*d*/
0x86,/*E*/
0x8E,/*F*/
0x8B,/*h*/
0xFF
};
unsigned char display_bit; //0-3 四位數(shù)碼管掃描.
unsigned char display_buffer[4]={8,7,6,5}; //顯示緩沖
void display_update(void)
{
PORTD &= 0xf0; //清除低四位
if((state&0x08)==0 && display_bit==1) //顯示小數(shù)位
PORTB=(display_code[display_buffer[display_bit]])&0x7f;
else
PORTB=display_code[display_buffer[display_bit]]; //更新顯示數(shù)據(jù).
PORTD |= (0x01<
if(display_bit>3)display_bit=0;
}
在例子中,只需要向顯示緩沖寫(xiě)入需要顯示的數(shù)值就可以了.