模块化编程

合集下载

Python模块化编程

Python模块化编程

Python模块化编程:构建高效、可维护的代码基石在Python编程的广阔世界中,模块化编程是提升代码质量、促进团队协作、以及实现复杂项目可维护性的关键所在。

本文旨在深入探讨Python模块化编程的概念、原理、实践方法,并通过丰富的案例和代码示例,帮助初学者及进阶开发者掌握这一重要技能。

一、模块化编程概述1.1 什么是模块化编程?模块化编程是一种将大型程序分解为一系列小型、独立、可复用的代码块(称为模块)的过程。

每个模块负责完成特定的功能或任务,并通过定义良好的接口与其他模块进行交互。

这种编程方式有助于减少代码冗余、提高代码的可读性和可维护性,同时也便于团队协作和代码复用。

1.2 Python中的模块在Python中,模块可以是Python文件(.py文件),也可以是预先编译的共享库或C 语言扩展。

Python标准库提供了大量的模块,涵盖了从文件操作到网络编程、从数据处理到图形界面开发等各个方面。

此外,开发者还可以根据自己的需求创建自定义模块。

二、Python模块的基本操作2.1 导入模块Python提供了多种导入模块的方式,最基本的是使用import语句。

例如,要导入Python 标准库中的math模块,可以这样做:python复制代码import mathprint(math.sqrt(16)) # 输出4.0也可以使用from...import...语句从模块中导入特定的函数或类:python复制代码from math import sqrtprint(sqrt(16)) # 输出4.02.2 创建和使用自定义模块创建自定义模块非常简单,只需将Python代码保存在一个.py文件中即可。

然后,在其他Python文件中通过import语句导入该模块。

假设我们有一个名为mymodule.py的自定义模块,内容如下:python复制代码# mymodule.pydef greet(name):return f"Hello, {name}!"def add(a, b):return a + b在其他Python文件中,我们可以这样导入并使用它:python复制代码# main.pyimport mymoduleprint(mymodule.greet("Alice")) # 输出Hello, Alice!print(mymodule.add(5, 3)) # 输出82.3 模块搜索路径Python解释器在导入模块时会搜索一系列预定义的目录,这些目录构成了模块的搜索路径(sys.path)。

如何进行模块化编程

如何进行模块化编程

如何进行模块化编程模块化编程是一种软件开发方法,它将一个大型的软件系统拆分成多个相互独立的模块,每个模块都承担着特定的功能和责任。

模块化编程有助于提高代码的可重用性、可维护性和可扩展性,同时也提高了开发效率。

下面将介绍如何进行模块化编程。

一、模块化的概念在进行模块化编程之前,首先需要了解模块化的概念。

模块是指完成特定功能的代码块,它可以独立存在,也可以依赖其他模块。

模块化编程就是将复杂的系统分解为多个相对独立的模块,每个模块都负责完成一个明确的任务。

二、模块化编程的好处1. 提高代码的可重用性:模块化编程可以将代码以模块为单位进行封装,使得这些模块可以在不同的项目中进行复用,避免重复编写相同的代码。

2. 提高代码的可维护性:模块化编程可以将系统拆分成多个相对独立的模块,每个模块都可以独立开发和维护,当系统需要进行修改或升级时,只需要关注相应的模块即可。

3. 提高代码的可扩展性:由于模块之间相互独立,因此在新增功能或进行系统扩展时,只需要新增一个模块或修改少量的模块,不会影响到整体系统的稳定性。

4. 提高开发效率:模块化编程可以将复杂的系统分解为多个简单的模块,每个开发人员可以专注于某个模块的开发,从而提高开发效率。

三、实施模块化编程的步骤1. 定义模块的功能和接口:在进行模块化编程时,首先需要确定每个模块应该完成的功能,并定义模块与外部的接口规范,包括输入参数、返回值等。

2. 模块的独立性:每个模块应该尽可能地独立,不依赖其他模块的实现细节。

模块之间的通信应通过接口规范来进行,而不是直接调用其他模块的内部代码。

