天天看點

單片機常用函數整理(一)

1 void ComDataSendStr(const unsigned char str[])      2 {      3     unsigned char i = 0;      4     for (i = 0; str[i] != '\0'; i++)      5     {      6         TXREG = str[i];      7         TXEN = 1;      8         while(!TRMT);      9         TXEN = 0;     10     }     11 }      
1 void ComDataSendChar(unsigned char cDbuf)     2 {     3     TXREG = cDbuf;     4     TXEN = 1;     5     while(!TRMT);     6     TXEN = 0;     7 }      

PIC單片機中發送字元和字元串的函數功能。

1 void ComDataSendNumInt_3bits(unsigned int str)      2 {      3     unsigned char cDbuf[3];      4     unsigned char i;      5       6     cDbuf[0] = str / 100 + 0x30;      7     cDbuf[1] = str % 100 / 10 + 0x30;      8     cDbuf[2] = str % 10 + 0x30;      9      10     for (i = 0; i < 3; i++)     11     {     12         TXREG = cDbuf[i];     13         TXEN = 1;     14         while(!TRMT);     15         TXEN = 0;     16     }     17 }      

上面是發送時整形數字的函數

1 void ComDataSendNumfloat(unsigned int str)      2 {      3     unsigned char cDbuf[4];      4     unsigned char i;      5       6     cDbuf[0] = str / 100 + 0x30;      7     cDbuf[1] = '.';      8     cDbuf[2] = str % 100 / 10 + 0x30;      9     cDbuf[3] = str % 10 + 0x30;     10      11     for (i = 0; i < 4; i++)     12     {     13         TXREG = cDbuf[i];     14         TXEN = 1;     15         while(!TRMT);     16         TXEN = 0;     17     }     18 }      

應該是擴大100倍後的數字,發送浮點函數功能。

下面的函數是采樣并濾波的函數。去max、min後求平均

1 unsigned int sample_10bit(unsigned char channel_register)      2 {      3     unsigned char i=0;      4     int sample_variable[10],min=0,max=0,SUM=0;      5     while(i<10)      6     {      7         ADCON0=channel_register;      8         ADFM=1;      9         delay30us();     10         ADGO=1;     11         while(ADGO==1)     12         {     13             ;     14         }     15         sample_variable[i]=((ADRESH&0x03)<<8)+ADRESL;     16         if(i==0)     17         {     18             min=sample_variable[0];     19             max=sample_variable[0];     20             SUM=sample_variable[0];     21         }     22         else     23         {     24             min=(sample_variable[i]<min ?sample_variable[i]:min);     25             max=(sample_variable[i]>max ?sample_variable[i]:max);     26             SUM=SUM+sample_variable[i];     27         }     28         ADFM=0;     29         i++;     30     }     31     return (SUM-max-min)/8;     32 }      

以上是pic16F787中用到的函數,特此整理。