|
我們都知道IIC設(shè)備在啟動(dòng)信號(hào)以后就可以向IIC設(shè)備里寫(xiě)一個(gè)字節(jié),然后等待IIC設(shè)備把SDA拉低,因此可以根據(jù)這一點(diǎn)就可以知道IIC的地址是多少,淘寶上買(mǎi)的好多IIC的東西,告訴你的地址并不準(zhǔn)確,比如我就遇到過(guò)買(mǎi)的PCF8574, 資料里顯示地址是0x27,可是怎么也不對(duì),把A0,A1,A2都接地地址換成0X20還是不對(duì),因此我就想到讓單片機(jī)來(lái)完成找地址的工作。單片機(jī)是STC的1T單片機(jī),晶振11M,關(guān)鍵代碼是:
for(i=0;i<0xff;i++)
{
IICstart();
if(Write1Byte(i)==1)
{
_itoa(i,string,16);//把整數(shù)轉(zhuǎn)變成字符串的函數(shù)
UartPrintf(string);//串口發(fā)送字符串
}
}
itoa函數(shù)在下面,我從ZIGBEE的協(xié)議棧里拷貝的,很好用
/*********************************************************************
* @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';
}
|
|