【藍橋杯-單片機設計與開發】3.定時器實現數碼管顯示


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;
	

}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM