基于非接觸IC卡自動(dòng)計(jì)時(shí)停車收費(fèi)系統(tǒng)設(shè)計(jì)
摘 要:根據(jù)停車場智能化管理的需要提出了系統(tǒng)設(shè)計(jì)思想。系統(tǒng)硬件設(shè)備由入口設(shè)備、出口設(shè)備和發(fā)卡設(shè)備組成,論述了它們的硬件電路設(shè)計(jì)和軟件設(shè)計(jì),并重點(diǎn)討論了IC卡讀寫的硬、軟件設(shè)計(jì)。
隨著國民經(jīng)濟(jì)飛速發(fā)展.城市汽車數(shù)量劇增,停車難問題愈來愈凸現(xiàn),在增加停車場數(shù)量的同時(shí),提高停車場的智能化管理是解決這個(gè)問題的關(guān)鍵。本設(shè)計(jì)開發(fā)的自動(dòng)計(jì)時(shí)停車收費(fèi)系統(tǒng),以非接觸IC卡技術(shù)為基礎(chǔ).實(shí)現(xiàn)了停車場收費(fèi)管理現(xiàn)代化,它具有效率高、管理科學(xué)、安全可靠等特點(diǎn)。
1 系統(tǒng)整體設(shè)計(jì)
整個(gè)系統(tǒng)硬件設(shè)備由停車場人口設(shè)備、停車場出口設(shè)備和發(fā)卡設(shè)備三部分組成。人口設(shè)備和出口設(shè)備位于停車場人口和出口單機(jī)工作,而發(fā)卡設(shè)備位于管理中心,由上位機(jī)控制。三部分設(shè)備的硬件設(shè)計(jì)和主要功能如表1所示。
表1 設(shè)備硬件組成與功能
硬件組成上,發(fā)卡設(shè)備直接由上位機(jī)控制,所以無需鍵盤、LCD模塊等硬件,出口設(shè)備包含人口設(shè)備和發(fā)卡設(shè)備所有的硬件,它們的設(shè)計(jì)只需在出口設(shè)備硬件基礎(chǔ)上去掉相應(yīng)模塊,所以在后面的硬件設(shè)計(jì)介紹中以出口設(shè)備為代表 三種設(shè)備的不同功能由軟件編程實(shí)現(xiàn),出口程序經(jīng)過精簡和簡單的修改可得到人口設(shè)備程序,所以在軟件設(shè)計(jì)中主要討論了出口設(shè)備和發(fā)卡設(shè)備的程序流程。在整個(gè)系統(tǒng)中,非接觸IC卡是三部分硬件設(shè)備相互聯(lián)系的橋梁,非接觸IC卡的讀寫程序設(shè)計(jì)是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵,本文將重點(diǎn)討論。
2 IC卡卡內(nèi)存儲空間的分配
本設(shè)計(jì)使用PHILIPS公司的MF1 IC卡,卡內(nèi)集成1KB的E2PROM,并劃分為16個(gè)可獨(dú)立使用的扇區(qū),每個(gè)扇區(qū)又分為4個(gè)16字節(jié)的存儲塊,每個(gè)扇區(qū)的第4個(gè)存儲塊保存該扇區(qū)的密碼和訪問控制,IC卡中的16個(gè)扇區(qū)可用于16個(gè)不同系統(tǒng)中。本設(shè)計(jì)使用扇區(qū)2,具體存儲空間劃分:塊0的低4個(gè)字節(jié)存儲用戶序列號,塊1存放存儲用戶余額,塊2低7個(gè)字節(jié)存放停車起始時(shí)間 塊3存放兩套6字節(jié)密碼和4寧節(jié)訪問控制。
3 硬件設(shè)計(jì)
3.1出口設(shè)備硬件結(jié)構(gòu)
出口設(shè)備硬件結(jié)構(gòu)如圖1所示.AT89C55單片機(jī)作為控制器,它片內(nèi)集成20KB的程序存儲器,滿足本設(shè)計(jì)對程序存儲器容量的要求:ZLG7289芯片外接4x4的鍵盤;DS1302為停車計(jì)時(shí)提供準(zhǔn)確時(shí)鐘;LCD液晶顯示各種信息,如按鍵信息、時(shí)間和停車費(fèi)用等:AT24C256存儲用戶結(jié)算信息:通過RS-232 I亍上位機(jī)通信:通過ZLG500對IC卡進(jìn)行讀寫操作:MCU通過P1.7端口向擋車閘電機(jī)控制器發(fā)送開關(guān)車閘信號。為充分利用單片機(jī)有限的端口,外圍設(shè)備多采用了具有I2C接口f如AT2,4C256、DS1302)和SPI接1:3(如ZLG7289、ZLG500)的器件。
圖1 出口設(shè)備硬件示意圖
3.2非接觸IC卡讀寫模塊ZLG500
ZLG500負(fù)責(zé)對非接觸IC卡的讀寫操作。需外接PCB天線。ZLG500模塊連接電路如圖2所示.傳輸啟動(dòng)端SS接MCU的外部中斷O,MCU和ZLG500之問發(fā)送數(shù)據(jù),首先由發(fā)送方將SS拉低并且在發(fā)送結(jié)束后將SS拉高,本設(shè)計(jì)中MCU以下降沿中斷觸發(fā)的方式接收ZLG500發(fā)送的數(shù)據(jù).并將外部中斷O設(shè)置為最高優(yōu)先級,保證第一時(shí)間接收到IC卡數(shù)據(jù)。SCLK為SPI接口的時(shí)鐘線,總是由MCU產(chǎn)生。SDATA為雙向數(shù)據(jù)線,在數(shù)據(jù)傳輸開始前,由數(shù)據(jù)發(fā)送方將SDATA拉低,數(shù)據(jù)接收方同意接收數(shù)據(jù)則將SDATA拉高,作為接收響應(yīng)信號,之后SDATA作為數(shù)據(jù)傳送線。模塊自帶看門狗,復(fù)位端RST可懸空或接低電平。CTRL和BZ接發(fā)光二極管和蜂嗚。
圖2 ZLG500模塊電路連接圖
3.3 AT24C256存儲器存儲空間劃分
采用具有32KB存儲容量AT24C256存儲收費(fèi)結(jié)算信息。存儲空間劃分:第1、2字節(jié)為出口設(shè)備號,第3、4個(gè)字節(jié)為已打卡數(shù)量,第5到第8個(gè)字節(jié)為收費(fèi)總金額,后面為用戶數(shù)據(jù)區(qū),每位用戶數(shù)據(jù)由13字節(jié)組成.包括4字節(jié)用戶序列號和2字節(jié)消費(fèi)金額(BCD碼1.最多記錄5460個(gè)用戶數(shù)據(jù)。
3.4 LCD顯示
采用SMG12864液晶顯示模塊,可顯示4行8列共32個(gè)16x16的漢字。它自帶2個(gè)KS0108B和1個(gè)KS0107B顯示驅(qū)動(dòng)控制器.2個(gè)KS0108B分別控制左右兩個(gè)半屏64x64)像素點(diǎn)的顯示.KS0107B作為64行的行驅(qū)動(dòng)控制。液晶模塊采用直接控制方式.P2.2和P2.3分別接CS1和CS2用于左右半屏控制器的片選,RS(接P2.O)為內(nèi)部功能寄存器選擇,R/W(接P2.1)為讀寫控制信號.P2.7接LCD驅(qū)動(dòng)器的使能端E。
3.5鍵盤設(shè)計(jì)
鍵盤接口電路采用ZLG7289芯片.其按鍵有效輸出端,KEY)接MCU的INT1./KEY在有效按鍵時(shí)為低電平,平時(shí)為高電平。 EY的下降沿觸發(fā)按鍵中斷之后,MCU根據(jù)ZLG7289發(fā)送的鍵值進(jìn)行相應(yīng)處理。設(shè)計(jì)按鍵有:數(shù)字鍵0-9、"."、"功能"、"退出"、"退格"、"確定"。
4 軟件設(shè)計(jì)
軟件設(shè)計(jì)采用了模塊化設(shè)計(jì)方法.首先設(shè)計(jì)出設(shè)備外圍各硬件的驅(qū)動(dòng)程序,將各硬件的驅(qū)動(dòng)函數(shù)聲明在相應(yīng)頭文件(.h文件)中,然后在主程序中包含這些頭文件,按系統(tǒng)功能需要調(diào)用各個(gè)模塊的驅(qū)動(dòng)函數(shù)。限于篇幅,本文只詳細(xì)討論了主程序流程和讀寫卡程序。
4.1主程序
4.1.1出口設(shè)備主程序流程
(1)啟動(dòng)后對LCD、E2pROM、ZLG500和時(shí)鐘等初始化;
(2)讀取當(dāng)前時(shí)間、LCD顯示待機(jī)界面;
(3)等待射頻IC卡的請求、按鍵請求或串13通信請求。有任一種請求則進(jìn)入相應(yīng)處理程序,并且處理程序返回之前。屏蔽其它兩種請求。① IC卡請求,驗(yàn)證用戶IC 合法性,若為非法卡.則放棄IC卡請求,若為合法卡,從DS1302和IC卡中獲取當(dāng)前時(shí)間和停車起始時(shí)間,計(jì)算出停車費(fèi)用,從IC卡獲取用戶余額。若判斷消費(fèi)金額超過用戶余額則蜂嗚報(bào)警并在LCD 中提示。否則將扣除消費(fèi)金額并將余額寫入IC卡中,最后將用戶序列號和消費(fèi)金額存儲到AT24C256中,上位機(jī)根據(jù)存儲器中用戶消費(fèi)金額更新用戶余額。② 按鍵請求."功能"鍵被按下會(huì)中斷觸發(fā)按鍵處理程序,液晶顯示"請輸入密碼",正確輸入密碼后,在液晶中顯示各種功能,如"設(shè)置時(shí)間"、"查詢總金額"、"記錄個(gè)數(shù)"等,按數(shù)字鍵選擇相應(yīng)功能,按"退出"鍵可以退到上一層操作界面,按"確定"鍵可確認(rèn)輸入,"退格"鍵取消前一步輸入。③ 串口通信請求,出口設(shè)備與上位機(jī)連接時(shí).根據(jù)上位機(jī)命令.可進(jìn)行存儲器數(shù)據(jù)上傳、設(shè)置設(shè)備時(shí)間等操作。
(4)向擋車閘電機(jī)控制器發(fā)出開關(guān)信號。
4.1.2 發(fā)卡設(shè)備主程序流程
開機(jī)后對讀寫卡模塊和串口進(jìn)行初始化. 然后等待上位機(jī)命令:
(1)若為"發(fā)新卡命令".接著接收上位機(jī)發(fā)來的新用戶數(shù)據(jù),當(dāng)在有效范圍內(nèi)檢測到合法卡時(shí)將數(shù)據(jù)寫入IC卡內(nèi)扇區(qū)2
中相應(yīng)位置中:
(2)若為"充值命令",將有效范圍內(nèi)IC卡的用戶信息傳給上位機(jī),然后等待上位機(jī)發(fā)來"寫卡命令":
(3)收到"寫卡命令",緊接著接收上位機(jī)發(fā)送的數(shù)據(jù),然后將接收到的數(shù)據(jù)寫入IC卡中。
4.2讀寫IC卡模塊通信協(xié)議與程序設(shè)計(jì)
4.2 1 MCU與ZLG500之間的通信協(xié)議
MCU與ZLG500之間的通信接圖3所示的數(shù)據(jù)格式進(jìn)行。
圖3 MCU與ZLG500之間通信的數(shù)據(jù)格式
數(shù)據(jù)塊各字段描述如下:
?、?SeqNr:數(shù)據(jù)交換包的序號;
?、?Command:MCU向ZLG500發(fā)送命令的代碼,例如Read命令為0x46。Write命令為0x47:
?、?Status:ZLG500對MCU發(fā)出命令的響應(yīng);
?、?Len:要發(fā)送數(shù)據(jù)的個(gè)數(shù),以字節(jié)為單位;
⑤ Data[0?N1:要發(fā)送的Len個(gè)字節(jié)的數(shù)據(jù);
?、?BCC:BCC校驗(yàn)碼,計(jì)算公式為:Byte[n]=NOT(Byte XOR Byte XOR....XOR Byte[n一11)。
MCU與ZLG500之間通信必須先由MCU發(fā)起,MCU按照數(shù)據(jù)格式向ZLG500發(fā)送命令和數(shù)據(jù),ZLG500執(zhí)行完命令后,將命令執(zhí)行的狀態(tài)和響應(yīng)數(shù)據(jù)按照數(shù)據(jù)格式發(fā)回給MCU。
4.2.2讀寫IC卡過程的代碼實(shí)現(xiàn)
讀寫IC卡程序分為底層驅(qū)動(dòng)函數(shù)和高層應(yīng)用接口。底層驅(qū)動(dòng)函數(shù)使用匯編語言設(shè)計(jì), 主要包括SPI總線數(shù)據(jù)發(fā)送函數(shù)(_SPI_SEND)和
評論