我們都知道IIC設備在啟動信號以后就可以向IIC設備里寫一個字節,然后等待IIC設備把SDA拉低,因此可以根據這一點就可以知道IIC的地址是多少,淘寶上買的好多IIC的東西,告訴你的地址并不準確,比如我就遇到過買的PCF8574, 資料里顯示地址是0x27,可是怎么也不對,把A0,A1,A2都接地地址換成0X20還是不對,因此我就想到讓單片機來完成找地址的工作。單片機是STC的1T單片機,晶振11M,關鍵代碼是:
for(i=0;i<0xff;i++)
{
IICstart();
if(Write1Byte(i)==1)
{
_itoa(i,string,16);//把整數轉變成字符串的函數
UartPrintf(string);//串口發送字符串
}
}
itoa函數在下面,我從ZIGBEE的協議棧里拷貝的,很好用
/*********************************************************************
* @fn _itoa
*
* @brief convert a 16bit number to ASCII
*
* @param num -
* buf -
* radix -
*
* @return void
*
*********************************************************************/
void _itoa(uint16 num, uint8 *buf, uint8 radix)
{
char c,i;
uint8 *p, rst[5];
p = rst;
for ( i=0; i<5; i++,p++ )
{
c = num % radix; // Isolate a digit
*p = c + (( c < 10 ) ? '0' : '7'); // Convert to Ascii
num /= radix;
if ( !num )
break;
}
for ( c=0 ; c<=i; c++ )
*buf++ = *p--; // Reverse character order
*buf = '\0';
}
|