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