引言
單片機編程時,如果代碼量不多,可以將所有的函數和定義等放在一個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/
微信掃碼關注我的公眾號
不定期更新個人學習筆記和技術總結,歡迎大家互相學習交流!