3. 模块的封装:每个模块应该将自己的内部实现细节隐藏起来,只提供对外的接口。

这样可以保证每个模块的内部变动不会影响到其他模块。

4. 模块的测试和调试:在编写完模块后,需要对每个模块进行测试和调试,确保其功能的正确性和稳定性。

5. 模块的组合和集成:当各个模块都完成测试和调试后,将它们组合起来进行集成测试,确保它们可以正常协同工作。

模块化编程的优点和实践

模块化编程的优点和实践

模块化编程的优点和实践模块化编程是一种软件开发方法,它将复杂的软件系统拆分为一系列独立的模块,每个模块都有自己的功能和接口。

模块化编程有很多优点,并且已经被广泛应用于实际开发中。

1.代码复用:模块化编程的一个主要优点是可以实现代码的复用。

通过将功能相似的代码组织在一个模块中,其他地方可以直接调用这个模块,而不需要重复编写相同的代码。

这样可以大大提高开发效率,并降低出错的可能性。

2.可维护性:模块化编程使得软件系统更易于维护。

每个模块都是独立的,修改一个模块不会影响其他模块的功能。

这使得开发人员可以更方便地修改和更新系统的各个部分,而不会对整个系统产生意想不到的影响。

3.可测试性:模块化编程使得软件系统更易于测试。

每个模块都有清晰的功能和接口定义,可以独立地进行单元测试。

这样,开发人员可以更精确地检测和修复系统中的问题,并且可以更方便地进行自动化测试。

4.并行开发:模块化编程使得多人同时开发一个大型软件系统变得容易。

不同开发人员可以独立地工作在不同的模块上,而不会相互影响。

只要各个模块的接口定义清晰,开发人员可以并行地进行开发,从而提高了整体开发效率。

5.提高代码的可读性:通过模块化编程,整个软件系统可以被分解为多个小的模块,每个模块都有自己的功能和接口。

这样可以使代码更加结构化,更易于理解和阅读。

开发人员可以更容易地理解每个模块的作用和功能,从而更好地维护和修改代码。

模块化编程的实践可以通过以下几个步骤来实现:1.划分模块:首先,需要对软件系统进行分析和设计,确定系统中的各个功能模块,并划分模块之间的依赖关系。

模块应该是独立的,每个模块只负责一个特定的功能,并且有清晰的输入和输出接口。

2.定义接口:每个模块都应该有明确的输入和输出接口定义。

接口应该清晰地规定了每个模块接收什么样的输入数据,以及输出什么样的数据。

接口可以使用函数、方法、类等形式来定义,不同的编程语言有不同的实现方式。

3.实现模块:按照模块的划分和接口的定义,实现各个模块的具体功能。

模块化编程的优点与方法

模块化编程的优点与方法

模块化编程的优点与方法在当今快速发展的科技时代,计算机编程已成为一项重要的技能。

而模块化编程作为一种编程方法,正日益受到广大编程工程师的青睐。

本文将探讨模块化编程的优点与方法,并介绍如何在实际项目中应用。

一、什么是模块化编程模块化编程是一种将程序拆分为独立功能模块的编程方法。

每个模块负责完成特定的任务,并与其他模块进行交互。

模块化编程的目的是提高代码的可维护性、可重用性和可读性。

二、模块化编程的优点1. 提高代码的可维护性:模块化编程将程序拆分为多个模块,每个模块负责一个特定的功能。

这样一来,当需要修改或优化某个功能时,只需关注该模块,而不需要修改整个程序。

这大大减少了维护代码的工作量,提高了代码的可维护性。

2. 提高代码的可重用性:模块化编程将程序拆分为多个独立的模块,每个模块可以独立使用,也可以在其他项目中重复使用。

这样一来,当需要实现相似功能时,可以直接引用已有的模块,而不需要重复编写代码。

这不仅提高了开发效率,还减少了出错的可能性。

3. 提高代码的可读性:模块化编程将程序拆分为多个模块,每个模块负责一个特定的功能。

这样一来,代码的逻辑结构更加清晰,易于理解和阅读。

