張玲麗(武漢職業技術學院 電子信息工程學院,湖北 武漢 430074)
基于單片機的LCD數字電流表的設計與實現
張玲麗
(武漢職業技術學院電子信息工程學院,湖北武漢 430074)
本文中數字電流表的控制系統采用AT89S51單片機,A/D轉換器采用ADC0809為主要硬件,實現數字電流表的硬件電路與軟件設計。該系統的數字電流表電路簡單,所用的元件較少,成本低,調節工作可實現自動化。數字電流表可以測量0~200 mA的8路輸入電流值,并在LCD液晶顯示屏上顯示出來。
單片機;數字電流表;A/D轉換器;液晶顯示屏
在現實中,根據測試系統的要求,往往需要采集被測對象的各種參數,如電壓、電流等,這些參數的采集是至關重要的,它們直接影響到整個測試系統的測試精度。在有些應用中,需要對電流進行檢測,必須先將其電流信號轉換為電壓信號,然后才能實現A/D轉換。常用的轉換方法是在電路中加入精密電阻,由此將電流信號轉換為電壓信號[1]。這種方法的優點是測量簡單方便,但是這種方法當電流很小時,從電阻上取得的電壓值可能很小,影響測量精度,因而很難選擇一個合適的阻值;其次,所得到的電流檢測信號只有通過放大以后才能進入電路中的比較器,從而增加了電路設計調試時的復雜度。因此,需要采用電流/電壓轉換芯片,并結合單片機以實現對電流信號的檢測。本文中采用精密電阻,克服了常規測量電流方法存在的測量范圍小、測量誤差大等缺點,可提高測量精度,同時采用單片機可實現自動檢測。
本設計旨在設計一款測量范圍在 0~200 mA、顯示精度在小數點前一位的基于 AT89S51單片機帶液晶顯示功能的電流表,經查閱多種相關資料,確定本設計的總體框圖如圖1所示。
圖1所示電路工作過程:將需要檢測的電流信號經過I/V變換變為電壓信號,將其輸出的電壓信號連接到ADC0809進行 A/D轉換,電壓信號經過采樣后,輸出到單片機,單片機控制中斷的過程以及數據的讀取過程,最后通過控制液晶顯示所讀取的數據。
1.1I/V變換電路部分
對本設計來說,由于精度要求并不高,故用有源 I/V即可滿足要求,有源 I/V變換是利用有源器件——運算放大器和電阻電容組成的,如圖2所示。

圖2 有源I/V變換
該有源I/V變換電路利用同相放大電路,把電阻R1上的輸入電壓變成標準輸出電壓。該同相放大電路的放大倍數為:

若取 R1=20 Ω,R2=100 kΩ,R3=100 kΩ,R4=25 kΩ,R5=10 kΩ,則當輸入電流為0~200 mA時,對應于0~5 V的電壓輸出。
1.2A/D轉換模塊
基于成本、功耗、分辨率、模擬電壓轉換范圍等因素,此處選擇ADC0809芯片。ADC0809與8051單片機的硬件接口有3種形式,分別是查詢方式、中斷方式和延時等待方式。A/D轉換后得到的數據應及時傳送給單片機進行處理。數據傳送的關鍵問題是如何確認A/D轉換的完成,因為只有確認完成后,才能進行傳送。在本設計中,選擇中斷方式,即把表明轉換完成的狀態信號(EOC)作為中斷請求信號,以中斷方式進行數據傳送。
1.3單片機模塊
該電流表可測量0~200 mA的直流電壓,通過電位器調節產生,顯示位數3位[2],工作電壓5 V。通過 A/D轉換芯片ADC0809把模擬信號轉換為數字量傳送到單片機的P3口,并在P2口把轉換的結果顯示出來。在仿真軟件 Protesus[3]里選擇元器件后連接電流表總圖,如圖3所示。
本設計選用的AT89S51是ATMEL公司推出的高性能8位微控制器,由于 ADC0809無片內時鐘,時鐘信號可由 AT89S51的 ALE信號經D觸發器二分頻后獲得。ALE引腳的脈沖頻率是8051時鐘頻率的1/6。本設計中單片機時鐘頻率采用6 MHz,則ALE輸出的頻率是1 MHz,二分頻后為500 kHz,符合ADC0809對頻率的要求。
1.4顯示部分

