CH452相關(guān)問(wèn)題,尋求解決

請(qǐng)問(wèn),我用LPC2220的一個(gè)I2C口模擬I2C時(shí)序控制CH452和24C512

怎么在讀寫(xiě)512后,鍵盤(pán)操作命令就無(wú)效,而且鍵盤(pán)偶爾會(huì)死機(jī),請(qǐng)問(wèn)都是什么原因造成的

同時(shí)我開(kāi)啟返回應(yīng)答命令后,寫(xiě)命令進(jìn)去后讀取應(yīng)答包操作,就不能操作鍵盤(pán).

還有就是只用452鍵盤(pán)功能的情況下,452的功耗是多大,我寫(xiě)命令進(jìn)入休眠模式,電流好象并沒(méi)有減小,同時(shí)進(jìn)入休眠模式后不能喚醒.我使用的批號(hào)是 202705071

相關(guān)程序如下: static void CH452_WriteCommand(uint16 cmd) { Start_I2C(); //啟動(dòng)總線(xiàn) Writebyte_I2C((uint8)(cmd>>7)&CH452_MASK|CH452_ADDR); //if(Cack_I2C() == 0) //{ Writebyte_I2C((uint8)cmd); //Stop_I2C(); //} Stop_I2C(); //停止總線(xiàn)

}

static uint8 CH452_ReadKey(void) { uint8 keycode = 0xFF; Start_I2C(); //啟動(dòng)總線(xiàn) Writebyte_I2C((uint8)(CH452_GET_KEY>>7)&CH452_MASK|CH452_ADDR|0x01); Cack_I2C(); //接收應(yīng)答信號(hào) 返回1 keycode = Readbyte_I2C();

Nack_I2C(); //不產(chǎn)生應(yīng)答 Stop_I2C(); //停止總線(xiàn) return(keycode); }

static uint8 Cack_I2C(void) { uint8 F0; IIC_Delays(DELEYTIME); //延時(shí) EROM_SDA_H(); IIC_Delays(DELEYTIME); //延時(shí) EROM_SCL_H(); IIC_Delays(DELEYTIME); //延時(shí) if(EROM_SDA_STATUS() ==0) { F0 = 0; } else { F0 = 1; } EROM_SCL_L(); IIC_Delays(DELEYTIME); //延時(shí) return(F0); } void CH452_Init(void) { EINT2_Init(); //Start_I2C(); //啟動(dòng)總線(xiàn) //Writebyte_I2C((uint8)(CH452_RESET>>7)&CH452_MASK|CH452_ADDR); //Writebyte_I2C((uint8)CH452_RESET); //Stop_I2C(); //停止總線(xiàn) //Start_I2C(); //啟動(dòng)總線(xiàn) //Writebyte_I2C((uint8)(CH452_ACK>>7)&CH452_MASK|CH452_ADDR); //Writebyte_I2C((uint8)CH452_ACK); //Stop_I2C(); //停止總線(xiàn) CH452_WriteCommand(CH452_RESET); //芯片復(fù)位 CH452_WriteCommand(CH452_ACK); //開(kāi)ACK功能 CH452_WriteCommand(CH452_SYSON); //開(kāi)鍵盤(pán)掃描功能 //Start_I2C(); //啟動(dòng)總線(xiàn) //Writebyte_I2C((uint8)(CH452_SYSON>>7)&CH452_MASK|CH452_ADDR); //Writebyte_I2C((uint8)CH452_SYSON); //Stop_I2C(); //停止總線(xiàn) }

有個(gè)問(wèn)題不明白 為什么我寫(xiě)命令的時(shí)候 都已經(jīng)開(kāi)啟了有返回應(yīng)答包命令 確不能讀應(yīng)答包

而在讀取鍵值的時(shí)候確要讀取一個(gè)應(yīng)答 是不是我的延時(shí)有問(wèn)題??


我一個(gè) IIC_Delays(DELEYTIME); 延時(shí)大概有100多US


CH452_WriteCommand(CH452_RESET); //芯片復(fù)位 這條命令不要發(fā),試一下。

CH452_WriteCommand(CH452_SYSON); //開(kāi)鍵盤(pán)掃描功能 命令后量DIG0腳上有沒(méi)有脈沖,有脈沖才表示這條命令發(fā)送成功。

CH452_WriteCommand(CH452_ACK); //開(kāi)ACK功能 這條命令后應(yīng)答才使能。 之后 CH452_WriteCommand(CH452_SYSON); //開(kāi)鍵盤(pán)掃描功能 可以讀到應(yīng)答。


謝謝回復(fù)

沒(méi)怎么明白您的意思

我看你們DEMO程序 是寫(xiě)完開(kāi)ACK功能的高字節(jié)后就能讀取應(yīng)答包的

static void CH452_WriteCommand(uint16 cmd) { Start_I2C(); //啟動(dòng)總線(xiàn) Writebyte_I2C((uint8)(cmd>>7)&CH452_MASK|CH452_ADDR); if(Cack_I2C() == 0) { Writebyte_I2C((uint8)cmd); //Stop_I2C(); } Stop_I2C(); //停止總線(xiàn)

} void CH452_Init(void) { EINT2_Init(); //CH452_WriteCommand(CH452_RESET); //芯片復(fù)位 CH452_WriteCommand(CH452_ACK); //開(kāi)ACK功能 CH452_WriteCommand(CH452_SYSON); //開(kāi)鍵盤(pán)掃描功能 }

上面這樣操作總線(xiàn)命令就沒(méi)有寫(xiě)進(jìn)去

如果寫(xiě)命令的時(shí)候不讀取應(yīng)答包,操作就是正確的,


還有兩個(gè)問(wèn)題 1、寫(xiě)進(jìn)入休眠模式后,是否通過(guò)按鍵直接喚醒還是在喚醒前要有什么命令操作,我寫(xiě)進(jìn)入休眠模式后,按鍵按下都沒(méi)反應(yīng) 2、我與24C512功用一個(gè)總線(xiàn) 都用模擬方式操作 ,怎么讀寫(xiě)512后鍵盤(pán)就死機(jī),是否可以共總線(xiàn)操作452


Start_I2C(); //啟動(dòng)總線(xiàn) CH452_WriteCommand(CH452_SYSOFF); //關(guān)鍵盤(pán)掃描功能 CH452_WriteCommand(CH452_SLEEP); //進(jìn)入睡眠模式


進(jìn)入睡眠后,SEG3~SEG0上的按鍵可以喚醒睡眠,有效按鍵代碼是40H 到5FH;接收到單片機(jī)發(fā)出的操作命令(通常是空操作命令),或者SCL引腳的電平變化都可以喚醒睡眠。

可以共總線(xiàn)操作452,只要共總線(xiàn)的芯片命令不重疊就可以了。 讀寫(xiě)512后鍵盤(pán)就死機(jī),你量一下452的INT#腳,看這個(gè)腳是不是變?yōu)榈碗娖?。只有CH452Read(讀按鍵命令)這個(gè)操作成功后INT#腳才會(huì)恢復(fù)為高電平。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频