同时,模块化编程还鼓励编写可重用的函数和类,使代码更加简洁、易于理解。

三、模块化编程的方法1. 模块的划分:在进行模块化编程时,首先需要将程序按照功能进行划分,将相关的功能放在同一个模块中。

划分模块时可以参考单一职责原则,即每个模块只负责一个特定的功能。

2. 模块之间的交互:在模块化编程中,模块之间需要进行交互。

可以通过函数调用、消息传递、共享变量等方式实现模块之间的通信。

在设计模块之间的接口时,应该尽量降低模块之间的耦合度,使得模块可以独立修改和测试。

3. 模块的测试和调试:在进行模块化编程时,每个模块都应该具有良好的测试和调试能力。

可以使用单元测试框架对每个模块进行测试,确保模块的功能正确。

同时,当出现问题时,可以通过模块的调试信息快速定位问题所在。

java模块化编程的理解

java模块化编程的理解

java模块化编程的理解
Java 模块化编程是指使用 Java 平台模块系统(JPMS)来构建和管理应用程序的模块化结构。

通过模块化编程,开发人员可以将应用程序分解为相互独立的模块,每个模块具有自己的功能和依赖关系。

这种模块化方法有助于提高代码的可维护性、可重用性和安全性。

在 Java 9 中引入了 JPMS,它引入了模块的概念,允许开发人员将代码组织成模块并声明模块之间的依赖关系。

每个模块都有自己的命名空间,可以明确地导出和引入其内部的公共 API。

这意味着模块之间的依赖关系更加清晰,可以更好地控制代码的可见性和访问权限。

模块化编程使得开发人员可以更好地管理复杂性,减少对全局变量和类路径的依赖,从而提高代码的可维护性。

此外,模块化编程还有助于减少应用程序的启动时间和内存占用,因为只有在需要时才会加载所需的模块。

总之,Java 模块化编程是一种现代化的软件设计方法,通过模
块化的方式组织和管理代码,可以提高应用程序的可维护性、可重用性和安全性,同时也有助于提高应用程序的性能和可靠性。

了解编程中的五个模块化设计方法

了解编程中的五个模块化设计方法

了解编程中的五个模块化设计方法模块化是一种将复杂系统划分成独立的、可组合的部分的设计方法。

在编程中,模块化设计方法是将程序划分成多个独立的模块,每个模块实现一个特定的功能或目标,从而达到提高代码的可维护性、复用性和可测试性的目的。

下面介绍五个常用的模块化设计方法。

第一个模块化设计方法是面向对象编程(Object-Oriented Programming, OOP)。

面向对象编程中,将程序设计成由对象组成的集合,每个对象都有自己的属性和方法。

通过将相似功能的代码封装到对象中,可以更好地组织和管理代码。

面向对象编程可以将系统的复杂性分解为多个小的、可重用的对象,从而提高代码的可维护性和复用性。

第二个模块化设计方法是函数式编程(Functional Programming)。

函数式编程中,将程序设计成由一系列的函数组成,每个函数接受输入参数并产生一个输出结果。

函数式编程强调函数的纯粹性和不变性,通过将代码分解为小的、独立的函数,可以实现代码的可复用性和可测试性。

第三个模块化设计方法是模块化编程。

模块化编程将程序设计成由多个模块组成的集合,每个模块实现一个特定的功能。

模块化编程中,模块之间通过接口进行通信,对外提供封装好的接口,可以隐藏内部实现细节,提高代码的可维护性和复用性。

第四个模块化设计方法是插件化设计。

插件化设计将程序设计成由核心功能和可插拔的插件组成。

核心功能是基本的、不变的功能,插件是可扩展的、可替换的功能,通过插件可以扩展和定制核心功能。

插件化设计可以使系统更具灵活性和可扩展性,可以根据需求灵活地添加或替换功能。

第五个模块化设计方法是依赖注入(Dependency Injection)。

依赖注入是一种将依赖关系从程序中解耦的方法,通过将依赖对象注入到程序中,可以使程序更加灵活和可测试。

依赖注入可以减少模块之间的紧耦合,提高代码的可维护性和可测试性。

