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