金牌会员
 
- 积分
- 1208
- 金钱
- 1208
- 注册时间
- 2017-8-25
- 在线时间
- 167 小时
|
5金钱
unsigned char TM1650_Read_KEY(void)
{
unsigned char temp;
TM1650_Start();
TM1650_Send_Byte(0x49);
TM1650_Wait_Ack();
temp=TM1650_Read_Byte();
TM1650_Wait_Ack();
TM1650_Stop();
return temp;
}
void TM1650_delay_us(unsigned short j)
{
unsigned short i,k;
for(k=0;k<j;k++)
{
for(i=0;i<1;i++)
{
}
}
}
void TM1650_Start(void)
{
SDA_OUT();
TM1650_SDA_H;
TM1650_SCL_H;
TM1650_delay_us(4);
TM1650_SDA_L;
TM1650_delay_us(4);
TM1650_SCL_L;
}
void TM1650_Stop(void)
{
SDA_OUT();
TM1650_SCL_L;
TM1650_SDA_L;
TM1650_delay_us(4);
TM1650_SCL_H;
TM1650_delay_us(4);
TM1650_SDA_H;
}
unsigned char TM1650_Wait_Ack(void)
{
unsigned char ucErrTime=0;
SDA_IN();
TM1650_SDA_H;TM1650_delay_us(1);
TM1650_SCL_H;TM1650_delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
TM1650_Stop();
return 1;
}
}
TM1650_SCL_L;
return 0;
}
void TM1650_Ack(void)
{
TM1650_SCL_L;
SDA_OUT();
TM1650_SDA_L;
TM1650_delay_us(4);
TM1650_SCL_H;
TM1650_delay_us(4);
TM1650_SCL_L;
}
void TM1650_NAck(void)
{
TM1650_SCL_L;
SDA_OUT();
TM1650_SDA_H;
TM1650_delay_us(4);
TM1650_SCL_H;
TM1650_delay_us(4);
TM1650_SCL_L;
}
void TM1650_Send_Byte(unsigned char oneByte)
{
unsigned char t;
SDA_OUT();
TM1650_SCL_L;
for(t=0;t<8;t++)
{
if((oneByte&0x80)==0x80)
{
TM1650_SDA_H;
}
else
{
TM1650_SDA_L;
}
oneByte<<=1;
TM1650_delay_us(4);
TM1650_SCL_H;
TM1650_delay_us(4);
TM1650_SCL_L;
TM1650_delay_us(4);
}
}
unsigned char TM1650_Read_Byte(void)
{
unsigned char i,rekey=0;
SDA_IN();
for(i=0;i<8;i++ )
{
TM1650_SCL_L;
TM1650_delay_us(4);
TM1650_SCL_H;
rekey<<=1;
if(READ_SDA) rekey++;
TM1650_delay_us(4);
}
return rekey;
}
unsigned char TM1650_Read_KEY(void)
{
unsigned char temp;
TM1650_Start();
TM1650_Send_Byte(0x49);
TM1650_Wait_Ack();
temp=TM1650_Read_Byte();
TM1650_Wait_Ack();
TM1650_Stop();
return temp;
}
uint32_t TM1650_Gte_KEY(void)
{
unsigned char key;
uint32_t key_name,i,j;
key=TM1650_Read_KEY();
for(i=0;i<7;i++)
for(j=0;j<7;j++)
{
if(key == key_numberH[i][j])
{
key_name = key_number[i][j];
return key_name;
}
}
return key_name;
}
那位大神知道我这个程序哪里有问题,程序运行到ACK,SDA脚一直是高电平。芯片是GN1650
|
|