综上所述,以上是编程中常用的五个模块化设计方法。

模块化代码

模块化代码

模块化代码模块化编程是现代软件开发中广泛采用的一种编程方式,它将大的程序划分为多个互相独立的小模块,每个模块都有自己的功能和逻辑。

这种方法能够提高代码的可维护性、可重用性和可扩展性,能够使开发者更加高效地开发和维护软件,也能够加速软件开发的速度和上线时间。

一、模块化代码的优点1. 代码可重用性模块化程序能够将多个独立的模块组合成一个有用的程序,开发人员可以只使用其中一个或多个模块,而不必重复编写代码。

这样可以提高代码的可重用性,减少代码的冗余,从而加快了程序开发的速度,降低了开发成本。

2. 提高代码的可维护性模块化编程是面向对象编程的核心之一,它将程序划分为多个小模块,每个模块都有自己的功能和逻辑,这样能够减少管理复杂程序的难度,使得程序的维护成为可能。

3. 简化程序测试和升级程序的模块化设计使得程序测试和升级更加容易,因为每一个模块都可以独立地测试和更新。

这样可以更好地监控程序的每一个部分,从而使程序的运行更加安全可靠。

4. 可重构性模块化程序极具可重构性,这意味着模块可以独立开发,然后再进行组合。

因为每个模块都有自己的功能,所以程序可以根据需要进行调整和修改。

这种设计思路使得程序维护更容易、任务更轻松。

5. 提高柔性和扩展性模块化软件设计使得程序更易于扩展和调整。

程序中的每一个模块都是独立的,因此可以根据需要添加、删除或调整模块,而不必影响到程序的其他部分。

这样程序更具可扩展性和可定制性,能够满足客户不断变化的需求。

二、模块化代码的实现模块化编程可以通过各种编程语言实现,例如 JavaScript,Python 和 Ruby 等。

在下面的示例中,我们将使用 JavaScript 的模块化机制来说明如何实现模块化编程。

1. 模块化代码的基本结构在 JavaScript 中,模块化代码的基本结构包含三个部分:模块定义、外部依赖和返回值。

其中,模块定义包括模块名称、模块依赖、模块顶级函数和其它内部函数以及顶级变量。

模块化编程案例

模块化编程案例

模块化编程案例模块化编程是一种将程序划分为独立、可重用、可测试的模块的编程方法。

它能够提高代码的可维护性、可读性和可复用性,并且使开发过程更加高效。

下面是一些关于模块化编程的案例:1. 案例一:图书管理系统在一个图书馆的图书管理系统中,可以将不同功能的代码模块化,比如图书的借阅模块、归还模块、查询模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

这样,当需要修改或添加某个功能时,只需修改对应的模块,而不影响其他模块的功能。

2. 案例二:购物网站在一个购物网站的后台管理系统中,可以将不同功能的代码模块化,比如商品管理模块、订单管理模块、用户管理模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

这样,当需要修改或添加某个功能时,只需修改对应的模块,而不影响其他模块的功能。

3. 案例三:游戏开发在游戏开发中,可以将不同功能的代码模块化,比如角色控制模块、地图生成模块、碰撞检测模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

这样,当需要修改或添加某个功能时,只需修改对应的模块,而不影响其他模块的功能。

4. 案例四:音乐播放器在一个音乐播放器的软件中,可以将不同功能的代码模块化,比如音乐搜索模块、播放控制模块、歌词显示模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

这样,当需要修改或添加某个功能时,只需修改对应的模块,而不影响其他模块的功能。

5. 案例五:社交媒体平台在一个社交媒体平台的开发中,可以将不同功能的代码模块化,比如用户管理模块、信息发布模块、评论管理模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

这样,当需要修改或添加某个功能时,只需修改对应的模块,而不影响其他模块的功能。

6. 案例六:电子邮件客户端在一个电子邮件客户端的开发中,可以将不同功能的代码模块化,比如邮件接收模块、邮件发送模块、邮件搜索模块等。

每个模块都有自己的功能和接口,可以独立进行开发和测试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

