ZLG7290

ZLG7290

I2C_Start(); I2C_Read(); I2C_Stop();

0 引言

在智慧型儀表中,經常會用到鍵盤、數碼管等外設。因此,一個穩定、占用系統資源少的人機對話通道設計非常重要。傳統的鍵盤與數碼管解決方案,由於鍵盤與數碼管是分離的,因而電路連線比較複雜,不管是獨立式鍵盤還是矩陣式鍵盤,都會浪費微控制器的連線埠資源,而且都需要人為進行去抖動處理,且抗干擾性差。而數碼管部分,不管是靜態顯示方式還是動態顯示方式,在不進行鎖存器擴展的前提下。仍然要占用8根I/O連線埠線,這將嚴重浪費系統的連線埠資源。
ZLG7290可完全克服上述弊端。它採用I2C匯流排接口,與微控制器的連線僅需兩根信號線,硬體電路比較簡單。而且可以驅動8位共陰數碼管或64隻獨立LED、64隻獨立按鍵,並可提供自動消除抖動、連擊鍵計數等功能。這對於傳統的鍵盤與數碼管解決方案,無疑是不可想像的。強大的功能,豐富的資源,良好的接口,使得ZLG7290比傳統的鍵盤與數碼管解決方案且有更大的優越性。因此,在現代智慧型儀表的設計中,通過ZLG7290可為系統設計工程師設計出良好的人機對話通道,從而提供了一種理想的解決方案。
引腳圖引腳圖

1 ZLG7290的工作原理

ZLG7290的核心是一塊ZLG7290B晶片,它採用I2C接口,能直接驅動8位共陰式數碼管,同時可掃描管理多達64隻按鍵,實現人機對話的功能資源十分豐富。除具有自動消除抖動功能外,它還具有段閃爍、段點亮、段熄滅、功能鍵、連擊鍵計數等強大功能,並可提供10種數字和21種字母的解碼顯示功能,用戶可以直接向顯示快取寫入顯示數據,而且無需外接元件即可直接驅動數碼管,還可擴展驅動電壓和電流。此外,ZLG7290B的電路簡單,使用也很方便。
用戶按下某個鍵時,ZLG7290的INT引腳會產生一個低電平的中斷請求信號,讀取鍵值後,中斷信號就會自動撤銷。正常情況下,微控制器只需要判斷INT引腳就可以得到鍵盤輸入的信息。微控制器可通過兩種方式得到用戶的鍵盤輸入信息。其一是中斷方式,該方式的優點是抗干擾能力強,缺點是要占用微控制器的一個外部中斷源。其二是查詢方式,即通過不斷查詢INT引腳來判斷是否有鍵按下,該方式可以節省微控制器的一根I/O口線,但是代價是I2C匯流排處於頻繁的活動狀態,消耗電流多並且不利於抗干擾。

2基於ZLG7290的無功補償控制器設計

由於採用了I2C匯流排接口,因而用ZLG7290與微控制器設計電力儀表的硬體電路連線非常簡單。它只需要兩根信號線(一根數據線SDA,一根時鐘信號線SCL)。但應注意進行I2C通信的雙方要共地,並套用,INT傳遞鍵盤中斷信號。微控制器通過RST可以將ZLG7290復位。

一. 作用及其功能介紹

ZLG7290能夠直接驅動8 位共陰式數碼管(或64 只獨立的LED),同時還可以掃描管理多達64 只按鍵。其中有8 只按鍵還可以作為功能鍵使用,就像電腦鍵盤上的Ctrl、Shift、Alt 鍵一樣。另外ZLG7290B 內部還設定有連擊計數器,能夠使某鍵按下後不鬆手而連續有效。採用I2C 匯流排方式,與微控制器的接口僅需兩根信號線。可控掃描位數,可控任一數碼管閃爍。

二. 使用說明

ZLG7290B是基於I2C匯流排接口的晶片。主控單片機ADUC831作為主器件時,內部沒有I2C匯流排功能,因此需用SPI匯流排的引腳來模擬I2C匯流排。具體連線如下:
ZLG7290B ADUC831
GND DGND
SDA MOSI
SCL SCLOCK
/INT INT0
VCC DVDD
但是,這種連線不是唯一的,只是在所寫的軟體里需要這樣連線。其實中斷可以根據自己所選的中斷而定。地(GND)和電源(VCC)也可以另外從電源上接過來。所用電源為5V。
編譯軟體使用的是WSD,這個軟體主要是用於AD系列晶片的。只要下載擴展名為HEX的檔案即可。

三.軟體庫及調用說明

(1)I2C頭檔案庫
⑴ void I2C_Delay(); I2C延時程式
⑵ void I2C_Init(); I2C 匯流排初始化,使匯流排處於空閒狀態
⑶ void I2C_Start(); 產生I2C 匯流排的起始狀態
⑷ void I2C_Write(char dat); 向I2C 匯流排寫1 個位元組的數據
⑸ char I2C_Read(); 從從機讀取1 個位元組的數據
⑹ bit I2C_GetAck(); 讀取從機應答位
⑺ void I2C_PutAck(bit ack); 主機產生應答位或非應答位
⑻ void I2C_Stop(); 產生I2C 匯流排的停止狀態
⑼ void idle(); 將I2C匯流排置於空閒狀態,即將時鐘線和數據線都拉高
⑽ bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size); I2C 匯流排綜合傳送函式,向從機傳送多個位元組的數據
⑾ bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size);I2C 匯流排綜合接收函式,從從機接收多個位元組的數據
⑿ char gets2(unsigned char subaddr);
(2)ZLG7290函式館
首先要包含另一個庫ZLG7290B.h,裡面定義了ZLG7290的各個暫存器地址和它本身的地址。而zlg7290.h包含的函式如下:
⑴ bit ZLG7290_WriteReg(unsigned char RegAddr, char dat) 向ZLG7290 的某個內部暫存器寫入數據
⑵ unsigned char ZLG7290_ReadReg(unsigned char regaddr) 從ZLG7290 的某個內部暫存器讀出數據
⑶ bit ZLG7290_cmd(char cmd0, char cmd1) 向ZLG7290 傳送控制命令
⑷ bit ZLG7290_SegOnOff(char seg, bit b) 段定址,單獨點亮或熄滅數碼管(或LED)中的某一段
⑸ bit ZLG7290_Download(char addr, bit dp, bit flash, char dat) 下載數據並解碼
說明:⑴,⑵,⑶,⑷,⑸中的函式都有返回值,0表示正常返回,1表示訪問ZLG7290 時出現異常。
(3)主函式ZLG7290B.c;
void INT0_SVC() interrupt 0 中斷服務函式
void Delay1(unsigned int t) 延時函式
void SystemInit() 系統初始化函式,用於初始化定時器和讓ZLG7290復位
void ClearAll() 清除所有數碼管顯示函式
void Test_DispBuf() 測試直接寫顯存函式,
void Test_Download() 測試下載數據函式
void Test_ScanNum() 測試掃描不同數碼管函式
void Test_Flash() 測試閃爍功能函式
void Test_SegOnOff() 測試段定址函式,用於將數碼管分段點亮
void DispValue(char x, unsigned char dat) 以十進制顯示數據函式
void DispHexValue(char x, unsigned char dat) 以十六進制顯示數據函式
void Test_Key() 測試按鍵函式,自動讀出鍵值並且在數碼管上顯示

相關搜尋

熱門詞條

聯絡我們