1.顯示原理:
(1)靜態顯示
靜態顯示方式是指當顯示器顯示某一字符時,發光二極管的位選始終被選中。在這種顯示方式下,每一個LED數碼管顯示器都需要一個8位的輸出口進行控制。采用這種方法的缺點是,采用的IO口較多,因為單片機的IO口資源有限,通常需要擴展IO口。
(2)動態顯示
動態顯示的特點是將所有位數碼管的段選線並聯在一起,由位選線控制是哪一位數碼管有效,選亮數碼管采用動態掃描顯示。
所謂動態掃描顯示即利用發光二極管的余輝和人眼視覺暫留作用,使人感覺好像各位數碼管同時都在顯示。不過動態顯示的亮度要比靜態顯示要差一些,不過問題不大。
2.定時器實現數碼管動態掃描
延時方法實現動態顯示,在延時過程中單片機不能執行其他任務,只能等待,等到延時延時時間過去之后單片機才可以執行下一步任務。
采用定時器方法實現動態掃描則可以避免這種情況,定時器好比鬧鍾,設定時間到就會提醒一次,只要在提醒時進行數碼管掃描就可以了。
3.原理圖
4.共陽數碼管段碼表
/***********************************************************************
第一行是從0~9
第二行是從0~9帶“.”
第三行是 “-”和 滅
************************************************************************/
unsigned char code SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xbf,0xff};
5.代碼實現
unsigned char POS=0;
unsigned char smgdat[8]={21,21,21,21,21,21,21,21};
unsigned char code SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xbf,0xff};
void Timer2Init(void) //2毫秒@12.000MHz
{
AUXR |= 0x04; //定時器時鍾1T模式
T2L = 0x40; //設置定時初值
T2H = 0xA2; //設置定時初值
AUXR |= 0x10; //定時器2開始計時
/*后加的部分*/
EA=1;
IE2|=0x04;
}
void display(unsigned char pos,dat){
hc138(6);P0=0x01<<pos;P2&=0x1f;
hc138(7);P0=dat; P2&=0x1f;
}
void T2_Display()interrupt 12
{
hc138(6);P0=0x00;
display(POS,SMG[smgdat[POS]]);
if(++POS==8)POS=0;
}