• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 公交非接觸IC卡讀寫器的應(yīng)用設(shè)計

    公交非接觸IC卡讀寫器的應(yīng)用設(shè)計

    作者: 時間:2010-01-13 來源:網(wǎng)絡(luò) 收藏

    2.鍵盤掃描程序

    本文引用地址:http://www.czjhyjcfj.com/article/152138.htm

      鍵盤掃描采用反轉(zhuǎn)法讀鍵:先從P2口的高4位輸出零電平,從P2口的低4位讀取鍵盤狀態(tài);再從P2口的低4位輸出零電平,從P2口的高4位讀取鍵盤狀態(tài),將兩次讀取的結(jié)果組合起來就可以得到當(dāng)前按鍵的特征碼(見程序中TABLE表)。有了這張表就可以編程,將它們轉(zhuǎn)換成順序碼。用當(dāng)前讀得的特征碼來順序查表,用一單元記錄查找次數(shù)。當(dāng)在表中查到有該特征碼時,它的位置(即查找次數(shù))就是對應(yīng)的順序碼。對應(yīng)的鍵盤查鍵程序如下:

    KEY: MOV P2,#0FH ;用反轉(zhuǎn)法查鍵
    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 ;無鍵按下
    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 ;已查完,鍵碼未找到,以無按鍵處理
    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.顯示程序

      根據(jù)圖1,在顯示電路中,用P1口的3根I/O口線(P1.0、P1.1、P1.2)分別提供時鐘信號(CLK)、串行數(shù)據(jù)(DA)和使能信號(EN)。MC14499每一次可接收20位串行輸入數(shù)據(jù),前4位用于控制數(shù)碼管的小數(shù)點顯示,后16位是4個數(shù)碼管的BCD碼輸入數(shù)據(jù)。在每幀數(shù)據(jù)傳送之前,必須將EN置0;然后傳送20位數(shù)據(jù),數(shù)據(jù)傳送完后,再將EN置1。顯示程序如下:

    DISP: CLR P1.0 ; 清CLK
    CLR P1.2 ;清EN
    MOV R2,#04 ;置傳送位數(shù)
    MOV A,#00
    LCALL W14499 ;調(diào)送數(shù)顯示
    MOV A,@R1 ;讀要顯示的數(shù)
    MOV R2,#08 ;置傳送位數(shù)
    LCALL W14499
    INC R1
    MOV A,@R1
    MOV R2,#08 ; 置傳送位數(shù)
    LCALL W14499
    SETB P1.2 ;置EN位
    RET
    W14499: SETB P1.0 ; 清CLK
    RLC A ;準(zhǔn)備逐位送數(shù)顯示
    MOV P1.1,C ; 將數(shù)移入DA
    CLR P1.0 ; 清CLK
    DJNZ R2,W14499
    RET


    4.串行E2PROM讀寫程序

      24C64為I2C總線的E2PROM。SCL為400kHz時鐘線,SDA為雙向數(shù)據(jù)線,A2、A1、A0三位為片選地址,即I2C總線上最多可并聯(lián)8個串行E2PROM芯片。對E2PROM的操作方式由讀寫控制命令字決定,如圖4所示。其中1010為4位讀寫控制碼,R/W為讀寫控制位:0為寫操作,1為讀操作。所以結(jié)合圖1可知A2H為寫控制命令字,A3H為讀控制命令字。
     


      對存儲器寫操作,首先,單片機向24C64發(fā)一個START命令,產(chǎn)生開始條件。然后,發(fā)寫命令控制字(如A2H)。當(dāng)24C64接到命令后,進入一個寫周期,再由單片機發(fā)送存儲地址,即確定數(shù)據(jù)寫入到存儲器的哪個地址,隨后,單片機將要存儲的數(shù)據(jù)送入到SDA數(shù)據(jù)線上。寫周期結(jié)束時,單片機再發(fā)一停止位(STOP)。

      對存儲器讀操作,首先,單片機向24C64發(fā)一個START命令,產(chǎn)生開始條件。然后發(fā)寫命令控制字(如A2H)。當(dāng)24C64接到命令后,進入一個寫周期,再由單片機發(fā)送存儲地址。存儲地址發(fā)送成功后,單片機又向24C64發(fā)一個START命令,產(chǎn)生開始條件,然后發(fā)讀命令控制字(A3H)。當(dāng)24C64接到命令后,進入一個讀周期,單片機從SDA數(shù)據(jù)線上讀出指定存儲地址中的數(shù)據(jù)。讀周期結(jié)束時,單片機再發(fā)一停止位(STOP)。(程序略)

      值得注意的是,對存儲器操作時,每讀寫一個字節(jié),單片機必須送一個應(yīng)答位(ACK),釋放一下SDA數(shù)據(jù)線,以便存儲器能繼續(xù)接收數(shù)據(jù)。

    5.通信程序

      在中,單片機與PC機之間的通信主要由TC232來實現(xiàn)TTL電平(0~5V)與RS232電平(+10~-10V)的轉(zhuǎn)換(電路見圖1),以完成售卡機保存的售卡記錄的傳送。通信格式設(shè)置為:采用串行工作方式1,波特率為9600baud, 1個起始位,8位數(shù)據(jù)位,1個停止位,采取和校驗方式。中,單片機程序可采用C語言進行編程。C語言有功能豐富的庫函數(shù),運算速度快、編譯效率高、可移植性好、軟件的可讀性強,便于改進和擴充(程序略)。

      為提高在系統(tǒng)的適應(yīng)能力,包括用戶的各類特殊要求,抗干擾,抗惡劣環(huán)境,除硬件上采用監(jiān)控電路外,在軟件上還采取了指令冗余和軟件陷阱。


    上一頁 1 2 下一頁

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 个旧市| 天峻县| 广丰县| 类乌齐县| 桦南县| 三台县| 调兵山市| 贵南县| 游戏| 武清区| 平塘县| 阿拉善右旗| 二连浩特市| 新巴尔虎右旗| 平南县| 辽中县| 仲巴县| 博客| 天水市| 凌源市| 西平县| 昭平县| 隆化县| 怀宁县| 宜兴市| 五原县| 长春市| 中宁县| 屏山县| 荣成市| 哈尔滨市| 定远县| 巍山| 平顶山市| 顺昌县| 麻栗坡县| 南和县| 东乌珠穆沁旗| 广宗县| 宁强县| 石景山区|