2013年5月27日 星期一

嵌入式c 數字轉字串 字串轉數字

數字轉字串:
網路上查到數字轉字串的方法,可以使用C的標準函式庫stdlib.h函式  char * itoa ( int value, char * str, int base );
強調一點這個函式算是window系統下特例的函式 無法跨平台使用.

所以使用stdio.h 另外兩個函式 printf ()  & sprintf() or snprintf()
1. int printf ( const char * format, ... );
對 標準輸出裝置stdout (如螢幕) 的格式化輸出,在x86 的PC平台上 標準輸出(stdout)都是Monitor.
而在嵌入式平台則要看complier設定,一般都要動到很底層的code 工程浩大.


2  .int sprintf ( char * str, const char * format, ... );.
將格式化的輸出結果存入 字串變數(如 str ),也就是說字串結果存到自訂 buffer 中,
之後再用自訂函數 putuart() 之類的,把buffer的data,看要傳到uart 或其他週邊使用.



3. int snprintf ( char * s, size_t n, const char * format, ... );
snprintf() 類似 sprintf(),只是多了一個size參數;這個參數的用處,就是用來限制最大的寫入資料量,可以用來避免 buffer overflow。



字串轉數字
C標準函式庫中stdlib.h中

1. double atof (const char* str);  將數字字串轉後成 double 型態的數字

2.int atoi (const char * str); 將數字字串轉後成 int 型態的數字

3.long int atol ( const char * str );

4.long long int atoll ( const char * str );

5.double strtod (const char* str, char** endptr);將字串中的數字轉換成 double 型態的數字,非數字部份以另一字串儲存

6.long int strtol (const char* str, char** endptr, int base);將字串中的數字轉換成 long 型態的數字,非數字部份以另一字串儲存

2013年5月6日 星期一

STM8 I2C溝通 MASTER MODE READ



void I2C_Config(void)
{
I2C_DeInit();
  // I2C_Init(400000, 0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_10BIT, (uint8_t)16 );  //flow sensor
   I2C_Init(400000,0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (uint8_t)16 ); //pressure sensor
}




void I2C_Read_Honeywell(u8* pBuffer,u8 ReadAddr,u8 NumByteToRead)
{
I2C_Cmd(ENABLE);

I2C_GenerateSTART(ENABLE);
    /* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
{
}
/* Send address for read */
I2C_Send7bitAddress(ReadAddr,I2C_DIRECTION_RX);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
{
}
/* While there is data to be read */
while(NumByteToRead)
{
if(NumByteToRead == 1)
{
I2C_AcknowledgeConfig(I2C_ACK_NONE);
I2C_GenerateSTOP(ENABLE);
}
if(I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))
{
/* Read a byte from the EEPROM */
*pBuffer = I2C_ReceiveData();
pBuffer++;
}
NumByteToRead--;
}
/* Enable Acknowledgement to be ready for another reception */
I2C_AcknowledgeConfig(I2C_ACK_CURR);
}

簡單的絕對值轉換 c


#include

int main (void)
{
int a;
//puts("請輸入整數:");
printf("請輸入整數:"); scanf("%d",&a);
//printf("整數b:"); scanf("%f",&b);

if(a>0)
{
printf("其絕對值為: %d \n",a);
return (1);
}
else
{
printf("其絕對值為: %d \n",-a);
return (2);
}
return (0);
}

或者使用c的標準函式庫 math.h中的cabs函式

C 取值到小數點第二位,並將各數字存到個別變數

#include
#include

int main(void)
{
int i,j,k,l,a;
float y=123.5223454;
        /*取到小數點後二位*/
       a=(double)(int)(y*100)/100;
       
        /*個別存數字至變數*/
i=(int)y/10;
j=(int)y%10;
k=(int)(y*10)%10;
l=(int)(y*100)%10;
printf("W=%d\n",i);
printf("X=%d\n",j);
printf("Y=%d\n",k);
printf("Z=%d\n",l);
return(0);
}