lgg88 发表于 2012-11-20 23:00:33

用劲锐的JR1610C做16通道的触摸,,碰到了些问题,请教大家

用劲锐的JR1610C做16通道的触摸,,碰到了些问题,请教大家?

通道1-通道8正常,但是在感应通道1-通道8的人一个通道,,通道9-16也输出和通道8对应的数据。。感应通道9-16时都无反应。

原理图如下:说明,灵敏度电容都调整过,效果还是一样。


程序代码如下:
//起始信号
void Start()
{
SCL = 1;
Delay20us();
SDA = 1;
Delay20us();
SDA = 0;
Delay20us();
SCL = 0;
Delay20us();
}

//停止信号
void Stop()
{
SCL = 0;
Delay20us();
SDA = 0;
Delay20us();
SCL = 1;
Delay20us();
SDA = 1;
Delay20us();
SCL = 0;
}

//接收从机应答
bit Rec_ACK()
{
SCL = 0;
Delay20us();
SDA = 1;
Delay20us();
SCL = 1;
Delay20us();
CY = SDA;
SCL = 0;
return(CY);
}

//
void Tran_ACK()
{
SDA = 0;
Delay20us();
SCL = 1;
Delay20us();

SCL = 0;
Delay20us();
SDA = 1;

Delay20us();
}


void Tran_NOACK()
{
SDA = 1;
Delay20us();

SCL = 1;
Delay20us();
SCL = 0;
//SDA = 0;
Delay20us();
}


//读键值函数
void Read_JR1610C(void)
{
uchar k=5;    //错误次数

Key_Val1 = 0x00;
Key_Val2 = 0x00;
//发送起始信号
while(k--)
{
    CLRWDT;
    Start();
    //写设备地址

    Write_8bit(0xa1);   //写设备地址
    if(Rec_ACK())continue;//接收从机应答

    Key_Val1 = Read_8bit();//S8-S1按键数据 为1表示有键
    Tran_ACK();//主机发送ACK
    Key_Val2 = Read_8bit();//S16-S9按键数据
    Tran_NOACK();
    Stop();
    break;
}
}

//延时20us
void Delay20us()
{
unsigned char i=20;

while(i--);
}

//8位数据
void Write_8bit(unsigned char Tran_Data)
{
unsigned char data j = 8;
for(j = 8;j > 0;j--)
{
    SCL = 0;
页: [1]
查看完整版本: 用劲锐的JR1610C做16通道的触摸,,碰到了些问题,请教大家