<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 光電顯示 > 設計應用 > 一種有效的中斷輸入和LED動態(tài)顯示方法

          一種有效的中斷輸入和LED動態(tài)顯示方法

          作者: 時間:2012-02-08 來源:網(wǎng)絡 收藏

          1 引 言
          多采用專用芯片8279擴展鍵盤和器,該方式可實現(xiàn)鍵盤的方式或查詢方式,但體積和功耗都較大。其他方式的擴展則難以實現(xiàn),并且編程復雜,為克服以上缺陷,本文提出了在P1口的部分口線上實現(xiàn)2X8陣列的方式鍵盤和脫機硬件顯示的新。

          本文引用地址:http://www.ex-cimer.com/article/168569.htm

          2 原 理

          2.1 硬件設計

          硬件原理電路如圖1所示。在8031(1C1)的P1.0~P1.4低5位口線和外部INTl上實現(xiàn)鍵盤顯示器的擴展,其他口線全部留給用戶使用。P1.0,P1.1分別為鍵盤擴展芯片74LSl64(1C2)和驅(qū)動芯片MCl4499(1C3)的公共時鐘和公共數(shù)據(jù)線,P1.2,P1.3分別連接IC3,IC4的使能端EN。EN=1時,IC3,IC4封閉,CPU可對IC2進行復位、搜索準備和搜索鍵號等操作,IC2的數(shù)據(jù)打人在軟件上保證為前沿觸發(fā)。

          CPU欲對IC3操作時,令EN=0,打開IC3,然后采用后沿觸發(fā)的方式將數(shù)據(jù)寫入IC3,寫完后,再令EN=1,封閉IC3,IC3在封閉狀態(tài)下,內(nèi)部的BCD-8段譯碼器自動地將內(nèi)部的BCD代碼譯成LED段數(shù)據(jù),并且自動、動態(tài)循環(huán)地驅(qū)動LED工作。口線P1.3,P1.4分別為鍵盤低8位和高8位的行線,2個行線分別接與門g5的2個輸入端。系統(tǒng)上電后,CPU首先運行初始化程序,將P1.3,P1.4分別置1,向IC2打人8個0,即全零狀態(tài),確保任一鍵按下時,g5均輸出為0,從而使任一鍵盤輸入向CPU的中斷申請

          常用的鍵盤輸入多采用4×4陣列式16鍵輸入方式,如果需要顯示則需要擴展芯片,增加了設備的體積和復雜性。1×8的8鍵輸入,往往造成鍵數(shù)不夠使用,至于2×8的陣列,只是在一些文獻上提出采用多個74LSl64擴展1×8鍵盤和靜態(tài)顯示的設想,沒有論證和設計成形的東西,并且提出的是在串行口上擴展,用戶若需要使用串行口則較麻煩。

          本方案在P1口部分口線上實現(xiàn)鍵盤和顯示的串行數(shù)據(jù)傳送,采用完全附合IC2和IC3時序要求的模擬編程時鐘實現(xiàn)串行通信,給用戶提供了較大的方便。并且體積小、功耗低、硬件簡單、容易編程、實用可靠。

          IC3(MCl4499)是一種硬件動態(tài)LED顯示器驅(qū)動器件,在數(shù)據(jù)打入、使能端電平升起后,能自動地以動態(tài)方式驅(qū)動LED工作。顯然,他除了節(jié)省功耗,同時還節(jié)省機時,即只要不更換顯示數(shù)據(jù),CPU就無需對IC3操作。本方案充分利用了動態(tài)顯示的主要特點。

          IC2擴展鍵盤,采用中斷方式,無鍵按下時,CPU執(zhí)行用戶程序,中斷處理一個鍵號,只需25ms左右,大大節(jié)省了機時。有關MCl4499的封裝、時序要求、數(shù)據(jù)格式及真值表請參考有關文獻。

          2.2 軟件設計 主程序的基本流程如圖2所示。系統(tǒng)上電運行主程序,初始化時先向IC2寫人8個0,即全零狀態(tài)。用戶按任意鍵,將使CPU進人中斷服務程序,此后,先將全0標志清零,再將IC2置為7個1、個位為。的搜索狀態(tài),然后采用循環(huán)移位方式搜索鍵號,求出鍵值,改寫顯示,最后返回主程序,并向主程序交付參數(shù)。從中斷返回時,主程序查得全零標志必然為0,因此運行一此全零初始化程序,使IC2重新置成全零狀態(tài),以便響應再次的鍵盤中斷。接著查本次鍵值是否為執(zhí)行鍵,不為執(zhí)行鍵則返回,為執(zhí)行鍵則前4位鍵必然已經(jīng)得到,CPU便根據(jù)第1位功能鍵所鍵入的后3位參數(shù)執(zhí)行用戶程序。

          圖3是中斷服務程序流程圖。

          R6是列查詢計數(shù)器,每查詢一列,R6自動減1,8列判斷完畢,沒得到鍵號則返回。對每一列,都要對兩行分別判斷是否為0,延遲12ms是消抖動,對一行、二行在同一列所得到的鍵采用不同的運算,從而準確地算出鍵值,等待到鍵釋放后,位標志自動增1,記住鍵位,以便數(shù)據(jù)處理子程序、顯示子程序能夠知道所得鍵值是一組數(shù)據(jù)的第幾位。

          數(shù)據(jù)處理子程序根據(jù)中斷服務程序所指定的位數(shù),將本次中斷所得到的數(shù)據(jù)按照要求排列在約定的顯示數(shù)據(jù)存儲單元相應的位上,以便顯示子程序提取;并根據(jù)鍵值確定返回數(shù)據(jù);并將反回數(shù)據(jù)放置在約定的返回數(shù)據(jù)存儲區(qū)相應單元內(nèi),以便主程序查閱。顯示子程序按照硬件時序要求將顯示數(shù)據(jù)打人LED驅(qū)動器IC3或IC4,然后,先返回數(shù)據(jù)處理子程序,接著再返回中斷服務程序。

          最后再從中斷服務程序返回主程序。數(shù)據(jù)處理子程序流程圖,如圖4所示。

          他被中斷服務程序調(diào)用,完成顯示數(shù)據(jù)的排序和反回數(shù)據(jù)的處理以及兩種數(shù)據(jù)的約定存儲。顯示子程序的流程如圖5所示。他被數(shù)據(jù)處理子程序調(diào)用,完成向LED驅(qū)動器IC3或IC4打人顯示數(shù)據(jù)。

          在主程序中,根據(jù)用戶目標系統(tǒng)及外部情況變化,CPU執(zhí)行用戶其他程序,只有從中斷服務程序返回后,第一次判別時,才執(zhí)行一次全零初始化程序,將IC2清為全零狀態(tài),無鍵按下時,中斷服務程序、數(shù)據(jù)處理、數(shù)據(jù)顯示子程序均不執(zhí)行。顯然,CPU在執(zhí)行主程序過程中也總是跳過零初始化程序。

          2.3 調(diào) 試

          在圖1硬件電路中,應注意LED必須為共陰極的數(shù)碼管,根據(jù)LED大小不同,可適當減小陽極驅(qū)動電阻,或增加門電路驅(qū)動功率。Cost也要選擇合適,以顯示器LED不閃爍為準。

          軟件調(diào)試應注意中斷觸發(fā)方式,原則上后沿觸發(fā)、電平觸發(fā)均可,但一定要注意后沿觸發(fā)時,中斷服務程序內(nèi)就不必對中斷標志清零。

          3 結(jié) 語

          本文所提出的,在多個應用項目中使用用戶剩余的端口空間大,軟件移植方便,硬件變易掛接。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();