摘 要:針對大多數嵌入式系統鍵盤顯示電路復雜、不靈活、維護困難等問題,結合指紋識別系統在汽車安全領域的應用,介紹了基于I2C總線的數碼管顯示驅動和鍵盤掃描控制芯片CH452S以及擴展口器件PCF8574AP在指紋識別系統鍵盤顯示接口中的應用,包括硬件電路連接和軟件程序設計。采用I2C總線,不僅占用端口資源少,電路結構簡單,而且易于電路擴展與系統升級。
關鍵詞: I2C總線; 單片機; PCF8574AP; LCD; CH452S
?
本文介紹的指紋識別系統采用單片機與DSP協同工作,實現用戶服務。為此,必須提供一個與用戶進行對話的接口,即鍵盤顯示人機接口。指紋識別系統框圖如圖1所示。嵌入式系統開發過程中,鍵盤顯示一般采用微控制器直接與專用集成電路連接,如HD7279A、KS0108等,其所需引腳多、空間大,不利于產品小型化,而且成本高。由于本系統被控對象較多,包括DSP的HPI口、鍵盤顯示、GSM短信報警以及汽車控制接口,端口供需矛盾尤其突出。I2C總線是近年來嵌入式系統開發所廣泛采用的總線標準,僅需2根線即可簡單、方便、有效地實現I/O口擴展。本文主要介紹利用單片機普通I/O口模擬I2C總線操作,控制CH452S實現按鍵操作的捕獲,并控制PCF8574AP擴展的并行口生成LCD 讀寫控制所需時序,完成指紋識別系統信息顯示。
?
1 I2C總線簡述
Inter-Integrated Circuit Bus簡稱I2C總線,是由Philips公司開發的兩線串行總線,長度可達25英尺。I2C總線實現系統功能簡單有效,占用空間小,所需芯片管腳數量少,只須使用2根線即可方便構成多機系統與擴展系統,便于系統維護與升級。這2根線一根是數據線SDA,另一根是時鐘線SCL,2條線都必須通過一個上拉電阻連接到正的電源電壓,其數據只有在總線空閑時才可傳送[1]。SDA線上的數據必須在時鐘線SCL高電平期間保持穩定,否則將被視為起始條件或停止條件。當SCL為高電平時,SDA由高電平切換為低電平,則為起始條件;當SCL為高電平時,SDA由低電平切換為高電平,則為停止條件,如圖2所示,其中S為起始條件,P為停止條件。
?
I2C總線上可以同時有多個I2C器件,每個器件都有唯一的地址識別,而且每個器件可作為主機,也可作為從機,可以是發送器,也可以是接收器,這主要取決于器件所要完成的功能。數據傳送格式是以主機發送啟動信號開始,接著發送第一個字節,此字節的高7位為從設備地址,最低位為讀寫控制位。該位為0表示主機向從機發送數據,為1表示主機從從機讀取數據。總線每次傳送的字節數沒有限制,但是各字節之間必須插入一個應答位,數據字節從最高位開始發送,全部數據發送完后,就發送停止信號完成一次數據傳送。其中,應答位是在發送每個字節之后主機發出第9個時鐘脈沖的高電平期間,發送器釋放SDA線(高),接收器拉低SDA線。如果傳輸中存在主機-接收器,則在最后一個字節不產生響應,通知從機-發送器數據傳輸結束,其傳輸格式如圖3所示。
?
2?硬件電路設計
在指紋識別系統中,單片機負責管理系統級事務,監控鍵盤的按鍵操作和LCD的顯示。鍵盤用于完成用戶操作指令的輸入,使得用戶可以借助鍵盤輸入指令實現指紋識別系統的操作,而LCD用于顯示系統操作菜單以及系統反饋的提示信息和處理結果。
單片機采用Philips的P89C58,該款單片機基于80C51內核,具有32 KB非易失性只讀程序存儲器、256B內部數據存儲器RAM、32個雙向I/O口、3個16位定時/計數器、6個中斷源[2]。
鍵盤控制采用南京沁恒電子公司的CH452S,CH452S是數碼管顯示驅動和鍵盤掃描控制芯片,內置時鐘振蕩電路,可以驅動8位數碼管并進行64鍵鍵盤掃描[3],具有4線接口和2線接口,其中2線接口支持I2C總線。
顯示采用小尺寸的LCD,帶有僅寫入的SPI接口,由擴展口芯片PCF8574AP的并行口控制。PCF8574AP是Philips公司推出的一款帶有I2C總線硬件接口的擴展口芯片,具有8位I/O口,且每一位都可獨立作為輸入輸出線。I/O口帶輸出鎖存,具有大電流驅動,可直接驅動LED[4]。
由于該單片機P89C58不帶I2C硬件接口,因此,利用單片機的2個I/O口模擬I2C總線,總線的數據線接單片機的外部中斷1端口P3.3,時鐘線接單片機的P3.4端口,電路連接如圖4所示。
?
在應用中,CH452S采用標準2線接口,串行數據時鐘輸入線SCL和串行數據輸入、輸出線SDA,按鍵中斷輸出方式為低電平脈沖。在掃描鍵盤期間,DIG7~DIG0引腳用于列掃描輸出,SEG7~SEG0引腳都帶有內部下拉電阻,用于行掃描輸入。鍵盤掃描是由CH452S自動完成的,當檢測到有效按鍵時,會以中斷的方式通知單片機進行處理。根據本系統需要,設計了4×4的鍵盤矩陣。用戶通過操作鍵盤對系統進行控制和使用,鍵盤按扭的功能定義如下:(1)數字鍵:輸入數字0~9;(2)確定鍵:確認當前操作;(3)取消鍵:取消當前操作;(4)注冊鍵:進入用戶指紋注冊界面;(5)登錄鍵:進入用戶指紋登錄界面;(6)刪除鍵:進入用戶指紋刪除界面;(7)模式鍵:進入模式功能選擇界面。由于CH452S不支持組合鍵,如果有多個鍵同時按下,那么按鍵代碼小的為有效按鍵。
單片機對LCD顯示的控制是通過I2C總線讀寫PCF8574AP擴展口,生成LCD讀寫時序實現的,數據傳輸格式如圖3所示。對于PCF8574AP器件來說,從機地址為0x70。由于LCD僅采用寫入的SPI接口方式,所以無須用到對PCF8574AP讀操作,但在實際應用中,PCF8574AP作為輸入時應置口鎖存器為高電平,即在讀PCF8574AP前需要將PCF8574AP擴展口全部置為1狀態。
3? 軟件程序設計
指紋識別系統的主控程序是由單片機來完成的,監控鍵盤和LCD顯示是其中的一部分。由于單片機不帶硬件I2C接口,所以I2C協議通過模擬實現,此協議比較簡單,主要包括啟動總線、結束總線、發送數據、讀取數據、獲取響應、發送響應。鍵盤控制芯片CH452S定義了空操作、復位、設定系統參數、讀取按鍵代碼、進入睡眠狀態等23條操作命令,單片機通過I/O口模擬I2C總線發送操作命令。LCD采用SPI接口,包括復位、片選、數據/命令、串行數據、時鐘5條線,分別由PCF8574AP擴展的5個I/O口控制,改變狀態只須往PCF8574AP寫相應的數據即可。系統共設有16個按鍵,當CH452檢測到有效按鍵時,將等到SCL和SDA空閑后從SDA輸出幾個微秒寬度的低電平脈沖作為鍵盤的中斷信號。單片機響應鍵盤中斷請求后,向CH452S發送讀取按鍵代碼命令,CH452S將從SDA線輸出按鍵代碼。為了提高系統運行效率、減少中斷處理時間,中斷服務程序只設置鍵盤的中斷標志(此中斷標志為自設變量),將讀取按鍵代碼子程序放在中斷外主控程序執行,程序流程圖如圖5所示。
?
系統在上電后,主控程序首先對系統進行初始化,包括單片機初始化、CH452S初始化、LCD顯示初始化、I2C總線初始化等,然后進入死循環。在循環中,程序等待中斷。當有中斷發生后,在中斷服務程序置位相應的中斷標志位,然后退出中斷等待,進入中斷查詢,看是哪種類型的中斷。如果是鍵盤中斷,則單片機通過I2C總線向CH452S發送讀取按鍵代碼命令;如果是其他中斷,則處理其他信息。最后進行按鍵處理和更新LCD顯示,供用戶進一步操作。隨后又回到等待中斷循環中,如此不停地循環反復。
本文介紹了采用I2C總線實現對指紋識別系統鍵盤及LCD顯示的控制,經過實踐證明,此方案構建的鍵盤顯示人機接口可實現正常的按鍵捕獲和信息顯示,是一種簡單實用、穩定可靠的設計方案。該方案節約了單片機端口引腳資源,降低了系統復雜度,軟硬件實現容易,成本低廉,而且易于系統功能擴展。本文介紹的方法,只須經過簡單適當修改,即可應用于其他嵌入式系統場合,很值得推廣使用。
參考文獻
[1]?I2C總線規范[EB/OL]. http://www.zlgmcu.com/philips/iic/xuanxing/.2008.
[2]?P89C58手冊[EB/OL]. http://www.zlgmcu.com/philips/80c51/shouce/p89c5x/.2008.
[3] 數碼管驅動及鍵盤控制芯片CH452中文手冊[EB/OL]. http://wch.cn/.2008.
[4]?PCF8574AP手冊[EB/OL]. http://www.zlgmcu.com/philips/iic/ePDF/.2008.