新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機系統與標準PC鍵盤的接口模塊設計

        51單片機系統與標準PC鍵盤的接口模塊設計

        作者: 時間:2011-11-07 來源:網絡 收藏
        在主程序中檢測到blnDataValid標志后,即說明在鍵盤接收緩沖區中已接收到一個新的位置掃描碼序列,程序根據這個序列的不同特點做不同的處理,最后再根據硬件跳線的設置得到相應按鍵的Windows虛擬鍵代碼或ASCII碼與OEM掃描碼,圖4中的跳線接至“W”位時,編碼為Windows虛擬鍵代碼。虛擬鍵代碼是Windows系統中引入的一組按鍵編碼常量,每一個按鍵都有惟一的碼值與之對應。ASCII碼與OEM掃描碼則是在DOS系統定義的,但在Windows系統中沿用的按鍵碼值定義,每一個按鍵都有兩個碼值與之對應,對于功能鍵,例如F1、HOME、UP等,只存在OEM掃描碼,其ASCII碼為0,參見表1。

        棧是程序中設置的發送緩沖區,它是按“先進先出”原則建立的32字節循環隊列,有一個隊列頭指針和一個隊列尾指針。進隊列時,編碼數據進入由隊列尾指針所指單元,同時隊列尾指針增量,指向下一個單元,當數據不斷進入隊列,使尾指針指向隊列末端時,尾指針循環重新繞回隊列始端;出隊列時,編碼數據從隊列頭指針所指的單元取出,同時隊列頭指針增量,指向下一個單元,在頭指針指向隊列末端時,也要重新繞回隊列始端,但頭指針始終不能“超過”尾指針。如果按鍵速度快于上位單片機接收碼值的速度,有可能尾指針繞回后與頭指針再次相等,這時表明隊列已滿,不能再存入數據,如果此時再有鍵按下,那么棧溢出指示燈將點亮。

        在系統中設立了三個標志分別對應于CAPS LOCK鍵、NUM LOCK鍵及SCROLL LOCK鍵的狀態,每次有這三個鍵按下時,程序都要翻轉相應標志,然后向鍵盤發送EDH命令,命令鍵盤對其上的三個LED指示燈做相應激勵。
        在向上位單片機發送棧首的碼值之前要先檢測ACK信號狀態以確定上位單片機是否已取走上次碼值。若ACK信號有效,則將碼值鎖存在P1口上,然后由P3.7產生模擬的時鐘脈沖信號,一方面將8位并行碼值置入串-并轉換芯片(74LS165)中,另一方面將觸發器(74LS74)置為1,使端變為0,為上位單片機提供碼值準備好(PS_READY#)的狀態信號,并點亮指示燈。在上位單片機中,可查詢此狀態信號也可利用此狀態信號申請中斷。上位單片機若采用并行接口方法,則發出讀緩沖器信號(P_RD#)和片選信號(P_CS#),便可通過三態緩沖器(74LS244)取得鍵值;若采用串行接口方法,則需發出串行時鐘(S_CLK),從74LS165的串行數據端(S_DAT)讀回8位碼值。在上位單片機讀取完當前的鍵值后,ACK信號將由握手邏輯自動置為有效,系統可通過檢測ACK信號的狀態以發送下一個碼值。

        51單片機系統與標準PC鍵盤的接口模塊設計

        圖4 主程序流程圖

        結語
        實踐證明應用該模塊不但可大大地簡化鍵盤電路及程序設計,而且在使用高級語言書寫程序時更加方便。該模塊可識別標準上的所有按鍵,并能自動考慮SHIFT、NUMLOCK及CAPLOCK鍵對編碼的影響。對于DOS系統中CRTL+按鍵、ALT+按鍵等組合鍵,該模塊并未考慮,但相對上位的而言,目前所提供的按鍵數量已足夠用了。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 三门县| 张家川| 南宁市| 丰台区| 改则县| 江西省| 松桃| 阿尔山市| 永兴县| 扶沟县| 浑源县| 页游| 台湾省| 林甸县| 天津市| 永平县| 南城县| 兰州市| 亳州市| 新蔡县| 游戏| 荥阳市| 延长县| 嘉兴市| 留坝县| 长治县| 政和县| 自贡市| 曲沃县| 淮阳县| 津市市| 吴旗县| 墨竹工卡县| 南昌县| 内乡县| 巩义市| 七台河市| 邻水| 明溪县| 庐江县| 怀仁县|