圖3 基于AT89S51的數字電流表電路圖
本電流表的顯示[4]選擇 LCDl602型 LCD,它具有電流小、功耗低、體積小、字跡清晰、美觀、方便、使用壽命長、無電磁輻射等優點。從圖 3中可看出其與 AT89S51 的P0口相連,其DO~D7為8位雙向數據線,VSS為地電源,VDD接 5 V正向電源,VEE為液晶顯示器對比度調整端,接正向電源時對比度最弱,而接地電源時對比度最高。該引腳通過一只1 kΩ的電位器來調整其對比度。RS為寄存器選擇引腳,RS為高電平時選用數據寄存器;RS為低電平時選用指令寄存器。RW為可讀寫信號引腳,RW高電平時為讀操作;RW低電平時為寫操作。當RS和RW共同為低電平時則寫入指令或者顯示地址;當RS為低電平、RW為高電平時為讀忙信號;當RS為高電平、RW為低電平時為寫人數據。E為使能端,當E由高電平跳變為低電平時,LCD液晶模塊開始執行命令。
本電流表的主程序流程包括:系統初始化、中斷處理程序、數值轉換程序、顯示處理程序。較關鍵的是數據采集部分和顯示部分。
2.1數據采集部分
本部分程序設計的思想如下:首先由ADC0809采集數據,采集完成后單片機通過中斷將數據讀入,然后將所得十六進制數轉換成十進制數,將此十進制數的百、十、個位分別取出,在預先設置好的表中查出其所對應的顯示指令并顯示出來。以下為數值轉換的主代碼[5]。
codes=PORT;//將中斷值賦予codes
codes1=(codes&0xf0)>>4;//取出codes的高 4位
codes0=codes&0x0f;//取出codes的低4位
code_d=codes1*16+codes0;//將 codes轉化為十進制數
bai=code_d/100;//將code_d的百位取出
shi=code_d/10%10;//將code_d的十位取出
ge=code_d%10;//將code_d的個位取出
2.2數值顯示程序
這部分程序首先要將單位mA顯示出來,因為這單位是不變的。要把測得的數值在液晶屏上顯示出來時,此處調用一個getchar函數。在這個函數中,用了一個do{}while語句。在此語句的一開頭首先測試液晶模塊是否空閑,若不空閑則等待其空閑,當液晶空閑時,執行嵌套switch/case語句。由于要顯示三個數字,所以設定了一個變量 i,當i=0時顯示百位,當i=1時顯示十位,當 i=2時顯示個位。顯示數字時可選擇查表法。先建立三個表,每一位對應一個表。以下為顯示十位的例子。

顯示完成后,進行適當的延時以保證顯示的穩定性。
在本次設計中,通過使用 Proteus繪制電路圖,用 C語言編寫程序,程序運行完畢后,電壓表的顯示屏上就可以顯示出電流數值來。調節電位器,顯示數值就會發生變化。電壓表的最小顯示值是0 mA,最大顯示值是200 mA,這與設計目的一致,1 s內大約可以測量 2次電壓值。
[1]柳金龍.淺談數字電壓表的特點[J].中國計量,2004(8):43-44.
[2]王韜.3位半積分式 A/D轉換DC電壓表[J].電子設計工程:電子世界,2002(2):44-45.
[3]周潤景,張麗娜.劉映群.PROTEUS入門使用教程[M].北京:機械工業出版社,2007.
[4]馬俊,劉曉林.智能鍵盤字符輸入及LCD顯示系統設計[J].電子設計工程,2009,17(1):66-68.
[5]馬忠梅,籍順心,張凱,等.單片機的 C語言應用程序設計(第 3版)[M].北京:北京航空航天大學出版社,2003.
A design and implementation of LCD digital voltmeter based on the single chip microcomputer
Zhang Lingli
(College of Electronic Information Engineering,Wuhan Polytechnic,Wuhan 430074,China)
In this paper,a hardware and software design of an ammeter was given.This system is based on AT89S51.The ammeter contained an A/D converter using ADC0809 as main hardware.Its characteristics were significant,such as simple,less components,low cost.It adjusted its work automatically.The digital ammeter can measure 0~200 mA 8-way input current values,and displayed on the LCD screen.
single chip microcomputer;digital ammeter;A/D converter;liquid crystal display
TM932
A
1674-7720(2015)05-0032-03
(2014-09-12)
張玲麗(1980-),女,碩士研究生,講師,主要研究方向:通信技術。