Keil C51大工程建立,模块化编程

刚学习单片机的时候,接触的一般都是些简单的例子,只有一个 .c
文件和一个 .h,所有的函数都写在 .c 文件里,但是往往实际中遇到的都是比较大的工程项目,在建立大工程的时候为了能够更方便清晰的去写代码、修改代码,通常会使代码模块化,即将实现不同功能的函数独立出来,单独写在一个文件中。下面开始讲解怎么去模块化编程。

假设,我们做一个按键流水灯实验,按下K1键流水灯从右往左依次亮灭,按下K2流水灯从左往右依次亮灭。
在不使用模块化编程的情况下,程序全部都写在 main.c 这个C文件里:

#include <reg52.h>
#include <intrins.h>
#define LED P2sbit k1=P3^0;
sbit k2=P3^1;typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;void delay(int i)   //延时函数{while(i--);}void ledr()
{u16 n;LED=0x7f;delay(50000);for(n=0;n<8;n++){LED=_cror_(LED,1);delay(50000);}}void ledl()
{u16 n;LED=0xfe;delay(50000);for(n=0;n<8;n++){LED=_crol_(LED,1);delay(50000);}}void key(){if(k1==0){delay(1000);if(k1==0){ledr();}}if(k2==0){delay(1000);if(k2==0){ledl();}}}void main()
{while(1){key();}
}

从上面可以看出如果所有程序都写在 main.c 文件里的话遇到代码量大,复杂的系统时,可读性就会变差。而模块化编程可以解决这个问题,我们可以把上述的例子分别独立成 led.ckey.c , main.c
三个文件,然后通过在 main.c 中包含 ledkey 所对应的头文件 .h 文件,就可以在 main.c 中调用两个模块中的函数,使整个工程看起来更加的明了。

下面我们介绍如何模块化编程。
首先我们新建两个文件夹, UserHARDWARE ,在 HARDWARE 文件夹目录下创建两个子文件夹 LEDKEY
然后,我们新建一个Keil工程

保存到文件夹 User 中。接着新建四个文本,并分别保存为 led.cled.hkey.c , key.h 另存到 HARDWARE 文件夹下的子文件夹 LEDKEY 文件夹中

同理,新建一个文本保存为 main.c 另存到 User 文件夹中

然后,我们在KEIL工程下面新建一个源组,命名为 HARDWARE ,另一个源组命名为 User.


源组建立完,我们把3个 .c 文件文本分别添加到源组当中




然后我们要进行很重要的一步操作

要把 led.ckey.c 文件所在的 文件夹 添加到路径当中。
点开魔术棒

点开C51目录下的包含文件路径。


注意 添加文件夹时,是添加 .c 文件所在的文件夹即可.如下所示


点击确定即可。

然后我们就可以开始模块化的程序编写了。

首先,我们写一个led流水灯模块的程序。我们先编写 led.h 这个头文件,在头文件中声明我们所需要用到的延时函数,左流水灯函数跟右流水灯函数,程序如下:

#ifndef __LED_H_
#define __LED_H_#define LED P2typedef unsigned char u8;
typedef unsigned int u16;void ledr();
void ledl();
void delay(int i);#endif


然后我们编写 led.c 在文件中,我们要包含 led.h 这个头文件。

#include <reg52.h>#include <led.h>         //包含这个头文件#include <intrins.h>void delay(int i){while(i--);}void ledr()
{u16 n;LED=0x7f;delay(50000);for(n=0;n<8;n++){LED=_cror_(LED,1);delay(50000);}}void ledl()
{u16 n;LED=0xfe;delay(50000);for(n=0;n<8;n++){LED=_crol_(LED,1);delay(50000);}}


同理,我们编写 key.hkey.c

#ifndef __KEY_H_
#define __KEY_H_sbit k1=P3^0;
sbit k2=P3^1;void key();#endif

***注意,因为我们要在 key.c 文件中调用 led.c 中的函数 ledr 跟 ledl,因此我们要在 key.c 的头文件中包含 led.h ***

#include <reg52.h>
#include <key.h>
#include <led.h>void key(){if(k1==0){delay(1000);if(k1==0){ledr();}}if(k2==0){delay(1000);if(k2==0){ledl();}}}

这样,我们将两个模块的程序已经编写完成了。最后,我们只需要要在 main.c 中调用两个模块中的函数就可以方便的完成主程序的编写了。

