<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機KEIL如何建立多個C文件及注意事項

          51單片機KEIL如何建立多個C文件及注意事項

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          1如何建立多個C文件


          首先,我們需要一個新文檔,這個文檔的建立有兩種方法(以delay1s函數(shù)為例)。第一種,在工程目錄下建立一個delay1s.txt然后將其改名為delay1s.h。因為都是同編碼的所以不會出現(xiàn)亂

          本文引用地址:http://www.ex-cimer.com/article/201611/322610.htm

          碼,然后在工程中將其打開。第二種方法是直接在工程中新建一個文檔,然后保存的時候?qū)⒚直4鏋閐elay1s.h即可。如果是需要添加很多文件的話建議使用第一種方法,這是個人建議。其

          次,我們需要編寫delay1s.h這個文件的內(nèi)容,其內(nèi)容如下:
          #ifndef _DELAY1S_H_
          #define _DELAY1S_H_
          void delay1s();//延時函數(shù)
          #endif
          這個是頭文件的定義,作用是聲明了delay1s()函數(shù),因為如果在別的函數(shù)中如果我們需要用到delay1s()函數(shù)的話,若不事先聲明則在編譯的時候會出錯。對于#ifndef……#define……

          #endif;這個結(jié)構(gòu)大概的意思就是說如果沒有定義(宏定義)一個字符串,那么我們就定義它,然后執(zhí)行后面的語句,如果定義過了那么就跳過不執(zhí)行任何語句。
          關(guān)于為什么要使用這么一個定義方法,比如在led_on()函數(shù)中我們調(diào)用了delay1s()函數(shù),然后在main()函數(shù)中我們也調(diào)用了delay()函數(shù),那么,在led_on()函數(shù)中我就就要包含頭文件

          delay1s.h,然后在main()函數(shù)中也要包含delay1s.h,若主函數(shù)中我們調(diào)用過led_on(),那么在編譯的時候,遇到delay1s()和led_on()的時候就會對delay1s.h進行兩次解釋,那么就會出現(xiàn)

          錯誤。若有以上預(yù)處理命令的話,那么在第二次的時候這個_DELAY1S_H_已經(jīng)被定義過了,那么就不會出現(xiàn)重復(fù)定義的問題。這就是它的作用。但是注意,在編譯器進行編譯的時候頭文件不參

          與編譯。
          再次,我們建立一個led_on.h,起代碼內(nèi)容如下:
          #ifndef _LED_ON_H_
          #define _LED_ON_H_
          void led_on();//燈閃爍
          #endif
          作用同delay1s.h,不理解的話可以再看一下上面的解釋。
          最后,將我們上次說的三個函數(shù)補充完整。
          在led_on()函數(shù)中,我們用到了51單片機的一些寄存器的定義,所以我們要包含reg52.h,而且我們用到了delay1s()函數(shù),所以我們要包含delay1s.h,故led_on()函數(shù)的代碼如下:
          #include
          #include “delay1s.h” //注意這里沒有分號
          void led_on()
          {
          P0=0x00;
          delay1s();
          P0=0xff;
          delay1s();
          }
          Main函數(shù)的代碼如下:
          #include
          #include “delay1s.h”
          void main()
          {
          led_on();
          delay1s();//在這里其實只有第一句就可以了,這句是不必要的
          led_on();//這也是不必要的
          }
          在這個函數(shù)中,為了再次說明一下#ifndef……#define……#endif這個結(jié)構(gòu)的定義,大家可以把所有的.h文件中的這個結(jié)構(gòu)去掉,然后編譯一下看一下效果。
          到這里相信大家對于這種模塊化的寫法就有大概的了解了,如果我們想添加新功能的時候,比如我們要添加一個流水燈的功能,那么,我們只需要增加一個led_circle.c和led_circle.h,然

          后按照上述步驟添加進工程即可,程序的其他部分不需要任何改動。顯然這是很方便的。其實函數(shù)的聲明可以使用extern關(guān)鍵字,C語言中默認都是這個類型的,所以可以不用寫。

          2注意事項

          當你在一個C文件(取名為A)定義了一個變量,但是要在另一個C文件(取名為B)里調(diào)用它,這是你要在B文件進行申明,表示你已經(jīng)定義了

          例如:

          A中定義: unsigned char flag;B中申明:extern unsigned char flag;

          注意B中要加上變量的類型,不然有時會出問題

          h文件里只能放函數(shù)申明和全局變量,其他的都不要放



          關(guān)鍵詞: 51單片機KEILC文

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();