好的开始是成功的一半通过上一章的学习,我想你已经掌握了如何在程序中释放CPU了。

希望能够继续坚持下去。

一个良好的开始是成功的一半。

我们今天所做的一切都是为了在单片机编程上做的更好。

在谈论今天的主题之前,先说下我以前的一些经历。

在刚开始接触到C语言程序的时候,由于学习内容所限,写的程序都不是很大,一般也就几百行而矣。

所以所有的程序都完成在一个源文件里面。

记得那时候大一参加学校里的一个电子设计大赛,调试了一个多星期,所有程序加起来大概将近1000行,长长的一个文件,从上浏览下来都要好半天。

出了错误简单的语法错误还好定位,其它一些错误,往往找半天才找的到。

那个时候开始知道了模块化编程这个东西,也尝试着开始把程序分模块编写。

最开始是把相同功能的一些函数(譬如1602液晶的驱动)全部写在一个头文件(.h)文件里面,然后需要调用的地方包含进去,但是很快发现这种方法有其局限性,很容易犯重复包含的错误。

而且调用起来也很不方便。

很快暑假的电子设计大赛来临了,学校对我们的单片机软件编程进行了一些培训。

由于学校历年来参加国赛和省赛,因此积累了一定数量的驱动模块,那些日子,老师每天都会布置一定量的任务,让我们用这些模块组合起来,完成一定功能。

而正是那些日子模块化编程的培训,使我对于模块化编程有了更进一步的认识。

并且程序规范也开始慢慢注意起来。

此后的日子,无论程序的大小,均采用模块化编程的方式去编写。

很长一段时间以来,一直有单片机爱好者在QQ上和我一起交流。

有时候,他们会发过来一些有问题的程序源文件,让我帮忙修改一下。

同样是长长的一个文件,而且命名极不规范,从头看下来,着实是痛苦,说实话,还真不如我重新给他们写一个更快一些,此话到不假,因为手头积累了一定量的模块,在完成一个新的系统时候,只需要根据上层功能需求,在底层模块的支持下,可以很快方便的完成。

而不需要从头到尾再一砖一瓦的重新编写。

藉此,也可以看出模块化编程的一个好处,就是可重复利用率高。

下面让我们揭开模块化神秘面纱,一窥其真面目。

C语言源文件*.c提到C语言源文件,大家都不会陌生。

因为我们平常写的程序代码几乎都在这个XX.C 文件里面。

编译器也是以此文件来进行编译并生成相应的目标文件。

作为模块化编程的组成基础,我们所要实现的所有功能的源代码均在这个文件里。

理想的模块化应该可以看成是一个黑盒子。

即我们只关心模块提供的功能,而不管模块内部的实现细节。

好比我们买了一部手机,我们只需要会用手机提供的功能即可,不需要知晓它是如何把短信发出去的,如何响应我们按键的输入,这些过程对我们用户而言,就是是一个黑盒子。

在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。

而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。

而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。

C语言头文件*.h谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。

在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。

在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。

假设我们有一个LCD.C文件,其提供最基本的LCD的驱动函数LcdPutChar(char cNewValue) ; //在当前位置输出一个字符而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?头文件的作用正是在此。

可以称其为一份接口描述文件。

其文件内部不应该包含任何实质性的函数代码。

我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。

同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。

但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。

因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。

同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。

下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

于是便得到了LCD.C的头文件LCD.h 其内容如下。

#ifndef _LCD_H_#define _LCD_H_extern LcdPutChar(char cNewValue) ;#endif这与我们在源文件中定义函数时有点类似。

不同的是,在其前面添加了extern 修饰符表明其是一个外部函数,可以被外部其它模块进行调用。

#ifndef _LCD_H_#define _LCD_H_#endif这个几条条件编译和宏定义是为了防止重复包含。

假如有两个不同源文件需要调用LcdPutChar(char cNewValue)这个函数,他们分别都通过#include“Lcd.h”把这个头文件包含了进去。

在第一个源文件进行编译时候,由于没有定义过_LCD_H_ 因此#ifndef _LCD_H_ 条件成立,于是定义_LCD_H_ 并将下面的声明包含进去。

