<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

51單片機系統與標準PC鍵盤(pán)的接口模塊設計

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

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

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

51單片機系統與標準PC鍵盤(pán)的接口模塊設計

圖4 主程序流程圖

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


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>