keil5 的模块化编程详解

模块化编程是什么?就是可以吧你学的程序分成一个个模块,方便修改和移植。从事单片机和嵌入式这方面,编程具有强大移植性可以说是重中之重,如果你写一些LED数码管之类的小程序,

用模块化编程有些小题大做。但是在团队做项目中,需要不同的人负责不同的一段程序,这时候就需要模块化编程了,在个人编大程序时也要用,因为好修改,想想你的代码几十行还好,如果

几百几千行呢?所以说到这里,可见模块化编程几乎是所有大程序要做的,不然怎么修改?尤其是单片机这种灵活的语言。(建议有C语言基础的同学看)

  先提前说说与模块化编程有关的关键字加上英文意思; 

static(静止的)

        extern(外部的)

   typedef(类型定义)

        #define(定义)

**********************************

#ifndef __**_H_  //如果有**.h文件,就。。。

#define __**_H_  //如果没有就寻找**.h文件

#endif  //否则就结束

呵呵,先看看热热身 ,我们知道C语言有.c文件和.h文件,.c文件就是我们写的程序。.h文件呢是库文件,在写C语言程序的时候, #include“***.h”或include<***.h>,就是寻找库文件路径的意思,只是开始寻找的起点不同,

比如printf输出函数在stdio库里就有这个函数,我们只不过是拿来用而已,我想表达的是,库文件里面存了方便我们去写程序的函数(也是程序,不过以函数的形式打包来让我们用)

顺便说说code这个关键字吧,比如 int code arr[]={};意思是把这个 i 变量的所占用的空间放在ROM中,也就是只读存储器,这样动态数据就可以拥有更多的空间速度也快了CPU也轻松了。单片机的内存是很宝贵的,RAM的容量运比ROM的小,而RAM又与CPU挂钩,其实我们手机的性能好不好与RAM有很大关系,我们说的运行内存就是RAM,太专业的小编也不会,我们知道code可以节省单片机内存就知道了。

关键字这些与内存挂钩,C语言难也是难在内存上,我们掌握基本的用法来编C51就行不是吗,我这里是浅谈,

       想深入了解static的点这个链接            https://blog.csdn.net/keyeagle/article/details/6708077

static 在程序中的作用是,当你在变量或函数面前加static后,表示该函数或变量就只能在这个C文件里用了,相当于一把锁来锁住它们。

           想深入了解extern的点这个链接           https://www.cnblogs.com/Lunais/p/5991135.html

typedef和#define在两个宏定义很常用,以后还会专门为typedef搞个库方便调用,

   比如现在要定义数据类型

     可以这样  typedef  int   P;(加分号)

                    #define  P  int(不允许加任何符号)

在后面要用到int来定义变量时可以直接,P  i=0(int  i=0);  我们用宏定义给这个数据可惜起了一个新名字P;C51的大程序里用的很多;

  typedef unsigned int  uInt8;      typedef unsigned char uChar16; 表示用uInt8新名字来代替unsigned int的类型

接下来开始模块化编程,想按照步骤试试一遍,首先建立一个文件夹 

 

在里面

建立四个文件夹,c文件夹放.c文件,h文件夹放.h文件,main文件夹放main.c主函数文件,project文件夹放一些项目文件;

这样可能有点晕是吧,没事下面就懂了;打开keil软件新建项目

放在project文件夹里;取名pro,当然名字随便取的

之后开始建立才C和H文件,一个C文件对应一个H文件,

分别命名为delay.c     delay.h    led.h  led.c  main.c  存到之前建立的c和h main文件夹中。

main.c主C文件单独放在main文件夹中

全部保存效果是这样的

一个C文件对应一个h文件,名字一样,这样好找。现在可以先在C文件里编程,也可以先提前设置好一些东西,这个前后顺序是没关系的,我先设置吧

点这个;弹出

可以吧标号1看做是大的以个文件夹,标号2是子文件,编号3是子文件夹对应的C文件;名字随便取,这里我取的是这些名字,接下来是到入C文件

蓝底宽表示选中的目录下 导入,

接下来是同样的步骤导入对应的C文件,完成后点击OK

完成之后就是这样的以个布局效果;

问题来了,这么多的C文件,我们要把编译的路径告诉给软件,不然找不到H也就是库文件,之前不是模块化编程我们不用理路径,是应为软件自带了#include"reg52.h"这些了,而现在我们是要自己

造出#include“”这些,所以要给路径,

第三是设置晶振频率,和编写的程序的晶振频率一样,第四是勾选生存HEX文件

第五是搞路径的如图

在这个框点6,

点7建立   ×是删除

点7后有框出来点8添加文件夹上的H文件夹就可以了;然后一直OK;

编译后有两个警告是因为两个H文件夹没用,接下来编程;

还有就是特别注意,#include" **.h"这里的名字一定是和H文件夹的名字一样。

是的delayh文件书写格式是这样的;把函数名搞都里面;其实还要在void前面加extern的,但是keil5软件是默认前面已经加了,所以可加可不加;还有就是#ifndef后面加的这些__DELAY_H_  红色部分是可以以随便起不与其它重复的名称的,但是不管起什么名都得和下面#define一样,

LED的C程序,引用了Delay_Ms函数;

所以接下来

在LED的H中包delay的库包含进来,那么现在#include“led.h中有几个库呢?有52的耶有delay的,

那写个主程序main编译后就直观了。

零错误警告

看到了吗,箭头的地方是那些h文件,是不是层层叠起来的,所以现在有点明白了这些格式的含义和模块化编程的强大了吗,

都练习几次,加深理解,还有学到这里读者可以去网上看看别的模块化程序,还有很多技巧笔者就不多说了,有了基础可以慢慢理解别人的的知识,然后

会做,最后形成自己的编程风格。

 

原文地址:https://www.cnblogs.com/hongjuedong/p/9214594.html

时间: 2024-10-22 03:06:28

keil5 的模块化编程详解的相关文章

Javascript模块化编程详解

在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代码更易于理解,但是有许多优秀的实践还没有广为人知. 基础 我们首先简单地概述一下,自从三年前Eric Miraglia(YUI的开发者)第一次发表博客描述模块化模式以来的一些模块化模式.如果你已经对于这些模块化模式非常熟悉了,大可以直接跳过本节,从“进阶模式”开始阅读. 匿名闭包 这是一种让一切变为

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

ORACLE PL/SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,所以呢,很多时候我们是会基于这样的原则来混合使用 QML 和 C++: QML 构建界面, C++ 实现非界面的业务逻辑和复杂运算. 请给

iOS定位服务编程详解

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位.iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案.这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GP