与上一步相同的是,我们也要在头文件中包含 led.hkey.h

#include <reg52.h>
#include <led.h>
#include <key.h>
#include <intrins.h>void main()
{while(1){key();}
}

最后点击编译

Keil C51大工程建立,模块化编程相关推荐

  1. keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程

    同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用"工程" (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发 ...

  2. keil软件基于AT89C52的基本工程建立及其相关设置

    Keil软件的工程建立与应用 1.首先我们双击打开Keil软件 2.建立新的文件 3.我们单击保存 4.创建相应的文件夹并将该文件放置该文件夹目录下更名为asm后缀文件,如下图所示 5.单击Keil工 ...

  3. 如何对一个大的项目进行模块化编程。

    转载于:http://blog.csdn.net/zhzht19861011/article/details/5974945 当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和 ...

  4. C语言怎么进行编程大型项目,如何对一个大的项目进行模块化编程

    当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程.比如你可能只是负责通讯或者显示这一块.这个时候,你就应 ...

  5. Keil C51快速建立项目小技巧。

    Keil 软件简单介绍 嵌入式领域常用的IDE有Keil4,Keil5,IAR,MAPLAB等等,不同的IDE使用与不同的单片机,今天主要是介绍如何用Keil4创建C51工程.其他软件暂时按下不表.安 ...

  6. keil c语言模块化编程,keil C模块化编程总结

    昨晚看了下模块化编程的东西,把自己的工程整了整,可惜没成功.今早发神经似的起床敲代码,很快就发现了错误,原来是条件宏定义的头文件名忘改了,汗!!! 整理下模块化编程的要点,感谢以下三位UP主的帖子: ...

  7. C8051F340之keil uVision3工程建立

    keil uVision3的开发环境下工程建立和环境配置 1.新建工程-->选择CPU类型.新建的工程存放在某个目录下,最好在该目录下建立Project和Source文件夹,分别存放工程文件和源 ...

  8. Keil C51工程转VSCode Keil Assistant开发全过程

    Keil C51工程转VSCode Keil Assistant开发全过程 ✨这里以stc15W408AS为例.

  9. Keil C51中断编程中寄存器组的选用与保护

    Keil C51中断编程中寄存器组的选用与保护 http://www.you01.com/article-14002-1.html

  10. 灵动微电子MM32F0010A,替换STM32芯片,keil工程建立

    1.正常KEIL中找不到灵动微电子芯片,灵动微官网下载PACK包,地址如下: http://www.mindmotion.com.cn/download.aspx?cid=2546 下载完后解压,选择 ...

最新文章

  1. 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践
  2. MPB:林科院袁志林组-提取杨树人工林土壤微生物菌体细胞的4种方法
  3. lcd和服务器同时显示温度,51单片机LCD1602如何同时显示温度和时间
  4. 黄老师离开呆了十年的上海
  5. 第八章xgboost/lightGBM
  6. pandas 读写 excel
  7. STAR-GCN:用于推荐系统的图卷积神经网络 IJCAI 2019
  8. python中第三方模块_如何在python脚本中包含第三方模块?
  9. 比较两个listString是否相等
  10. vue 指令 v-once
  11. POJ3581 后缀数组
  12. iOS - AVAudioSession详解
  13. 秒杀疯狂猜成语3 花花的3300个成语 包括C#源代码 交流
  14. msfvenom生成muma
  15. 发光二极管 正向压降
  16. excel 数组公式
  17. 利用H5SVG实现线性动画效果
  18. LeetCode题解目录
  19. EXCEL中矩阵运算
  20. linux+格式化磁盘格式化,Linux下的磁盘格式化

热门文章

  1. 项目部署发布CruiseControl工具介绍
  2. MFC 为按钮加载位图 CBitmapButton
  3. 省市县地区编码五级联东2021年版sql
  4. 骑士CMS人才招聘系统初次接触
  5. Dollars即时聊天客户端应用源码
  6. dwr 例外被抛出且未被接住 engine.js
  7. PCA实现高维数据可视化
  8. linux制作flash软件,Linux 下的三款 Flash 独立播放器
  9. post 请求下载文件
  10. 华为手机解锁码计算工具_华为最新解bl解锁码计算工具 V2.0.2 免费版