以測量儀表中常見的時分割驅動法驅動的段式LCD顯示器為例,分析LCD顯示器的電極連接結構和驅動信號波形;介紹單片機讀取儀表LCD讀數的接口電路。此接口電路應用于筆者開發的自動血壓監控儀的研制及臨床應用項目中,由8031單片機讀取血壓計的收縮壓、舒張壓、心率以及充氣和放氣時瞬時壓強。實驗證明,此接口電路工作穩定、可靠。
LCD電極 讀數 時分割驅動法 接口設計
通過測量儀表拾取被測信號是單片機前向通道設計中常用的數據采集方式。通常,接口電路從儀表電路中取得相關的模擬信號,經過A/D轉換或V/F轉換送入單片機;或者取得一個頻率信號,經整形后送入單片機[1]。然而,有些測量儀表電路中可能找不到這樣的信號。以電容式壓力傳感器血壓計為例,盡管從其振蕩電路中可以取得一個與壓強成線性關系的頻率信號[2],送入單片機測得壓強,但這個壓強并不是所要拾取的收縮壓、舒張壓和心率;而普通的血壓計又沒有智能儀表那樣的通信接口與單片機通信。顯然,要想通過這樣的儀表拾取被測信號只有直接讀取其顯示屏的讀數了。
本文以一個全自動血壓計為例,介紹將LCD顯示器讀數讀入單片機的接口電路。該血壓計顯示器為6 1/2位段式LCD顯示器,3位顯示收縮壓,3位顯示舒張壓。1/2位在兩組數碼中間,顯示4個指示符號。
1 LCD的電極連接結構和工作波形
1.1 LCD的電極連接結構
圖1為血壓計LCD的電極連接結構及等效電路。其中,圖1(a)為公共電極連接排列,圖1(b)為段電極連接排列。它共有4個公共電極COM0~COM3,每位數碼各有2個段電極Sx-0、Sx-1,其等效電路為一個4行×2列的矩陣,如圖1(c)所示。
圖1 LCD電極連接結構及等效電路
1.2 LCD的工作波形
用雙蹤示波器觀察血壓計LCD的工作波形,如圖2所示。它采用時分割驅動法驅動,偏比1/3,占空比1/4,B型[3]。公共電極COM0~COM3的信號波形始終保持不變,段電極Sx-0、Sx-1信號波形隨顯示數字的變化而變化。圖2中的Sx-0、Sx-1波形為顯示數字“0”時的工作波形。由圖2可知,不考慮信號的直流分量,所有波形的前半周期t1~t4與后半周期t5~t8大小相等,極性相反。COM0~COM3信號電壓依次在t1~t4四個時間內達到峰值。時間t1為第1行上f、a兩段的掃描時間,公共電極COM0,Sx-0為f段的段電極,Sx-1為a段的段電極。在t1時間內, f段上的電壓COM0-Sx-0=V0,a段上的電壓COM0-Sx-1=V0,f、a兩段均處于選擇狀態,顯示。其余各段在其掃描時間內的電壓和顯示狀態如表1所列。7段中只有g段上的電壓為V0/3,處于非選擇狀態,不顯示。其余6段均處于選擇狀態,顯示。因此,顯示數字“0”。
圖2 LCD工作波形
表1 顯示“0”時各段的顯示狀態
由此可見,只要依次檢查在t1~t4四個時間內f、a、g、b、e、c、d各段上的電壓COMx-Sx-y(x=0,1,…,6;y=0,1)是V0還是V0/3即可獲得LCD各位數碼的字形碼,然后再將字形碼轉換為測量結果。
2 單片機讀數接口電路
圖3為根據上述工作原理設計的8051單片機讀數接口電路。圖中,LCD為血壓計的液晶顯示器,6位數碼從右到左依次編號0~5,中間半位的編號為6。它有13個段電極、4個COM電極,GND為血壓計的接地端。8051的 PC口為8051的擴展并行口。
圖3 讀數接口電路
2.1 顯示狀態讀取電路
由CD4067、CD4051、LM324(UA、UB)組成顯示狀態讀取電路,讀取LCD數碼各段的顯示狀態。CD4067多路模擬開關從LCD的13個段電極信號中選擇一路Sx-x輸出到LM324(UA)的反相輸入端2腳。CD4051多路模擬開關從LCD的4個COM信號中選擇一路COMx輸出到LM324(UA)的同相輸入端3腳。LM324(UA)接成模擬減法器,由1腳輸出信號COMx-Sx-x。UB作電壓比較器,參考電壓VR大小由電位器W1調節于V0/3~V0之間,將段電壓COMx-Sx-x與VR比較。比較結果為該段的顯示狀態,高電平說明該段顯示,低電平不顯示。顯示狀態送入8051的P1.6腳。R1、C1組成RC濾波器,濾除高頻干擾。
比如,要讀取0號數碼的a段顯示狀態,由圖1知,0號數碼a段的段電極是S0-1,公共電極是COM0。由程序控制在t1時間內令PC1PC0=00,使CD4051選擇COM0,令PC5~PC2=0001,使CD4067選擇S01,COM0和S01兩信號電壓經UA減法器相減,然后再經UB電壓比較后得到a段的顯示狀態,8051從P1.6腳讀取此顯示狀態。
2.2 INT0中斷信號產生電路
UC和UD組成INT0中斷信號產生電路。UC 接成電壓跟隨器,減小電路對COM0信號的影響。R2、C2組成RC濾波器,濾除高頻干擾。UD作電壓比較器,參考電壓VR加在同相輸入端,VR大小由電位器W2調節于2V0/3~V0。電壓比較器將COM0信號轉換為INT0負脈沖信號,工作波形如圖4所示。負脈沖的下降沿為LCD驅動信號周期T的起始時刻。此負脈沖接至8051的INT0腳,在負脈沖的下降沿產生外部中斷0。
圖4 比較器UD工作波形
3 程序設計
啟用外部中斷0和定時器T0,以中斷方式讀取LCD各位數碼的字形碼。主程序以查詢方式讀取該字形碼,然后經過讀數校驗、字形碼到BCD碼的譯碼、讀數識別等,將字形碼轉換為讀數。
3.1 讀取字形碼
通過外部中斷0和定時器T0以中斷方式讀取LCD某一編號數碼的字形碼。如圖5所示,INT0負脈沖在周期T的起始時刻引起外部中斷0,由INT0中斷服務程序啟動T0定時器,依次在t1~t4半個周期內的f、a、g、b、e、c、d各時刻產生T0中斷,讀取各段的顯示狀態,獲得字形碼。T0定時器設為工作方式2,自動再裝入定時時間為T/16,初始定時時間為T/32。INT0和T0中斷服務程序流程如圖6所示。
圖5 T0中斷的各個時刻
圖6 INT0和T0中斷服務程序流程
其中,PC口數據格式:PC5~PC3為要讀取的那位LCD數碼編號,PC2為段電極編號,PC1PC0為COM電極編號。
3.2 字形碼轉換
主程序以查詢方式分別讀取由中斷服務程序采集的各位數碼的字形碼,查表將字形碼轉換為BCD碼,再將幾位數碼的BCD碼轉變為數值。
3.3 讀數校驗
讀取一位數碼的字形碼需要1個周期T(實際只用前半個周期),經測量,T=16.318 ms。讀取全部612位數碼至少需要用7個周期,約114 ms。考慮到在單片機讀數的過程中,LCD的讀數有可能發生變化而導致讀數錯誤,程序中采用連續兩次讀數的方法來校驗讀數的正確性。如果連續兩次讀數相同,則說明讀數是正確的;如果連續兩次讀數不同,則說明讀數可能是錯誤的,應重新讀數。
3.4 讀數識別
血壓計顯示的內容除了收縮壓、舒張壓和心率以外還有充氣、放氣時的瞬時壓強以及一些狀態信息。LCD中間的半位 (6號)用于顯示待機 (Reay to measure)、充氣(CUFF Inflating)、放氣(CUFF Deflating)以及更換電池(Replace Batteries)四個符號。另外,4號數碼顯示“E”時表示測量出錯,顯示“P”時,右邊3位(0~2號)數碼顯示的數字為心率。左右兩邊顯示內容均是數字時,左邊3位(3~5號)是收縮壓,右邊3位是舒張壓,血壓與心率交替顯示。主程序通過這些信息來識別LCD所顯示的內容。
4 結論
使用此接口電路采集數據,不必考慮與拾取信號的測量相關的細節問題和技術規范。這樣,當拾取信號的測量比較復雜時,可以有效地縮短開發周期。同時,它也不存在二次A/D轉換或V/F轉換方法所存在的單片機采集數據與儀表讀數不完全一致的問題。
程序設計用1個驅動信號周期讀取1位數碼,這樣的讀取速度對于讀數變化不是很快的血壓計來說已經足夠了。如果測量儀表LCD讀數變化很快,可以修改編程,在1個周期內同時讀取幾位數碼,甚至修改電路設計,將后半周期也用于進行讀數,實現在1個信號周期內讀取所有數碼。