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