非接觸公交IC卡讀寫(xiě)器的應用設計
鍵盤(pán)掃描采用反轉法讀鍵:先從P2口的高4位輸出零電平,從P2口的低4位讀取鍵盤(pán)狀態(tài);再從P2口的低4位輸出零電平,從P2口的高4位讀取鍵盤(pán)狀態(tài),將兩次讀取的結果組合起來(lái)就可以得到當前按鍵的特征碼(見(jiàn)程序中TABLE表)。有了這張表就可以編程,將它們轉換成順序碼。用當前讀得的特征碼來(lái)順序查表,用一單元記錄查找次數。當在表中查到有該特征碼時(shí),它的位置(即查找次數)就是對應的順序碼。對應的鍵盤(pán)查鍵程序如下:
KEY: MOV P2,#0FH ;用反轉法查鍵
MOV A,P2
ANL A,#0FH
MOV B,A
MOV P2,#0F0H
MOV A,P2
ANL A,#0F0H
ORL A,B
CJNE A,#0FFH,KEY1
RET ;無(wú)鍵按下
KEY1: MOV B,A ;有鍵按下,存鍵碼
MOV DPTR,#TABLE
MOV R3,#0FFH ;存順序碼單元初始化
KEY2: INC R3
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY3 ;判鍵碼,求順序碼
MOV A,R3 ;若找到鍵碼,存順序碼
RET
KEY3: CJNE A,#0FFH,KEY2;判是否查完
RET ;已查完,鍵碼未找到,以無(wú)按鍵處理
TABLE: DB 77H,7BH,0BBH ;按鍵特征碼表
DB 0DBH,7DH,0BDH
DB 0DDH,7EH,0BEH
DB 0DEH,0B7H,0D7H
DB 0EEH,0EDH,0EBH
DB 0E7H,0C7H,0FFH
3.顯示程序
根據圖1,在顯示電路中,用P1口的3根I/O口線(xiàn)(P1.0、P1.1、P1.2)分別提供時(shí)鐘信號(CLK)、串行數據(DA)和使能信號(EN)。MC14499每一次可接收20位串行輸入數據,前4位用于控制數碼管的小數點(diǎn)顯示,后16位是4個(gè)數碼管的BCD碼輸入數據。在每幀數據傳送之前,必須將EN置0;然后傳送20位數據,數據傳送完后,再將EN置1。顯示程序如下:
DISP: CLR P1.0 ; 清CLK
CLR P1.2 ;清EN
MOV R2,#04 ;置傳送位數
MOV A,#00
LCALL W14499 ;調送數顯示
MOV A,@R1 ;讀要顯示的數
MOV R2,#08 ;置傳送位數
LCALL W14499
INC R1
MOV A,@R1
MOV R2,#08 ; 置傳送位數
LCALL W14499
SETB P1.2 ;置EN位
RET
W14499: SETB P1.0 ; 清CLK
RLC A ;準備逐位送數顯示
MOV P1.1,C ; 將數移入DA
CLR P1.0 ; 清CLK
DJNZ R2,W14499
RET
4.串行E2PROM讀寫(xiě)程序
24C64為I2C總線(xiàn)的E2PROM。SCL為400kHz時(shí)鐘線(xiàn),SDA為雙向數據線(xiàn),A2、A1、A0三位為片選地址,即I2C總線(xiàn)上最多可并聯(lián)8個(gè)串行E2PROM芯片。對E2PROM的操作方式由讀寫(xiě)控制命令字決定,如圖4所示。其中1010為4位讀寫(xiě)控制碼,R/W為讀寫(xiě)控制位:0為寫(xiě)操作,1為讀操作。所以結合圖1可知A2H為寫(xiě)控制命令字,A3H為讀控制命令字。
對存儲器寫(xiě)操作,首先,單片機向24C64發(fā)一個(gè)START命令,產(chǎn)生開(kāi)始條件。然后,發(fā)寫(xiě)命令控制字(如A2H)。當24C64接到命令后,進(jìn)入一個(gè)寫(xiě)周期,再由單片機發(fā)送存儲地址,即確定數據寫(xiě)入到存儲器的哪個(gè)地址,隨后,單片機將要存儲的數據送入到SDA數據線(xiàn)上。寫(xiě)周期結束時(shí),單片機再發(fā)一停止位(STOP)。
對存儲器讀操作,首先,單片機向24C64發(fā)一個(gè)START命令,產(chǎn)生開(kāi)始條件。然后發(fā)寫(xiě)命令控制字(如A2H)。當24C64接到命令后,進(jìn)入一個(gè)寫(xiě)周期,再由單片機發(fā)送存儲地址。存儲地址發(fā)送成功后,單片機又向24C64發(fā)一個(gè)START命令,產(chǎn)生開(kāi)始條件,然后發(fā)讀命令控制字(A3H)。當24C64接到命令后,進(jìn)入一個(gè)讀周期,單片機從SDA數據線(xiàn)上讀出指定存儲地址中的數據。讀周期結束時(shí),單片機再發(fā)一停止位(STOP)。(程序略)
值得注意的是,對存儲器操作時(shí),每讀寫(xiě)一個(gè)字節,單片機必須送一個(gè)應答位(ACK),釋放一下SDA數據線(xiàn),以便存儲器能繼續接收數據。
5.通信程序
在讀寫(xiě)器中,單片機與PC機之間的通信主要由TC232來(lái)實(shí)現TTL電平(0~5V)與RS232電平(+10~-10V)的轉換(電路見(jiàn)圖1),以完成售卡機保存的售卡記錄的傳送。通信格式設置為:采用串行工作方式1,波特率為9600baud, 1個(gè)起始位,8位數據位,1個(gè)停止位,采取和校驗方式。讀寫(xiě)器中,單片機程序可采用C語(yǔ)言進(jìn)行編程。C語(yǔ)言有功能豐富的庫函數,運算速度快、編譯效率高、可移植性好、軟件的可讀性強,便于改進(jìn)和擴充(程序略)。
為提高在公交系統的適應能力,包括用戶(hù)的各類(lèi)特殊要求,抗干擾,抗惡劣環(huán)境,除硬件上采用監控電路外,在軟件上還采取了指令冗余和軟件陷阱。
評論