作者:Whappy
时间:2024.8.30
目的:决战51
传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路 模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等
个人理解模块化编程思路:
就像我们说的一个程序等于算法加数据结构,而针对于模块化编程,就是让我们的代码看起来更有层次化,,这里我们就定义了模块化程序的思路,即一个功能实现模块(模块内可能包含小模块),但我们想要把这个模块(例如一个LCD1602显示屏模块)集成化,模块化,就是利用一个点c(lcd1602.c)文件配套一个点h(lcd1602.h)文件,其中,lcd1602.c文件是实现其所有内部想要实现的功能,如包含lcd1602的驱动代码和lcd1602的子功能代码,则lcd1602.h文件就是将lcd1602.c中的所有子模块进行声明(函数声明),最后我们调用该lcd1602模块时,只需要在我们的函数中调用其头文件(lcd1602.h),即可使用lcd1602中的功能。(甚至我们都不需要知道理lcd1602是怎么实现的,我们仅仅需要知道该代码中.h文件函数声中需要的参数即可)。一个点h文件就是外部文件调用该点c文件的接口,在我们需要调用该函数内部功能时,我们只需要调用该函数内部点h文件的即可,(一个点c文件包含一个点h文件必定是组合),点c文件是实现,点h文件是声明,点c文件内的函数实现。(功能实现必须在点h中声明,这样外部调用该头文件才能使用)
我还是那就话,一个嵌入式编程者的最高境界就是自己不写任何一代码,就能把所需要的功能实现。
听君一席话,胜读十年书。
.c文件:函数、变量的定义
.h文件:可被外部调用的函数、变量的声明 任何自定义的变量、函数在调用前必须有定义或声明(同一个.c) 使用到的自定义函数的.c文件必须添加到工程参与编译 使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)
模块化
main.c (实现我们想要的的功能)
#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
void main(void)
{
while(1)
{
Nixie(1,1);
Delay1ms(500);
Nixie(2,2);
Delay1ms(500);
Nixie(3,3);
Delay1ms(500);
Nixie(4,4);
Delay1ms(500);
Nixie(5,5);
Delay1ms(500);
Nixie(6,6);
Delay1ms(500);
Nixie(7,7);
Delay1ms(500);
Nixie(8,8);
Delay1ms(500);
}
}
Delay.c
#include "intrins.h"
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay1ms(unsigned int xms);
#endif
Nixie.c
#include <REGX52.H>
#include "Delay.h"
unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1: P2_4 = 1;P2_3 = 1; P2_2 = 1; break;
case 2: P2_4 = 1;P2_3 = 1; P2_2 = 0; break;
case 3: P2_4 = 1;P2_3 = 0; P2_2 = 1; break;
case 4: P2_4 = 1;P2_3 = 0; P2_2 = 0; break;
case 5: P2_4 = 0;P2_3 = 1; P2_2 = 1; break;
case 6: P2_4 = 0;P2_3 = 1; P2_2 = 0; break;
case 7: P2_4 = 0;P2_3 = 0; P2_2 = 1; break;
case 8: P2_4 = 0;P2_3 = 0; P2_2 = 0; break;
}
P0 = NixieTable[Number];
Delay1ms(500);
P0 = 0X00;
}
Nixie.h
#ifndef __Nixie_H__
#define __Nixie_H__
void Nixie(unsigned char Location,Number);
#endif