在單片機應用系統(tǒng)中,,存在多種形式的外部數(shù)據(jù)輸入接口界面,,例如RS-232C串行通信、鍵盤輸入等[1,4] ,。其中利用鍵盤接口輸入數(shù)據(jù),,是實現(xiàn)現(xiàn)場實時調試、數(shù)據(jù)調整和控制最常用的方法,。單片機的外圍鍵盤擴展電路有多種實現(xiàn)方式,,例如直接利用I/O接口線或外接8255A接口芯片,配合適當?shù)慕涌诠芾沓绦?,就可以實現(xiàn)外圍鍵盤擴展功能,。但是,在這些方法中,,鍵盤擴展電路需要占用單片機的資源對按鍵進行監(jiān)控和處理,,這對要求高實時性處理的單片機系統(tǒng)是不現(xiàn)實的。
為了解決這一問題,,可以使用專用鍵盤接口芯片(例如Intel8279) [2]來組建鍵盤子系統(tǒng),。然而,,這類專用鍵盤接口芯片在使用靈活性方面尚有欠缺,尤其當用戶需要實現(xiàn)某些特定功能時,,其缺點更為明顯,。針對上述問題,本文提出一種利用復雜可編程邏輯器件(Complex Programmable Logic Device,,CPLD)設計技術[3]實現(xiàn)專用鍵盤接口芯片的方案,。
1 系統(tǒng)原理
圖1是單片機系統(tǒng)中鍵盤子系統(tǒng)的構成原理框圖。其中鍵盤接口芯片KB-CORE是該子系統(tǒng)的核心部分,,它應具備如下功能:第一,,產生按鍵掃描時序,并進行硬件去抖動,。如果有按鍵按下,,實現(xiàn)按鍵編碼、中斷處理等功能,。第二,,可以區(qū)分處理數(shù)字鍵和功能鍵。數(shù)字鍵將由接口芯片暫存,,而當功能鍵被按下時申請CPU中斷處理,;對多個按鍵同時按下,按一定的編碼優(yōu)先級處理,。第三,,提供與MCS-51系列單片機兼容的接口,單片機可以讀取芯片中保存的數(shù)據(jù)或功能代碼,。第四,,提供數(shù)據(jù)顯示接口,可以直接驅動4位七段LED數(shù)碼管,,并進行動態(tài)掃描顯示,。
按鍵根據(jù)鍵盤子系統(tǒng)的服務對象擬設置了數(shù)字鍵(0~9)、功能鍵(ROW,、COL,、DAT),、清零鍵(CLR)共14個,,排成4×4的矩陣,有兩個未定義,。
2 專用鍵盤接口芯片功能結構設計
根據(jù)上述專用鍵盤芯片KB-CORE的功能要求,,圖2示出本芯片內部應有的結構框圖。其工作原理如下:(1)鍵盤掃描控制及編碼電路中內含一個環(huán)形計數(shù)器,。該計數(shù)器計數(shù)輸出至KSL [0~3]端作為鍵盤掃描信號,。每當掃描信號發(fā)生變化時,,鍵盤掃描控制器從KRL[0~3]端讀入某一行按鍵的狀態(tài)信號。如果沒有按鍵被按下,,則掃描下一行,;如果有按鍵被按下,則控制器鎖定被掃描行,,并延遲約10ms去抖動,,然后再次掃描被鎖定行以確定按鍵是否誤讀。如果按鍵被證實按下,,則一直等待直至用戶松開該鍵,。與此同時,數(shù)字鍵碼將被保存到先進先出存儲器,,功能鍵則直接產生中斷請求信號IRQ,,通知CPU讀取鍵碼DBO[0~7]。(2)FIFO RAM中數(shù)據(jù)容量為16位,。每4位對應一個字形符,,所以七段LED數(shù)碼管需要4位。(3)掃描發(fā)生器一方面產生LED的位選信號DSL[0~3],,另一方面產生掃描顯示輸出控制電路的位數(shù)據(jù)選通信號,。掃描顯示輸出控制電路根據(jù)位數(shù)據(jù)選通信號讀取FIFO RAM中相對應的數(shù)據(jù),然后送七段譯碼電路輸出DP[0~6]驅動LED顯示屏的段選信號電極,。(4)接口控制電路一方面用來識別CPU的讀時序,;另一方面用來對地址信號線A1A0譯碼,實現(xiàn)對輸出數(shù)據(jù)的選擇,。若A0A1="00",,則輸出FIFO RAM中的低字節(jié)數(shù)據(jù);若A0A1="01",,則輸出FIFO RAM中的高字節(jié)數(shù)據(jù),;若A0A1="10",則輸出控制數(shù)據(jù)(表明ROW,、COL,、DAT中哪一個被按下);若A0A1="11",,則不輸出FIFO RAM中的任何數(shù)據(jù),。
3 專用鍵盤接口芯片核心部分的狀態(tài)描述與實現(xiàn)
為了實現(xiàn)上述專用鍵盤接口芯片功能結構,利用可編程邏輯技術對各個功能塊進行邏輯時序描述和實現(xiàn),。由于鍵盤掃描控制和去抖的邏輯時序設計較復雜并具典型性,,因此下面將對鍵盤掃描控制和去抖部分的設計思想進行介紹。
鍵盤掃描時序的基本原理[4]可以用圖3所示的狀態(tài)圖表示,。狀態(tài)圖的輸入變量為RST(復位),、KEY-PRESS(有按鍵),、TIMER-OVER(去抖動延時結束);輸出變量包括EN-SCAN(掃描行轉移),、EN-CODED(鍵盤編碼啟動),、START-TIMER(開啟去抖動延時)。從圖3中知道,,狀態(tài)S0→S1→S2為按鍵掃描狀態(tài)鏈,,狀態(tài)S3→S4→S5為去抖延時狀態(tài)鏈,狀態(tài)S6為按鍵保持期,。當按鍵被按下時,,進入啟動(S3)去抖延時狀態(tài)鏈;去抖延時結束后(S5),,若按鍵沒有按下則恢復掃描狀態(tài)鏈(S0),;若按鍵確認被按下則進入保持期(S6),并輸出按鍵編碼維持至按鍵松開,。
根據(jù)狀態(tài)圖3和上述的狀態(tài)轉移描述,,進行鍵盤掃描控制電路的設計,結果如圖4所示,。其中H3是6位循環(huán)移位寄存器,,由時鐘CLK觸發(fā)實現(xiàn)狀態(tài)移位。移位寄存器的輸出Q0~Q5分別代表鍵盤掃描控制電路的狀態(tài)S0~S6,,當然它們并非一一對應,,但實現(xiàn)的功能相同。值得一提的是,,如果專用鍵盤芯片KB-CORE的外部時鐘CLK來自單片機的ALE信號(如圖1所示),,當單片機時鐘為6MHz時,則專用鍵盤芯片KB-CORE的外接時鐘為1MHz的方波信號,,信號周期為1μs,。如果將該時鐘信號經(jīng)過一個分頻器,使其輸出的信號周期約為Tclk=1μs×212≈4ms,,然后再作為H3的時鐘信號,。這意味著鍵盤掃描控制電路約4ms掃描一行按鍵。如果H3中的Q2態(tài)沒有被使用,,則可以實現(xiàn)約8ms的去抖動延時,。通過這樣的設計,可以免除延時計數(shù)器,,簡化電路,。
4 專用鍵盤接口芯片的實現(xiàn)
根據(jù)實時數(shù)據(jù)校正系統(tǒng)的設計要求,,使用了34個自定義I/O引腳和PC44封裝的CPLD來實現(xiàn)專用鍵盤接口芯片KB-CORE,。芯片型號的選擇依據(jù)綜合所需要的宏單元(Macrocells)個數(shù)決定,。如果借助硬件描述語言VHDL[5]對上述設計進行描述,綜合結果需要約140個宏單元,;如果改用原理圖輸入方式,,則只需約60個宏單元。因此選用XC9572芯片可以滿足上述專用鍵盤接口芯片KB-CORE的要求,。實際使用如圖1和圖2所示,,操作結果表明鍵盤接口芯片性能穩(wěn)定。