1. 程式人生 > >keil5 的模塊化編程詳解

keil5 的模塊化編程詳解

表示 keil signed 庫文件 是我 多說 一個個 默認 c51

模塊化編程是什麽?就是可以吧你學的程序分成一個個模塊,方便修改和移植。從事單片機和嵌入式這方面,編程具有強大移植性可以說是重中之重,如果你寫一些LED數碼管之類的小程序,

用模塊化編程有些小題大做。但是在團隊做項目中,需要不同的人負責不同的一段程序,這時候就需要模塊化編程了,在個人編大程序時也要用,因為好修改,想想你的代碼幾十行還好,如果

幾百幾千行呢?所以說到這裏,可見模塊化編程幾乎是所有大程序要做的,不然怎麽修改?尤其是單片機這種靈活的語言。(建議有C語言基礎的同學看)

先提前說說與模塊化編程有關的關鍵字加上英文意思;

static(靜止的)

extern(外部的)

   typedef(類型定義)

#define(定義)

**********************************

#ifndef __**_H_ //如果有**.h文件,就。。。

#define __**_H_ //如果沒有就尋找**.h文件

#endif //否則就結束

呵呵,先看看熱熱身 ,我們知道C語言有.c文件和.h文件,.c文件就是我們寫的程序。.h文件呢是庫文件,在寫C語言程序的時候, #include“***.h”或include<***.h>,就是尋找庫文件路徑的意思,只是開始尋找的起點不同,

比如printf輸出函數在stdio庫裏就有這個函數,我們只不過是拿來用而已,我想表達的是,庫文件裏面存了方便我們去寫程序的函數(也是程序,不過以函數的形式打包來讓我們用)

順便說說code個關鍵字吧,比如 int code arr[]={};意思是把這個 i 變量的所占用的空間放在ROM中,也就是只讀存儲器,這樣動態數據就可以擁有更多的空間速度也快了CPU也輕松了。單片機的內存是很寶貴的,RAM的容量運比ROM的小,而RAM又與CPU掛鉤,其實我們手機的性能好不好與RAM有很大關系,我們說的運行內存就是RAM,太專業的小編也不會,我們知道code可以節省單片機內存就知道了。

關鍵字這些與內存掛鉤,C語言難也是難在內存上,我們掌握基本的用法來編C51就行不是嗎,我這裏是淺談,

想深入了解static的點這個鏈接 https://blog.csdn.net/keyeagle/article/details/6708077

static 在程序中的作用是,當你在變量或函數面前加static後,表示該函數或變量就只能在這個C文件裏用了,相當於一把鎖來鎖住它們。

想深入了解extern的點這個鏈接 https://www.cnblogs.com/Lunais/p/5991135.html

typedef和#define在兩個宏定義很常用,以後還會專門為typedef搞個庫方便調用,

比如現在要定義數據類型

可以這樣 typedef int P;(加分號)

#define P int(不允許加任何符號)

在後面要用到int來定義變量時可以直接,P i=0(int i=0); 我們用宏定義給這個數據可惜起了一個新名字P;C51的大程序裏用的很多;

typedef unsigned int uInt8; typedef unsigned char uChar16; 表示用uInt8新名字來代替unsigned int的類型

接下來開始模塊化編程,想按照步驟試試一遍,首先建立一個文件夾

技術分享圖片

技術分享圖片在裏面

建立四個文件夾,c文件夾放.c文件,h文件夾放.h文件,main文件夾放main.c主函數文件,project文件夾放一些項目文件;

這樣可能有點暈是吧,沒事下面就懂了;打開keil軟件新建項目

技術分享圖片放在project文件夾裏;取名pro,當然名字隨便取的

技術分享圖片之後開始建立才C和H文件,一個C文件對應一個H文件,

技術分享圖片分別命名為delay.c delay.h led.h led.c main.c 存到之前建立的c和h main文件夾中。

技術分享圖片

技術分享圖片main.c主C文件單獨放在main文件夾中

全部保存效果是這樣的

技術分享圖片

一個C文件對應一個h文件,名字一樣,這樣好找。現在可以先在C文件裏編程,也可以先提前設置好一些東西,這個前後順序是沒關系的,我先設置吧

技術分享圖片點這個;彈出

技術分享圖片可以吧標號1看做是大的以個文件夾,標號2是子文件,編號3是子文件夾對應的C文件;名字隨便取,技術分享圖片這裏我取的是這些名字,接下來是到入C文件

技術分享圖片藍底寬表示選中的目錄下 導入,

技術分享圖片接下來是同樣的步驟導入對應的C文件,完成後點擊OK

技術分享圖片完成之後就是這樣的以個布局效果;

問題來了,這麽多的C文件,我們要把編譯的路徑告訴給軟件,不然找不到H也就是庫文件,之前不是模塊化編程我們不用理路徑,是應為軟件自帶了#include"reg52.h"這些了,而現在我們是要自己

造出#include“”這些,所以要給路徑,

技術分享圖片第三是設置晶振頻率,和編寫的程序的晶振頻率一樣,第四是勾選生存HEX文件

第五是搞路徑的如圖

技術分享圖片在這個框點6,

技術分享圖片點7建立 ×是刪除

技術分享圖片點7後有框出來點8添加文件夾上的H文件夾就可以了;然後一直OK;

編譯後有兩個警告是因為兩個H文件夾沒用,接下來編程;

技術分享圖片

還有就是特別註意,#include" **.h"這裏的名字一定是和H文件夾的名字一樣。

技術分享圖片

是的delayh文件書寫格式是這樣的;把函數名搞都裏面;其實還要在void前面加extern的,但是keil5軟件是默認前面已經加了,所以可加可不加;還有就是#ifndef後面加的這些__DELAY_H_ 紅色部分是可以以隨便起不與其它重復的名稱的,但是不管起什麽名都得和下面#define一樣,

技術分享圖片LED的C程序,引用了Delay_Ms函數;

所以接下來

技術分享圖片在LED的H中包delay的庫包含進來那麽現在#include“led.h中有幾個庫呢?有52的耶有delay的,

那寫個主程序main編譯後就直觀了。

技術分享圖片

零錯誤警告

看到了嗎,箭頭的地方是那些h文件,是不是層層疊起來的,所以現在有點明白了這些格式的含義和模塊化編程的強大了嗎,

都練習幾次,加深理解,還有學到這裏讀者可以去網上看看別的模塊化程序,還有很多技巧筆者就不多說了,有了基礎可以慢慢理解別人的的知識,然後

會做,最後形成自己的編程風格。

keil5 的模塊化編程詳解