smallhuixin
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2004-04-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1331回复:0

Cypress EZ-USB开发板程序的问题

楼主#
更多 发布于:2002-07-02 10:25
    我用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;
}
}
}
游客

返回顶部