一種有效的中斷輸入和LED動(dòng)態(tài)顯示方法
1 引 言
動(dòng)態(tài)顯示多采用專(zhuān)用芯片8279擴展鍵盤(pán)和LED顯示器,該方式可實(shí)現鍵盤(pán)的中斷方式或查詢(xún)方式輸入,但體積和功耗都較大。其他方式的擴展則難以實(shí)現動(dòng)態(tài)顯示,并且編程復雜,為克服以上缺陷,本文提出了在P1口的部分口線(xiàn)上實(shí)現2X8陣列的中斷方式鍵盤(pán)輸入和脫機硬件動(dòng)態(tài)顯示的新方法。
2 原 理
2.1 硬件設計
硬件原理電路如圖1所示。在8031(1C1)的P1.0~P1.4低5位口線(xiàn)和外部中斷INTl上實(shí)現鍵盤(pán)輸入和LED顯示器的擴展,其他口線(xiàn)全部留給用戶(hù)使用。P1.0,P1.1分別為鍵盤(pán)擴展芯片74LSl64(1C2)和LED驅動(dòng)芯片MCl4499(1C3)的公共時(shí)鐘和公共數據線(xiàn),P1.2,P1.3分別連接IC3,IC4的使能端EN。EN=1時(shí),IC3,IC4封閉,CPU可對IC2進(jìn)行復位、搜索準備和搜索鍵號等操作,IC2的數據打人在軟件上保證為前沿觸發(fā)。
![]() |

