阅读:1331回复:0
Cypress EZ-USB开发板程序的问题
我用cypress公司提供的EZ-USB2131的开发板,运行其提供的例程dev_io,运行一切正常,但有一些疑惑,希望得到高手的指点。
程序如下,我的疑惑是他为什么定义BTN_ADDR=0x20,LED_ADDR=0x21,我知道这是开发板上i2c器件的地址,但开发板上的i2c扩展芯片是PCF8574,器件地址应该是0x40和0x41呀,可是改为这样是有问题的,我不知道究竟是为什么? 希望高人能够指教一二,小妹涕泪滂沱,不胜感激!!! #include <ezusb.h> #include <ezregs.h> #define PF_IDLE 0 #define PF_GETKEYS 1 #define KEY_WAKEUP 0 #define KEY_F1 1 #define KEY_F2 2 #define KEY_F3 3 #define BTN_ADDR 0x20 #define LED_ADDR 0x21 BYTE xdata Digit[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e }; main() { BYTE num = 0; BYTE xdata buttons; BYTE kstates = 0xff; BYTE kdeltas; BYTE key; BYTE display = TRUE; EZUSB_InitI2C(); // Initialize EZ-USB I2C controller while(TRUE) { EZUSB_ReadI2C(BTN_ADDR,0x01,&buttons); // Read button states kdeltas = kstates ^ buttons; // kstates = buttons; key = 0; while(kdeltas) { if(kdeltas & 0x01) { if(!((kstates >> key) & 0x01)) switch(key) { case KEY_F1: if(--num > 0x0f) num = 0x0f; break; case KEY_F2: if(++num > 0x0f) num = 0; break; case KEY_WAKEUP: num = 0; break; case KEY_F3: num = 0x0f; } display = TRUE; } kdeltas = kdeltas >> 1; ++key; } if(display) { EZUSB_WriteI2C(LED_ADDR, 0x01, &(Digit[num])); EZUSB_WaitForEEPROMWrite(LED_ADDR); display = FALSE; } } } |
|