智能手機(jī)全鍵盤(pán)控制器及其編程
②MAX7359初始化MAX7359初始化過(guò)程如下(假設(shè)MAX7359設(shè)置I2C地址的AD0引腳接地,將MAX7359的I2C讀/寫(xiě)地址設(shè)為Ox71/0x70);
/*MAX7359初始化開(kāi)始*/
I2C_Write(0x70,0x01,0x08); //關(guān)斷,開(kāi)始初始化
I2C_Write(0x70,0x02,0x01); //10 ms去抖,可調(diào)
I2C_Write(0x70,0x03,0x01); //按鍵消息FIFO非空則觸發(fā)中斷
I2C_Wirte(0x70,0x04,0); //防止錯(cuò)誤觸發(fā)GPIO
I2C_Write(0x70,0x05,0); //關(guān)閉自動(dòng)重復(fù)功能
I2C_Write(0x70,0x06,0); //關(guān)閉自動(dòng)關(guān)斷功能,可根據(jù)需要打開(kāi)自動(dòng)關(guān)斷功能,關(guān)斷前的等待時(shí)間可設(shè)。
I2C_Write(0x70,0x01,0x88); //啟動(dòng)器件正常功能
/*MAX7359初始化結(jié)束*/本文引用地址:http://m.butianyuan.cn/article/166882.htm
3 讀取按鍵消息
3.1 設(shè)置FIFO寄存器
收到硬件中斷后,先通過(guò)一次寫(xiě)操作設(shè)置FIFO寄存器地址:0x00。
I2C_Write(0x70,0x00)://如果寫(xiě)一次FIFO地址之后沒(méi)有對(duì)MAX7359其他控制寄存器的讀寫(xiě),則下次讀FIFO寄存器,可不用再寫(xiě)FIFO地址。
I2C_Read(0x71,字節(jié)變量);
…… //重復(fù)讀FIFO直至讀到代表
FIFO為空的0x3f,可以沒(méi)一個(gè)最大次數(shù),如256次,如果一次中斷后讀了256次FIFO里還有沒(méi)讀到0x3f,則軟重啟軟重啟過(guò)程如下:
I2C_Write(0x70,0x0 1,0x08);
I2C_Write(0x70,0x01,0x88);
3.2 FIFO消息的處理
處理讀到的FIFO字節(jié)變量(假設(shè)變量名為:FIFO_BYTE)后,軟件處理方法如下:
(1)將從FIFO收到的非0x3f的字節(jié)變量FIFO_BYTE和0x3f取與(AND 0x3f),結(jié)果值為按鍵值(即0至63號(hào)鍵中某一個(gè)被按下或釋放)。
(2)再將該FIFO_BYTE和0x40取與(AND 0x40),結(jié)果為0則說(shuō)明按鍵被按下,結(jié)果非0則說(shuō)明按鍵被釋放。如果硬件布線時(shí)使用了63號(hào)和62號(hào)鍵,F(xiàn)IFO_BYTE處理復(fù)雜,請(qǐng)軟件設(shè)計(jì)工程師參考MAX7359編程指南的62號(hào)和63號(hào)鍵處理方法。
3.3 長(zhǎng)按鍵處理
通常需要起一個(gè)定時(shí)器,定時(shí)檢查還未收到鍵盤(pán)釋放信息的鍵盤(pán)按下信息都是何時(shí)發(fā)生的,如果是當(dāng)前時(shí)間減去按鍵按下的時(shí)間滿(mǎn)足長(zhǎng)按鍵時(shí)間,就可向上層軟件發(fā)長(zhǎng)按鍵消息。
評(píng)論