<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è) > 嵌入式系統 > 設計應用 > 擴展鍵盤(pán)電路及其編程

擴展鍵盤(pán)電路及其編程

作者: 時(shí)間:2012-03-28 來(lái)源:網(wǎng)絡(luò ) 收藏

1.

本文引用地址:http://dyxdggzs.com/article/171754.htm

AT89C2051是美國ATMEL公司采用CMOS工藝生產(chǎn)的20腳八位單片機。它帶有2k字節flash ROM和128字節的片內RAM,15根I/O線(xiàn),2個(gè)16位定時(shí)/計數器,5個(gè)兩級中斷源,一個(gè)全雙工串行口。另外還帶有精確的模擬比較器、片內振蕩器和時(shí)鐘。其指令集和輸出管腳與工業(yè)標準的MCS-51系列器件兼容,是當前性/價(jià)比較高的一種八位單片機。

雖然采用8279/8155 等芯片較為方便,但在某些場(chǎng)合,特別是要求較為緊湊、印刷電路板較小的情況下,AT89C2051較為合適。其優(yōu)點(diǎn)是體積小、成本低,同時(shí)在合理安排15根I/O口線(xiàn)的情況下,可以獲得與8279/8155相同數量甚至更高的鍵盤(pán)數。其難點(diǎn)在于,在軟件中必須妥善解決鍵盤(pán)掃描、去抖動(dòng)、雙鍵同時(shí)按下、與上位機通訊等問(wèn)題。

47.jpg

圖1所示為采用AT89C2051構成的鍵盤(pán)擴展電路。AT89C2051的串行口作為上位機的通訊口,以減輕多機通訊時(shí)上位機的串行負擔,P1.0口線(xiàn)向上位機申請中斷。為提高電路工作的可靠性,可以采用MAX705/706、MAX813L等看門(mén)狗電路,負責對CPU進(jìn)行監視。本文采用MAX706復位/看門(mén)狗電路,并采用P3.7口線(xiàn)對其定時(shí)刷新,即“喂狗”。采用74LS138擴展行掃線(xiàn),使用 P1.1、P1.2、P1.3對其進(jìn)行控制,使行掃線(xiàn)依次改變狀態(tài)。采用這種方法,行掃線(xiàn)最多為八根。由于本文鍵盤(pán)僅為20鍵,因此采用P1.4、 P1.5、P1.6、P1.7作為列掃線(xiàn)已經(jīng)足夠。對于所需鍵盤(pán)數更多的情況,可以補充P3.5、P3.4、P3.3、P3.2等口線(xiàn)作為列掃線(xiàn)。在此情況下,可以擴展的鍵盤(pán)數為64鍵。如不存在多機通訊的要求,可以繼續補充P1.0口線(xiàn)作為列掃線(xiàn)。在此情況下,可擴展的鍵盤(pán)數為72個(gè)。如以P1.0擴展行掃線(xiàn),采用兩片74LS138或其它4-16譯碼器,則可擴展的鍵盤(pán)數最多可達128個(gè)。本電路中采用AT89C52作為上位機。

2. 軟件結構

2.1 軟件去抖動(dòng)處理

按鍵的觸點(diǎn)在閉合和斷開(kāi)時(shí)均會(huì )產(chǎn)生抖動(dòng),這時(shí)觸點(diǎn)的邏輯電平是不穩定的,如不妥善處理,將會(huì )引起按鍵命令的錯誤執行或重復執行。本文采用軟件延時(shí)的方法來(lái)避開(kāi)抖動(dòng)階段,在延時(shí)開(kāi)始和結束時(shí)讀取列掃線(xiàn)狀態(tài),如果一致,則判斷有鍵按下。延時(shí)時(shí)間為10ms。

2.2 按鍵連擊的處理

連擊是指操作者按下某一鍵但沒(méi)有釋放該鍵,則該鍵對應的功能將反復被執行,好象操作者在連續操作該鍵一樣。由于單片機的速度較快,這種情況很容易發(fā)生。連擊在很多情況下是不允許的,它使操作者很難準確地進(jìn)行操作。

解決連擊的關(guān)鍵是一次按鍵只讓它響應一次,該鍵不釋放就不執行第二次。

2.3 鍵盤(pán)掃描

本文采用的鍵盤(pán)為20鍵的小鍵盤(pán),其掃描碼較為簡(jiǎn)單,可參見(jiàn)圖1,在此不作專(zhuān)門(mén)介紹。

2.4 與上位機通訊本文提出的方法是采用串行口進(jìn)行通訊的。采用定時(shí)/計數器1為波特率發(fā)生器,具體數值為1200bps。AT89C2051采用串行中斷方式與上位機進(jìn)行通訊;而上位機的鍵盤(pán)響應與處理則安排在外中斷1服務(wù)程序中。上位機在INT1中斷服務(wù)程序中首先應向鍵盤(pán)發(fā)送相應的地址,然后再進(jìn)入接收狀態(tài)。在上位機的中斷服務(wù)程序中,還可以設置接收鍵值的時(shí)間范圍,超時(shí)則認為此鍵值作廢。

2.5 MAX706的復位

AT89C2051對MAX706的復位安排在定時(shí)/計數器0的中斷服務(wù)程序中。而上位機對MAX706等監控電路的復位可以自由安排,但必須在1.6s之內完成。

48.jpg

DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY



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

關(guān)鍵詞: 編程 及其 電路 鍵盤(pán) 擴展

評論


相關(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>