下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、keil多文件組織方法方法一:首先新建一個(gè)main.c的文件,加入到項(xiàng)目中,該文件中主要寫main函數(shù).然后,新建文件,如delay c, 編寫內(nèi)容之垢,不要加入到項(xiàng)目,而出在main.c文件的開始寫上include"delay c",編隼 你會(huì)發(fā)現(xiàn)delay.c 已經(jīng)在你main.c下面出現(xiàn)了,其他的函數(shù)同樣的道理。下而main.c文件include <reg52 h>編譯系統(tǒng)先編譯該文件#include"delay.c"接著編譯該文件#include"display.c"然后編譯該文件nclude'timetO
2、.c"再編譯該文件 main()TMOD=0x01;EA=1;ET0=1;TR0=1;TH0=(65536-5000)/256;TL0=(65536-5000)%256;while display 1();delay(200),display2();delay(200);LED1=O;執(zhí)行編譯后,你發(fā)現(xiàn)所有的。c文件全部在main.c的子目錄匚 編譯系統(tǒng)編譯時(shí)候按照給定的順序進(jìn)行編譯,含有全局變量的文件耍放到巌前面,否則編譯時(shí)候會(huì)出現(xiàn)沒有定義變量的錯(cuò)誤,如tE display.c文件unsigned char flag;/全局變量,其他函數(shù)中用sbit LED1=P1A0;/全局變量
3、,其他岡數(shù)中用sbit LED2=P2A0;/全局變量,其他函數(shù)中用display!()if(flag)LED1=-LED1;display2()delay1m();LED2=1;delay(250);LED2=O;delay(200);定義的全局變戢,會(huì)被各個(gè)文件用到.其實(shí)這種算不上圧芬文件形式.而圧單一文件的不同組織形式.但址卻涓晰了,便于閱讀。這種殂織也不必要要寫頭文件等.方法二:首先新建一個(gè)main.c的文件,加入到項(xiàng)H中,該文件中上要寫main函數(shù),然丿占,新建文件,如delay.c, 編寫內(nèi)容之后,加入到項(xiàng)目,但肚在main.c文件的開始不耍寫上#includeudelay.c
4、176;,其他的函數(shù)同樣的處 理.要調(diào)用全局變戢的方法:新建頭文件,如:file h.在頭文件file.h中用寫入:#ifndef _file_H_ /*防止 graphics.h 破垂復(fù)引用/#define _file_H_extern void funotion ();聲明全局函數(shù)#endif再不管三七二十一把函數(shù)體放在任何一個(gè)你寫冇#includeHfile.hw的XX.C文件中就可以了方法三:通常一個(gè)C51程序工程按功能町以分成寥個(gè)模塊(文件一個(gè)模塊通常由兩個(gè)文檔組成,個(gè)頭文件*.h, 對(duì)模塊中的數(shù)據(jù)結(jié)構(gòu)和函數(shù)原型進(jìn)行描述:另一個(gè)為C文件C ,對(duì)數(shù)據(jù)實(shí)例或?qū)ο筮M(jìn)行定義,以及函數(shù) 算法的
5、具體實(shí)現(xiàn),如I2CCADCCDACCLED C等.為了文件的調(diào)用,我們要為每個(gè)模塊定義一個(gè)頭 文件,以I2C.C來說,定義I2C H#ifndef GRAPHICS.H /*防止 graphics.h 被重復(fù)引用/#define GRAPHICSinclude <math h >廣引用標(biāo)準(zhǔn)庫的頭文件*/include ,myheader.h,/t引用非標(biāo)準(zhǔn)庫的頭文件/void Function”);廣全局函數(shù)聲明*7class Box廣類結(jié)構(gòu)聲明/;#endif模塊化的程序圧黑盤,只向外提供接口(全局變呈、外部函數(shù)),而不盅要讓調(diào)用者了解其中過程。盡可能 地少定義接口有利于保持模塊
6、的獨(dú)立性(不需要讓使用者知逍的內(nèi)部函數(shù)與赫態(tài)全局變駅不需要在H文件 中給出以避免使用者疑磁)在需妾調(diào)用此模塊的文件中寫入include 句。一個(gè)好的工程.H文件的組織繪 很清晰的.只看H文件就能夠?qū)懼鞒套终{(diào)用柑應(yīng)的C模塊。頭文件的格式如卜(I2C.H為例):#ifndefl2C_H/譏否沒冇定義過"I2C_H”,防止重定義*/#define I2C_H 廣定義|2C_H/bit SetSDA ( bit Up_Down )t bit SetSCL ( bit Up.Down); #endifI2C.C格式如下:include < stdio.h >include Hl2C
7、.hHvoid SendByte ( uchar c ), /內(nèi)部函數(shù)在H頭文件中不描述/bit SetSDA( bitUp_Down );bit SetSCL ( bit Up_Down) ;另外種寫法:#ifndef I2C-H #define I2C H exten bit SetSDA ( bit Up_Down ); exten bit SetSCL ( bit UpDown); #endifI2C.C格式如下:#include < stdio.h >void SendByte ( uchar c ),廠內(nèi)部函數(shù)在H頭文件中不聲明*/ bitSetSDA( bitUp_D
8、own );bit SetSCL ( bit UpJDown) ;方法四:首先,我們需要一個(gè)新文檔,這個(gè)文檔的建立有兩種方法(以delayls函數(shù)為例人第一種,在工程冃錄下 建立一個(gè)delay1s.txt然后將其改名為delayls.h, W為都足同編碼的所以不會(huì)出現(xiàn)占L碼,然后在工程中將 其打開。第二種方法兄門接在工程中新建一個(gè)文檔,然版保存的時(shí)候?qū)⒚直4鏋閐elayls.h UP可。如果 是需耍添加很多文件的話建議使用第一種方法.這於個(gè)人建議.梵次,我們需耍編埼delaylsh這個(gè)文件 的內(nèi)容,其內(nèi)容如下:#ifndef DELAY 1S H#define _DELAY1S_H_void
9、 delay 1s():/延時(shí)函數(shù)#endif這個(gè)是頭文件的定義,作用足聲明了 delay1s()函數(shù),因?yàn)槿绻趧e的函數(shù)中如果我們需要用到delaylsf) 函數(shù)的話,若不事先聲明則在編譯的時(shí)候會(huì)出錯(cuò)。對(duì)于#ifndef#define#endif:這個(gè)結(jié)構(gòu)大概的意 思就叢說如果沒有定義(宏定義)一個(gè)字符串,那么我們就應(yīng)義它,然厲執(zhí)行后而的語句,如果宦義過了 那么就跳過不執(zhí)行任何語句.關(guān)于為什么要使用這么一個(gè)定義方法.比如在led_on()函數(shù)中我們調(diào)用了 delay 1s()f數(shù),然后在mam() 函數(shù)中我們也調(diào)用J"delay()函數(shù),那么,<£ led_on()
10、函數(shù)中我就就娶包含頭文件delayls.h,然后在main() 函數(shù)中也要包含delayls.h若丄函數(shù)中我們調(diào)用過led_on()廉么在編譯的時(shí)候 遇到delay1s()和led_on() 的時(shí)候就會(huì)對(duì)delayls.h進(jìn)行兩次解釋.那么就會(huì)出現(xiàn)錯(cuò)決.若冇以上預(yù)處理命令的話,那么在第二次的 時(shí)候這個(gè)_DELAY1S_H_已經(jīng)被定義過了,那么就不會(huì)出現(xiàn)審復(fù)定義的問題。這就是它的作用。但足注總, 在編澤器進(jìn)行編譯的時(shí)候頭文件不參與編譯。再次,我們建立一個(gè)led_on.h,起代碼內(nèi)容如下:#ifndef _LED_ON_H_#define 丄ED_ON_H_void led_on();/燈閃爍#e
11、ndif作用同delayls.h,不理解的話可以再看一下上面的解用.最后,將我們上次說的三個(gè)函數(shù)補(bǔ)充完整.在led_on()函數(shù)中,我們用到了 51單片機(jī)的一些寄存器的定義,所以我們婆包含reg52.h,而口我們用到了 delay 1s()S數(shù).所以我們要包含delayls.h,故led_on()函數(shù)的代碼如下:#inelude <reg52 h>includeh delay 1 s.h" 注意這里沒有分號(hào)void led_on()P0=0x00;delay 1s();PO=Oxff,delay 1s();Mam函數(shù)的代碼如F:#inelude <reg52.h>include "delayls.h"void main()led_on();delay 1s();/在這里英實(shí)只冇第一句就可以了,這句足不必要的led_on();/這也是不必要的任這個(gè)函數(shù)中,為了再次說明一下#ifndef#define#endif這個(gè)結(jié)構(gòu)的定義,人家可以把所仃的.h文 件中的這個(gè)結(jié)構(gòu)去掉.然后編譯一下看一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度全款購入進(jìn)口跑車合同范本3篇
- 二零二五年度企業(yè)與個(gè)人投資回報(bào)對(duì)賭協(xié)議3篇
- 二零二五年度員工試用期工作內(nèi)容調(diào)整及考核標(biāo)準(zhǔn)協(xié)議3篇
- 二零二五年度電商平臺(tái)商家會(huì)員返利合同3篇
- 2025年度新能源汽車產(chǎn)業(yè)鏈投資基金合作協(xié)議3篇
- 2025年度公司股東內(nèi)部關(guān)于企業(yè)并購整合的專項(xiàng)協(xié)議3篇
- 2025年度綠色能源項(xiàng)目分?jǐn)倕f(xié)議3篇
- 二零二五年度新能源汽車充電樁建設(shè)投資入股合同3篇
- 2025通信銷售合同
- 2025年農(nóng)村土地永久轉(zhuǎn)讓與農(nóng)村電商合作框架合同3篇
- 2022年廣東省普通高中學(xué)業(yè)水平第一次合格性考試歷史真題卷
- 高標(biāo)準(zhǔn)農(nóng)田施工組織設(shè)計(jì)(全)
- 迎接重大活動(dòng)和檢查評(píng)比的保障措施
- 總包對(duì)分包的管理措施(六大方面)
- 項(xiàng)目式學(xué)習(xí)評(píng)價(jià)量表
- 鍋爐保溫施工方案
- 《四川省柑橘出口影響因素研究(論文)》10000字
- 行測答題卡模板
- GB/T 28920-2012教學(xué)實(shí)驗(yàn)用危險(xiǎn)固體、液體的使用與保管
- 多維閱讀第14級(jí) Ollie and Ruby 奧利和魯比
- 石化行業(yè)八大高風(fēng)險(xiǎn)作業(yè)安全規(guī)范培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論