單片機之模塊化編程


引言

單片機編程時,如果代碼量不多,可以將所有的函數和定義等放在一個main.c文件中,但是隨着代碼量的增加,如果將所有代碼都放在同一個.C文件中,會使得程序結構混亂、可讀性與可移植性變差,而模塊化編程就是解決這個問題的常用而有效的方法。

模塊化設計的原則

“高內聚,低耦合”

高內聚:一個C文件里面的函數,只有相互之間的調用,而沒有調用其它文件里面的函數,這樣可以視為高內聚。盡量減小不同文件里函數的交叉引用。

低耦合:一個完整的系統,模塊與模塊之間,盡可能的使其獨立存在。也就是說,讓每一個模塊,盡可能的獨立完成某個特定的子功能。模塊與模塊之間的接口,盡量的少而簡單。

模塊化編程的方法

1.創建一個.c源文件和一個.h頭文件

原則上文件可以任意命名;但強烈推薦如下原則:.c文件與.h文件同名;文件名要有意義,最好能夠體現該文件代碼的功能定義。
例如:IIC通信源文件與頭文件命名為IIC.c與IIC.h。

2.防重復包含


頭文件中需要防重復包含處理,防止頭文件在被多個文件引用的時候,讓編譯器在編譯時不會多次編譯。
在.h文件中加入如下代碼

#ifndef XXX

#define XXX

//Your Code

#endif

  

其中的XXX原則上可以是任意字符,在同一個工程中各個.h文件的XXX不能相同,因此強烈推薦如下的規則:將.h文件的文件名全部都大寫,“.”替換成下划線”_”,首尾各添加2個下划線”__”作為XXX。

例如IIC.h中的寫法:

#ifndef __IIC_H__
#define __IIC_H__

//code

#endif

  

3.代碼的封裝

.c文件中通常是:

函數的定義\
只被本.c文件調用的宏定義
.h文件中通常是
函數的聲明
被外部調用的宏定義

 

4.添加到工程中

只需要將.文件添加到工程中,.h文件不同添加到工程里,同時在.c文件里把對應的.h文件包含進來。

以下是一個IIC.h和IIC.c文件的內容

IIC.h的內容

 

#ifndef __I2C_H__
#define __I2C_H__
#include <reg52.h>
#define uchar unsigned char
sbit SDA=P2^0;
sbit SCL=P2^1;
void delay();
void start();
void stop();
void ack();
void nack();
void write_byte(uchar date);
uchar read_byte();
void write_at24c02(uchar address ,uchar date);
uchar read_at24c02(uchar address);
#endif

 

IIC.c的內容

#include "i2c.h"
void delay()
{
	;;
}
/*各個函數的定義*/

main.c內容

 

#include <reg52.h>
#include "i2c.h"
void main() {   //code }

 

 

歡迎大家關注我的個人博客 http://www.wangchaochao.top/
微信掃碼關注我的公眾號

 

不定期更新個人學習筆記和技術總結,歡迎大家互相學習交流!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM