51单片机的基础知识笔记——关于模块化编程

前言:

模块化编程就是一种分类管理的思想,把不同的模块所实现的功能放在不同的文件里面,然后在集中的把它组织起来,这样可以提高我们代码的可阅读性,可维护性,可移植性。

传统方式的编程:

所有的函数均放在main.c里面,若使用的模块比较多,则一个文件内就会用很多的代码,不利于代码的组织和管理,而且影响编程者的思路。

模块化的编程:

把各种模块的代码放在不同的.c文件里面,在.h文件里面提供外部可调用函数的声明,其他的.c文件想使用其中的代码时,只需要写 “#include "xxx.h”文件即可,使用模块化的编程可以极大的提高代码的可阅读性,可维护性,可移植性等

二、LCD1602调试工具

使用LCD1602液晶屏作为调试工具,提供类似printf函数的功能,可以实现观察单片机内部数据的变换情况,便于调试和演示。

LCD1602代码属于模块化代码,使用者只需要知道所提供的函数的作用和使用方法就可以很容易得使用LCD1602

函数   LCD_Init(); ————初始化;

函数    LCD_ShowChar(1,1,'A');————显示一个字符

函数  LCD_ShowString(1,3,"Hello");————显示字符

函数  LCD_ShowNum(1,9,123,3);  ————显示十进制的数字

函数 LCD_ShowSignedNum(1,13,-66,2);—————显示有符号的十进制数字

函数 LCD_ShowHeNum(2,1,0xA8,2);————显示十六进制的数字

函数 LCD_ShowBinNum(2,4,0x88,8);————显示二进制的数字

比如说我们的延时函数和数码管的断码结构体就是一个个的实现某种固定功能的代码,我们需要这些代码的时候,那么就会重新的打开先前的.c文件,对特定片段的功能代码进行复制粘贴,那么其代码的可移植性就比较弱。 

下面的我们来以51单片机为例子:

第一个文件是 Delay.c ,其文件的代码如下:

void Delay(unsigned int xms)

{
	unsigned char i, j;
	while (xms != 0)
	{

		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);

	}
}

第二个文件是 Delay.h文件

#pragma once
#ifndef _DELAY_H_
#define _DELAY_H_

void Delay(unsigned int xms);

#endif

第三个文件:main.c文件

#include "Delay.h"

void main()
{
	Delay(10);
}

以上就是模块化编程的例子

这样我们就可以看到我们把Delay延时函数的函数主题,从main函数当中移出去了。

关于模块化编程需要注意的事项

.c文件:函数,变量的定义

.h文件:可被外部调用的函数,变量的声明

一、任何自定义的变量,函数在调用前必须有定义或者声明(同一个.c文件)

二、使用到的自定义函数的.c文件必须使用添加到工程当中参与编译

 三、使用到的.h文件必须要放在编译器可以寻找到的地方(工程文件夹根目录,安装目录,自定义)

预编译

关于C语的预编译是以#为开头的,作用就是在编译开始之前,对代码进行预先的一些处理(预编译)

#include <REGX52.H>  就是把文件REGX52.H的内容移动到这里来

#define PI 3.14  定义PI,并将PI 替换为3.14

#define ABC  定义ABC

#ifndef  ___XX_H_      如果没有定义__XX_H__

#endif  与#ifdef,#if匹配,组成“括号”

注意:#ifndef和#endif 就是防止重复定义的,例如:

#ifdef  AAA

bfoahdaiu

#enif

如果前面定义了AAA,那么#ifdef和#enif之间的代码,才参与编译。如果没有定义AAA,那么下面的代码就不会参与编译。所以我们可以说,#define 和 #ifdef  和#enif 三者可以进行配套使用的

那么“#ifndef”和“enif” 他们的情况也是一样的,例如

#ifndef  AAA

baobeishuijiao

#endif  

代表的意思就是如果他们没有定义AAA的话,那么#ifndef和#enif 之间的代码就会参与编译

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值