在智能儀表中,經常會用到鍵盤、數碼管等外設。因此,一個穩定、占用系統資源少的人機對話通道設計非常重要。傳統的鍵盤與數碼管解決方案,由于鍵盤與數碼管是分離的,因而電路連接比較復雜,不管是獨立式鍵盤還是矩陣式鍵盤,都會浪費微控制器的端口資源,而且都需要人為進行去抖動處理,且抗干擾性差。而數碼管部分,不管是靜態顯示方式還是動態顯示方式,在不進行鎖存器擴展的前提下。仍然要占用8根I/O端口線,這將嚴重浪費系統的端口資源。
ZLG7290可完全克服上述弊端。它采用I2C總線接口,與微控制器的連接僅需兩根信號線,硬件電路比較簡單。而且可以驅動8位共陰數碼管或64只獨立LED、64只獨立按鍵,并可提供自動消除抖動、連擊鍵計數等功能。這對于傳統的鍵盤與數碼管解決方案,無疑是不可想象的。強大的功能,豐富的資源,良好的接口,使得ZLG7290比傳統的鍵盤與數碼管解決方案且有更大的優越性。因此,在現代智能儀表的設計中,通過ZLG7290可為系統設計工程師設計出良好的人機對話通道,從而提供了一種理想的解決方案。
本文介紹linux下zlg7290驅動的編寫。
1. Zlg7290介紹
zlg7290可以驅動64個獨立按鍵和8個共陰極數碼管,64只按鍵中,前 56 個按鍵是普通按鍵 K1~K56,后 8 個為功能鍵 F0~F7,當然這8個按鍵也可以當普通按鍵使用。
本文分兩部分介紹這兩部分驅動的說明。
1.1. 芯片引腳圖
圖 芯片引腳圖
1.2. 參考原理圖
圖 參考原理圖
1.3. 按鍵相關寄存器:
芯片I2C從機地址
1.4. 按鍵相關寄存器:
鍵值寄存器 Key(地址: 01H)
如果某個普通鍵(圖 3.1 中的 K1~K56)被按下,則微控制器可以從鍵值寄存器 Key中讀取相應的鍵值 1~56。如果微控制器發現 ZLG7290B 的 INT 引腳產生了中斷請求,而從Key 中讀到的鍵值是 0,則表示按下的可能是功能鍵。鍵值寄存器 Key 的值在被讀走后自動變成 0。
功能鍵寄存器 FunctionKey(地址: 03H)
ZLG7290B 還提供有 8 個功能鍵(圖 3.1 中的 F0~F7)。功能鍵常常是配合普通鍵一起使用的,就像電腦鍵盤上的 Shift、 Ctrl 和 Alt 鍵。當然功能鍵也可以單獨去使用,就像電腦鍵盤上的 F1~F12。當按下某個功能鍵時,在 INT 引腳也會像按普通鍵那樣產生中斷信號。功能鍵的鍵值是被保存在 FunctionKey 寄存器中的。功能鍵寄存器 FunctionKey 的初始值是FFH,每一個位對應一個功能鍵,第 0 位( LSB)對應 F0,第 1 位對應 F1,依次類推,第 7位( MSB)對應 F7。某一功能鍵被按下時,相應的 FunctionKey 位就清零。功能鍵還有一個特性就是“二次中斷”,按下時產生一次中斷信號,抬起時又會產生一次中斷信號;而普通鍵只會在被按下時產生一次中斷。
1.5. 數碼管相關寄存器:
顯示緩沖區 DpRam0~DpRam7(地址: 10H~17H)
DpRam0~DpRam7 這 8 個寄存器的取值直接決定了數碼管的顯示內容。每個寄存器的8 個位分別對應數碼管的 a,b,c,d,e,f,dp 段, MSB 對應 a, LSB 對應 dp。例如大寫字母 H 的字型數據為 6EH(不帶小數點)或 6FH(帶小數點)。
圖一 數碼管段位定義
顯示編碼表