基于51單片機(jī)控制的數(shù)字氣壓計(jì)設(shè)計(jì)與實(shí)現(xiàn)
圖3
3.3 單片機(jī)
本氣壓計(jì)實(shí)現(xiàn)方案需使用單片機(jī)的P1口和P3口的一部分以及一個(gè)中斷源、一個(gè)定時(shí)器和一個(gè)計(jì)數(shù)器。因此,筆者選用了ATMEL的AT89C2051單片機(jī),該器件與89C51兼容,具有2kB的可重復(fù)編程閃存,2.7V~6V的工作電壓范圍,128Byte的內(nèi)部RAM以及兩個(gè)I/O口(P1,P3)、2個(gè)16位的計(jì)數(shù)器/定時(shí)器和6個(gè)中斷源,并可直接驅(qū)動LED輸出,同時(shí)帶有可編程的串行通訊口。另外,該單片機(jī)還具有體積小,價(jià)格低等特點(diǎn)。
3.4 LED顯示
單個(gè)LED是由7段發(fā)光二極管構(gòu)成的顯示單元。有10個(gè)引腳,對應(yīng)于7個(gè)段、一個(gè)小數(shù)點(diǎn)和兩個(gè)公共端。在顯示電路中,這些發(fā)光二極管有兩種接法:共陽極接法和共陰極接法。本設(shè)計(jì)中需要用4個(gè)LED組成顯示單元,并采用動態(tài)顯示方式。由于使用4個(gè)單個(gè)LED進(jìn)行顯示的連線比較復(fù)雜,同時(shí)單片機(jī)的端口驅(qū)動能力也難以保證,而需要加入專門的驅(qū)動芯片。所以,筆者采用了4個(gè)LED連體的、內(nèi)部已將其相應(yīng)段接好的共陽極LED,它具有12個(gè)引腳,含7個(gè)段和4個(gè)公共端,為提高數(shù)碼管的亮度,可在位選線上加入一個(gè)三極管驅(qū)動電路。
由AT89C2051控制的顯示電路如圖3所示。該顯示電路需要選取合適的電阻R和Ra,才能保證LED的亮度,過大或者過小都無法讓LED正常顯示。設(shè)計(jì)時(shí)?。覟椋矗罚毽?Ra為510Ω比較理想。若考慮印制板布線的方便,可以采用貼片電阻和排阻來節(jié)省空間。另外,也可以用74LS244和74LS06構(gòu)成驅(qū)動顯示電路,但這樣同樣要加限流電阻。因?yàn)椋罚矗蹋樱埃妒情_漏器件,需要在輸出處加上拉電阻。
4 軟件實(shí)現(xiàn)
通過以上設(shè)計(jì),便可通過fo來計(jì)算P的大小以得到實(shí)時(shí)的氣壓值。硬件電路設(shè)計(jì)完成之后,可使用AEDK5196PH仿真器的仿真環(huán)境進(jìn)行仿真,并可用C51語言來編寫處理程序。其基本程序流程如圖4所示。
程序設(shè)定:T0為定時(shí)器,基本的定時(shí)時(shí)基為50ms。T1為計(jì)數(shù)器,運(yùn)用內(nèi)部中斷0可保證T0定時(shí)滿500 ms后就讀取此時(shí)計(jì)數(shù)器的值,以計(jì)算氣壓值。如使T1、T0均工作于方式1,并在P1口送字型碼,同時(shí)可用P3.0~P3.3做位選線,那么,其相應(yīng)的函數(shù)如下:
(1)定時(shí)器T0中斷函數(shù):
void timer0(void) interrupt 1 using 1
{uint x, y;
uint count_ pluse;
ET0=0; //關(guān)閉T/C0中斷
Tcount++; //中斷次數(shù)
if?Tcount == 10){
TR1=0; //停止計(jì)數(shù)器計(jì)數(shù)
Tcount=0;
x=TH1;
y=TL1;
count_pulse=(x*256+y)*2;
ph=(uint)(10 * ((float)(count pulse+1520)/105.9? ?? //計(jì)算氣壓值
TH1 = 0x00; //重設(shè)計(jì)數(shù)初值
TL1=0x00;
}
TH0 = -50000/256; //重設(shè)50ms初值
TL0 = -50000%256;
if(TL0!= 0) TH0--;
ET0=1;
TR1=1;
return;
}
脈沖點(diǎn)火器相關(guān)文章:脈沖點(diǎn)火器原理
評論