專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

單片機(jī)編程心得

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年12月01日   【字體:

 

一、延時(shí)程序的處理:
  1、對(duì)于可以設(shè)置系統(tǒng)時(shí)鐘的單片機(jī),延時(shí)程序統(tǒng)一先把系統(tǒng)時(shí)鐘設(shè)頻率置為最低,然后按這個(gè)最低時(shí)鐘頻率寫延時(shí)
     函數(shù),這樣的好處:第一,統(tǒng)一了不同系統(tǒng)時(shí)鐘下的延時(shí);第二,降低功耗
  2、對(duì)于單片機(jī)系統(tǒng),不同的外部時(shí)鐘,延時(shí)程序?qū)?yīng)的時(shí)間不同,為了方便使用,加入預(yù)編譯指令#ifdef/#else/
     #endif  這樣如果預(yù)定義了一個(gè)系統(tǒng)時(shí)鐘,則選擇相應(yīng)的延時(shí)參數(shù)進(jìn)行編譯,而延時(shí)程序主體不變,只是里面有
     一個(gè)延時(shí)參數(shù),根據(jù)預(yù)定義選擇相應(yīng)參數(shù)。

二、for循環(huán)的處理:
   用for(i=XX,i&gt;0,i--) 而不用for(i=0;i<XX,i++)  速度快
   對(duì)于兩層或多層for循環(huán),頻繁的循環(huán)放在內(nèi)層,減少循環(huán)間跳轉(zhuǎn)花費(fèi)的時(shí)間

三、對(duì)外設(shè)的操作:可以把外設(shè)作為一個(gè)文件來操作,比如液晶,就可以把液晶看作一個(gè)文件,往液晶打印字符串或
   者數(shù)據(jù),就可以用fprintf()來做,(51的C標(biāo)準(zhǔn)庫不支持,但是可以自己寫一個(gè)文件操作的庫)。只要是輸入輸出
   設(shè)備,都試著用文件操作的方法去操作。


四、標(biāo)準(zhǔn)庫函數(shù)的使用:
  1、標(biāo)準(zhǔn)輸入輸出庫(stdio.h):
   字符串夾雜變量數(shù)字(比如:發(fā)送完nihao字符串,然后發(fā)送變量i的值)往液晶顯示或往串口發(fā)送的時(shí)候,往串口發(fā)
   送可以使用格式輸出函數(shù)printf("nihao%d",i);但是往LCD顯示就不好做了,通常是寫一個(gè)數(shù)字轉(zhuǎn)字符串的函數(shù),然
   后先送原來的字符串,再送數(shù)字轉(zhuǎn)換后的字符串,太麻煩,可以使用標(biāo)準(zhǔn)輸入輸出庫里的sprintf()函數(shù)來完成,它
   的原型為:sprintf(char *buffer, const char *format, …),*buffer是要把字符串和變量寫入的緩沖區(qū),可以使
   用數(shù)組或者指針,后面的格式和printf()函數(shù)一樣;    與之對(duì)應(yīng)的還有sscanf()函數(shù),從緩沖區(qū)讀一個(gè)字符串把它
   轉(zhuǎn)成相應(yīng)的類型后賦給指定的變量。
   比如:
    #include &lt;stdio.h>
    void PrintToLcd(unsigned char *str)
    {
        ...
    }
    void main()
    {
        unsigned char *p;
        unsigned char i = 50;
        sprintf(p,"nihao%d",i);
        PrintToLcd(p);
    }
  2、字符串庫(string.h)
    字符串連接(相加)  char *strcat(char *dest,const char *stc)
   把src連接到dest字符串后面,返回指向dest的指針
    字符串比較  int strcmp(char *str1,char *str2)
   返回值:小于0: str1<str2,等于0: str1=str2,大于0: str1>str2
    字符串拷貝1  char *strcpy(char *dest,const char *src)
   結(jié)果把src的內(nèi)容拷進(jìn)dest,兩個(gè)字符串內(nèi)容相同,返回指向dest的指針
    字符串拷貝2  char *strdup(const char *src)
   src:待拷貝的源字符串,返回值:指向拷貝后的字符串的指針
    字符串倒序  char *strrev(char *s);
   返回指向倒序后字符串的指針
  3、類型轉(zhuǎn)換(math.h; stdlib.h)
   字符串轉(zhuǎn)雙精度(類似C++Builder里的StrToDouble)  double atof(char *str)
   字符串轉(zhuǎn)整數(shù)(類似StrToInt)  int atoi(char *str)
   字符串轉(zhuǎn)長整型  long atol(char *str)
   浮點(diǎn)數(shù)轉(zhuǎn)字符串  char *ecvt(double value,int ndigit,int*dec,int *sign)
                   char *fcvt(double value,int ndigit,int*dec,int *sign)
    輸入?yún)?shù):value: 待轉(zhuǎn)換浮點(diǎn)數(shù),ndigit: 轉(zhuǎn)換后的字符串長度
    輸出參數(shù):dec: 小數(shù)點(diǎn)位置,sign: 符號(hào)
    返回轉(zhuǎn)換后的字符串指針
   整型轉(zhuǎn)字符串  char *itoa(int value,char *string,int radix)
    輸入?yún)?shù):value: 要轉(zhuǎn)換的數(shù),radix: 轉(zhuǎn)換的進(jìn)制
    輸出參數(shù):string: 轉(zhuǎn)換后的字符串
    返回指向string的指針
   長整型轉(zhuǎn)字符串  char *ltoa(long value,char *string,int radix)
 

關(guān)閉窗口

相關(guān)文章