在第二个文件编译时候,由于第一个文件包含时候,已经将_LCD_H_定义过了。

因此#ifndef _LCD_H_ 不成立,整个头文件内容就没有被包含。

假设没有这样的条件编译语句,那么两个文件都包含了extern LcdPutChar(char cNewValue) ; 就会引起重复包含的错误。

不得不说的typedef很多朋友似乎了习惯程序中利用如下语句来对数据类型进行定义#define uint unsigned int#define uchar unsigned char然后在定义变量的时候直接这样使用uint g_nTimeCounter = 0 ;不可否认,这样确实很方便,而且对于移植起来也有一定的方便性。

但是考虑下面这种情况你还会这么认为吗?#define PINT unsigned int * //定义unsigned int 指针类型PINT g_npTimeCounter, g_npTimeState ;那么你到底是定义了两个unsigned int 型的指针变量,还是一个指针变量,一个整形变量呢?而你的初衷又是什么呢,想定义两个unsigned int 型的指针变量吗?如果是这样,那么估计过不久就会到处抓狂找错误了。

庆幸的是C语言已经为我们考虑到了这一点。

typedef 正是为此而生。

为了给变量起一个别名我们可以用如下的语句typedef unsigned int uint16 ; //给指向无符号整形变量起一个别名uint16typedef unsigned int * puint16 ; //给指向无符号整形变量指针起一个别名puint16在我们定义变量时候便可以这样定义了:uint16 g_nTimeCounter = 0 ; //定义一个无符号的整形变量puint16 g_npTimeCounter ; //定义一个无符号的整形变量的指针在我们使用51单片机的C语言编程的时候,整形变量的范围是16位,而在基于32的微处理下的整形变量是32位。

倘若我们在8位单片机下编写的一些代码想要移植到32位的处理器上,那么很可能我们就需要在源文件中到处修改变量的类型定义。

这是一件庞大的工作,为了考虑程序的可移植性,在一开始,我们就应该养成良好的习惯,用变量的别名进行定义。

如在8位单片机的平台下,有如下一个变量定义uint16 g_nTimeCounter = 0 ;如果移植32单片机的平台下,想要其的范围依旧为16位。

可以直接修改uint16 的定义,即typedef unsigned short int uint16 ;这样就可以了,而不需要到源文件处处寻找并修改。

将常用的数据类型全部采用此种方法定义,形成一个头文件,便于我们以后编程直接调用。

文件名MacroAndConst.h其内容如下:#ifndef _MACRO_AND_CONST_H_#define _MACRO_AND_CONST_H_typedef unsigned int uint16;typedef unsigned int UINT;typedef unsigned int uint;typedef unsigned int UINT16;typedef unsigned int WORD;typedef unsigned int word;typedef int int16;typedef int INT16;typedef unsigned long uint32;typedef unsigned long UINT32;typedef unsigned long DWORD;typedef unsigned long dword;typedef long int32;typedef long INT32;typedef signed char int8;typedef signed char INT8;typedef unsigned char byte;typedef unsigned char BYTE;typedef unsigned char uchar;typedef unsigned char UINT8;typedef unsigned char uint8;typedef unsigned char BOOL;#endif至此,似乎我们对于源文件和头文件的分工以及模块化编程有那么一点概念了。

那么让我们趁热打铁,将上一章的我们编写的LED闪烁函数进行模块划分并重新组织进行编译。

在上一章中我们主要完成的功能是P0口所驱动的LED以1Hz的频率闪烁。

其中用到了定时器,以及LED驱动模块。

因而我们可以简单的将整个工程分成三个模块,定时器模块,LED 模块,以及主函数对应的文件关系如下main.cTimer.c --◊Timer.hLed.c --◊Led.h在开始重新编写我们的程序之前,先给大家讲一下如何在KEIL中建立工程模板吧,这个模板是我一直沿用至今。

希望能够给大家一点启发。

下面的内容就主要以图片为主了。

同时辅以少量文字说明。

相关文档
最新文档