梁建華
(臨汾職業(yè)技術(shù)學(xué)院,山西 臨汾 041000)
隨著電子技術(shù)的發(fā)展,各類高精度測(cè)量?jī)x表隨之誕生.在電子產(chǎn)品運(yùn)用與維修時(shí),電壓的測(cè)量是一項(xiàng)常規(guī)性操作,通常使用電壓表或萬(wàn)用表來(lái)進(jìn)行測(cè)量,而它們均為指針式儀表,測(cè)量時(shí)因檔位選擇不當(dāng)、擺放位置不同及讀數(shù)姿勢(shì)等因素都會(huì)造成讀數(shù)不準(zhǔn)確,測(cè)量精確度不高,不能滿足數(shù)字智能化時(shí)代的要求.文中提出的數(shù)字電壓系統(tǒng)以單片機(jī)AT89C51為主控器,通過(guò)A/D轉(zhuǎn)換電路將模擬量轉(zhuǎn)換為數(shù)字量,由LCD顯示電路顯示測(cè)量結(jié)果,具有操作方便,精度高,抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)及集成方便等優(yōu)點(diǎn),在智能化測(cè)量領(lǐng)域具有良好應(yīng)用前景.
該系統(tǒng)采用模塊化設(shè)計(jì)方法,以單片機(jī)為主控器,LCD顯示電路及A/D轉(zhuǎn)換電路組成數(shù)字電壓表控制系統(tǒng),通過(guò)可調(diào)電位器調(diào)節(jié)電壓表來(lái)模擬電壓的輸入,經(jīng)AT89C51單片機(jī)控制電路完成對(duì)外圍硬件控制及運(yùn)算,然后進(jìn)行A/D轉(zhuǎn)換[1]出數(shù)字量,即為輸出電壓值,最后由LCD顯示.
數(shù)字電壓系統(tǒng)電路有主控模塊電路、LCD顯示模塊電路及A/D轉(zhuǎn)換模塊電路組成,其接口電路原理圖如下:
圖1 數(shù)字電壓系統(tǒng)接口電路原理
該主控模塊電路由AT89C51控制器、電源電路、復(fù)位電路及時(shí)鐘電路組成單片機(jī)的最小系統(tǒng),采用電源電壓為5 V,選用振蕩器頻率為11.0592 MHz的石英晶體,通過(guò)按鍵電平復(fù)位方式進(jìn)行復(fù)位操作.
顯示模塊電路選用LCD1602[2]字符型模塊,內(nèi)部控制器為日立公司生產(chǎn)的HD44780,可用來(lái)顯示數(shù)字及字符.其外部引腳一般有16條,8條數(shù)據(jù)線 D0-D7與單片機(jī)P0口相連,3條控制線RS、RW、E分別與單片機(jī)P2.0、P2.1和P2.2相連.
A/D轉(zhuǎn)換模塊由A/D芯片和可調(diào)電位器組成,A/D芯片選用TLC549芯片,共有8個(gè)引腳(4、8引腳為接地和電源輸入,2腳AIN連接可調(diào)電位器RP2的滑動(dòng)端,1腳REF(+)、3腳REF(-)為參考電壓輸入分別接+5 V電源及地端,5腳CS為片選信號(hào)與單片機(jī)的RD引腳相連,7腳I/O CLK為時(shí)鐘信號(hào)與單片機(jī)的T1引腳相連,6腳DOUT為轉(zhuǎn)換后的串行數(shù)據(jù)輸出與單片機(jī)的WR引腳相連),其具有8位轉(zhuǎn)換結(jié)果、用CMOS技術(shù)、差分基準(zhǔn)電壓輸入、低功耗及5 V供電范圍等特點(diǎn).
通過(guò)可調(diào)電位器RP2改變電壓輸出值在0~5 V內(nèi)連續(xù)變化,從而可以模擬模擬量的變化.依據(jù)A/D轉(zhuǎn)換芯片工作時(shí)序,利用定時(shí)器0定時(shí)5 ms,設(shè)置計(jì)數(shù)器累計(jì)4次,定時(shí)器0產(chǎn)生中斷,也就是20 ms進(jìn)行一次A/D采樣轉(zhuǎn)換,然后調(diào)用A/D轉(zhuǎn)換值函數(shù)將值轉(zhuǎn)換為對(duì)應(yīng)的ASCII值,最后通過(guò)LCD顯示A/D轉(zhuǎn)換值函數(shù)把轉(zhuǎn)換的數(shù)字量顯示在LCD1602上,顯示范圍為0~255.
數(shù)字電壓表系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表1所示:
表1 數(shù)字電壓表系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)
3.3.1 主函數(shù)設(shè)計(jì)
主函數(shù)模塊主要完成硬件初始化、定時(shí)器[4]初值計(jì)算、定時(shí)器設(shè)置及函數(shù)調(diào)用等功能,其程序如下:
void main()
{
keytime=4;
InitLcd();
SendCommandByte(0x80);
Delay(2);
SendDataByte(‘A’);
SendDataByte(‘B’);
SendDataByte(‘C’);
SendDataByte(‘:’);
TH0=0Xee;
TL0=0X00;
TMOD=0X01;
TR0=1;
IE=0X82;
while(1);
}
3.3.2 定時(shí)器0中斷服務(wù)函數(shù)設(shè)計(jì)
設(shè)置軟計(jì)數(shù)變量keytime為4,定時(shí)器T0定時(shí)5 ms后,進(jìn)入定時(shí)器T0中斷服務(wù)函數(shù),軟計(jì)數(shù)量keytime減1,當(dāng)keytime值為0時(shí)則表明20 ms時(shí)間已到并進(jìn)行采樣一次;否則T0中斷函數(shù)返回主函數(shù),繼續(xù)計(jì)時(shí).實(shí)現(xiàn)程序如下:
Void time0(void) interrupt 1
{
TH0=0xee;
TL0=0x00;
keytime--;
If(keytime==0)
{
read_549();
jsdpbl();
dispdpbl();
}
}
3.3.3 A/D采樣轉(zhuǎn)換函數(shù)設(shè)計(jì)
2)由于鉆井垂直度是順利下人套管柱的重要條件之一,所以為了保證井眼的垂直度,在鉆進(jìn)過(guò)程中采取了以下措施:
根據(jù)A/D轉(zhuǎn)換芯片TLC549的工作時(shí)序,要求片選信號(hào)CS置低電平,內(nèi)部電路在測(cè)得CS下降沿后,再等待兩個(gè)時(shí)內(nèi)部時(shí)鐘上升沿和一個(gè)下降沿后,才能進(jìn)行A/D轉(zhuǎn)換.其程序編碼如下:
void read_549(viod)
{
unsigned char i;
AD_CS=0;
adbl=0x00;
for(i=0;i<8;i++)
{
AD_CK=1;
adbl=adbl<<1;
if(AD_OUT==1)
adbl++;
AD_CK=0;
}
AD_CS=1;
}
3.3.4 A/D值轉(zhuǎn)換ASCII碼函數(shù)設(shè)計(jì)
若要在LCD上顯示A/D轉(zhuǎn)換值adbl,則需要把它轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼,其實(shí)現(xiàn)函數(shù)如下:
void jsdpbl(void)
{
ledbai=(adbl/100)|0x30;
ledshi=((adbl%100)/10)|0x30;
ledge=(adbl%10)|0x30;
}
3.3.5 LCD1602顯示函數(shù)設(shè)計(jì)
LCD顯示函數(shù)模塊包括LCD初始化函數(shù)、寫入指令數(shù)據(jù)到LCD函數(shù)、寫入顯示數(shù)據(jù)到LCD函數(shù)、LCD顯示A/D轉(zhuǎn)換值函數(shù)及延時(shí)函數(shù).
void InitLcd() //LCD初始化函數(shù)
{
SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x38);
SendCommandByte(0x08);
SendCommandByte(0x01);
SendCommandByte(0x06);
SendCommandByte(0x0c);
}
void SendCommandByte(unsigned char ch) //寫入指令數(shù)據(jù)到LCD函數(shù)
{
RS=0;
RW=0;
P0=ch;
E=1;
Delay(1);
E=0;
Delay(100);
}
void SendDataByte(unsigned char ch) //寫入顯示數(shù)據(jù)到LCD函數(shù)
{
RS=1;
RW=0;
P0=ch;
E=1;
Delay(1);
E=0;
Delay(100);
}
void dispbpbl(void) // LCD顯示A/D轉(zhuǎn)換值函數(shù)
{
SendCommandByte(0x85);
SendDataByte(ledbai);
SendDataByte(ledshi);
SendDataByte(ledge);
}
void Delay(unsigned int t) //延時(shí)函數(shù)40 μs
{for(;t!=0;t--);}
該控制數(shù)字電壓系統(tǒng)總體設(shè)計(jì)采用模塊化方法,分析各硬件電路,列出數(shù)據(jù)結(jié)構(gòu)表,設(shè)計(jì)出相應(yīng)的算法,并編寫出各模塊程序代碼,進(jìn)行統(tǒng)一調(diào)試,然后對(duì)比系統(tǒng)在不同模擬輸入量時(shí),通過(guò)LCD顯示輸出電壓值的情況,可達(dá)到預(yù)期效果.且它采用單片機(jī)控制,具有電路簡(jiǎn)單,精度高,可擴(kuò)展性強(qiáng)及集成方便等優(yōu)點(diǎn),它將在智能化測(cè)量領(lǐng)域發(fā)揮更大作用.