CPU欲對IC3操作時(shí),令EN=0,打開(kāi)IC3,然后采用后沿觸發(fā)的方式將數據寫(xiě)入IC3,寫(xiě)完后,再令EN=1,封閉IC3,IC3在封閉狀態(tài)下,內部的BCD-8段譯碼器自動(dòng)地將內部的BCD代碼譯成LED段數據,并且自動(dòng)、動(dòng)態(tài)循環(huán)地驅動(dòng)LED工作??诰€(xiàn)P1.3,P1.4分別為鍵盤(pán)低8位和高8位的行線(xiàn),2個(gè)行線(xiàn)分別接與門(mén)g5的2個(gè)輸入端。系統上電后,CPU首先運行初始化程序,將P1.3,P1.4分別置1,向IC2打人8個(gè)0,即全零狀態(tài),確保任一鍵按下時(shí),g5均輸出為0,從而使任一鍵盤(pán)輸入向CPU的中斷申請有效。
常用的鍵盤(pán)輸入多采用4×4陣列式16鍵輸入方式,如果需要顯示則需要擴展芯片,增加了設備的體積和復雜性。1×8的8鍵輸入,往往造成鍵數不夠使用,至于2×8的陣列,只是在一些文獻上提出采用多個(gè)74LSl64擴展1×8鍵盤(pán)和靜態(tài)顯示的設想,沒(méi)有論證和設計成形的東西,并且提出的是在串行口上擴展,用戶(hù)若需要使用串行口則較麻煩。
本方案在P1口部分口線(xiàn)上實(shí)現鍵盤(pán)和顯示的串行數據傳送,采用完全附合IC2和IC3時(shí)序要求的模擬編程時(shí)鐘實(shí)現串行通信,給用戶(hù)提供了較大的方便。并且體積小、功耗低、硬件簡(jiǎn)單、容易編程、實(shí)用可靠。
IC3(MCl4499)是一種硬件動(dòng)態(tài)LED顯示器驅動(dòng)器件,在數據打入、使能端電平升起后,能自動(dòng)地以動(dòng)態(tài)方式驅動(dòng)LED工作。顯然,他除了節省功耗,同時(shí)還節省機時(shí),即只要不更換顯示數據,CPU就無(wú)需對IC3操作。本方案充分利用了動(dòng)態(tài)顯示的主要特點(diǎn)。
IC2擴展鍵盤(pán),采用中斷方式,無(wú)鍵按下時(shí),CPU執行用戶(hù)程序,中斷處理一個(gè)鍵號,只需25ms左右,大大節省了機時(shí)。有關(guān)MCl4499的封裝、時(shí)序要求、數據格式及真值表請參考有關(guān)文獻。
2.2 軟件設計 主程序的基本流程如圖2所示。系統上電運行主程序,初始化時(shí)先向IC2寫(xiě)人8個(gè)0,即全零狀態(tài)。用戶(hù)按任意鍵,將使CPU進(jìn)人中斷服務(wù)程序,此后,先將全0標志清零,再將IC2置為7個(gè)1、個(gè)位為。的搜索狀態(tài),然后采用循環(huán)移位方式搜索鍵號,求出鍵值,改寫(xiě)顯示,最后返回主程序,并向主程序交付參數。從中斷返回時(shí),主程序查得全零標志必然為0,因此運行一此全零初始化程序,使IC2重新置成全零狀態(tài),以便響應再次的鍵盤(pán)中斷。接著(zhù)查本次鍵值是否為執行鍵,不為執行鍵則返回,為執行鍵則前4位鍵必然已經(jīng)得到,CPU便根據第1位功能鍵所鍵入的后3位參數執行用戶(hù)程序。
圖3是中斷服務(wù)程序流程圖。
R6是列查詢(xún)計數器,每查詢(xún)一列,R6自動(dòng)減1,8列判斷完畢,沒(méi)得到鍵號則返回。對每一列,都要對兩行分別判斷是否為0,延遲12ms是消抖動(dòng),對一行、二行在同一列所得到的鍵采用不同的運算方法,從而準確地算出鍵值,等待到鍵釋放后,位標志自動(dòng)增1,記住鍵位,以便數據處理子程序、顯示子程序能夠知道所得鍵值是一組數據的第幾位。
數據處理子程序根據中斷服務(wù)程序所指定的位數,將本次中斷所得到的數據按照要求排列在約定的顯示數據存儲單元相應的位上,以便顯示子程序提??;并根據鍵值確定返回數據;并將反回數據放置在約定的返回數據存儲區相應單元內,以便主程序查閱。顯示子程序按照硬件時(shí)序要求將顯示數據打人LED驅動(dòng)器IC3或IC4,然后,先返回數據處理子程序,接著(zhù)再返回中斷服務(wù)程序。
最后再從中斷服務(wù)程序返回主程序。數據處理子程序流程圖,如圖4所示。
他被中斷服務(wù)程序調用,完成顯示數據的排序和反回數據的處理以及兩種數據的約定存儲。顯示子程序的流程如圖5所示。他被數據處理子程序調用,完成向LED驅動(dòng)器IC3或IC4打人顯示數據。
在主程序中,根據用戶(hù)目標系統及外部情況變化,CPU執行用戶(hù)其他程序,只有從中斷服務(wù)程序返回后,第一次判別時(shí),才執行一次全零初始化程序,將IC2清為全零狀態(tài),無(wú)鍵按下時(shí),中斷服務(wù)程序、數據處理、數據顯示子程序均不執行。顯然,CPU在執行主程序過(guò)程中也總是跳過(guò)零初始化程序。
2.3 調 試
在圖1硬件電路中,應注意LED必須為共陰極的數碼管,根據LED大小不同,可適當減小陽(yáng)極驅動(dòng)電阻,或增加門(mén)電路驅動(dòng)功率。Cost也要選擇合適,以顯示器LED不閃爍為準。
軟件調試應注意中斷觸發(fā)方式,原則上后沿觸發(fā)、電平觸發(fā)均可,但一定要注意后沿觸發(fā)時(shí),中斷服務(wù)程序內就不必對中斷標志清零。
3 結 語(yǔ)
本文所提出的方法,在多個(gè)應用項目中使用用戶(hù)剩余的端口空間大,軟件移植方便,硬件變易掛接。
評論