Keil C51大工程建立,模块化编程
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.c ,key.c , main.c
三个文件,然后通过在 main.c 中包含 led 和 key 所对应的头文件 .h 文件,就可以在 main.c 中调用两个模块中的函数,使整个工程看起来更加的明了。
下面我们介绍如何模块化编程。
首先我们新建两个文件夹, User 跟 HARDWARE ,在 HARDWARE 文件夹目录下创建两个子文件夹 LED 和 KEY
然后,我们新建一个Keil工程
保存到文件夹 User 中。接着新建四个文本,并分别保存为 led.c,led.h 和 key.c , key.h 另存到 HARDWARE 文件夹下的子文件夹 LED 和 KEY 文件夹中
同理,新建一个文本保存为 main.c 另存到 User 文件夹中
然后,我们在KEIL工程下面新建一个源组,命名为 HARDWARE ,另一个源组命名为 User.
源组建立完,我们把3个 .c 文件文本分别添加到源组当中
然后我们要进行很重要的一步操作
要把 led.c 跟 key.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.h 跟 key.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.h 跟 key.h
#include <reg52.h>
#include <led.h>
#include <key.h>
#include <intrins.h>void main()
{while(1){key();}
}
最后点击编译
Keil C51大工程建立,模块化编程相关推荐
- keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用"工程" (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发 ...
- keil软件基于AT89C52的基本工程建立及其相关设置
Keil软件的工程建立与应用 1.首先我们双击打开Keil软件 2.建立新的文件 3.我们单击保存 4.创建相应的文件夹并将该文件放置该文件夹目录下更名为asm后缀文件,如下图所示 5.单击Keil工 ...
- 如何对一个大的项目进行模块化编程。
转载于:http://blog.csdn.net/zhzht19861011/article/details/5974945 当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和 ...
- C语言怎么进行编程大型项目,如何对一个大的项目进行模块化编程
当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程.比如你可能只是负责通讯或者显示这一块.这个时候,你就应 ...
- Keil C51快速建立项目小技巧。
Keil 软件简单介绍 嵌入式领域常用的IDE有Keil4,Keil5,IAR,MAPLAB等等,不同的IDE使用与不同的单片机,今天主要是介绍如何用Keil4创建C51工程.其他软件暂时按下不表.安 ...
- keil c语言模块化编程,keil C模块化编程总结
昨晚看了下模块化编程的东西,把自己的工程整了整,可惜没成功.今早发神经似的起床敲代码,很快就发现了错误,原来是条件宏定义的头文件名忘改了,汗!!! 整理下模块化编程的要点,感谢以下三位UP主的帖子: ...
- C8051F340之keil uVision3工程建立
keil uVision3的开发环境下工程建立和环境配置 1.新建工程-->选择CPU类型.新建的工程存放在某个目录下,最好在该目录下建立Project和Source文件夹,分别存放工程文件和源 ...
- Keil C51工程转VSCode Keil Assistant开发全过程
Keil C51工程转VSCode Keil Assistant开发全过程 ✨这里以stc15W408AS为例.
- Keil C51中断编程中寄存器组的选用与保护
Keil C51中断编程中寄存器组的选用与保护 http://www.you01.com/article-14002-1.html
- 灵动微电子MM32F0010A,替换STM32芯片,keil工程建立
1.正常KEIL中找不到灵动微电子芯片,灵动微官网下载PACK包,地址如下: http://www.mindmotion.com.cn/download.aspx?cid=2546 下载完后解压,选择 ...
最新文章
- 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践
- MPB:林科院袁志林组-提取杨树人工林土壤微生物菌体细胞的4种方法
- lcd和服务器同时显示温度,51单片机LCD1602如何同时显示温度和时间
- 黄老师离开呆了十年的上海
- 第八章xgboost/lightGBM
- pandas 读写 excel
- STAR-GCN:用于推荐系统的图卷积神经网络 IJCAI 2019
- python中第三方模块_如何在python脚本中包含第三方模块?
- 比较两个listString是否相等
- vue 指令 v-once
- POJ3581 后缀数组
- iOS - AVAudioSession详解
- 秒杀疯狂猜成语3 花花的3300个成语 包括C#源代码 交流
- msfvenom生成muma
- 发光二极管 正向压降
- excel 数组公式
- 利用H5SVG实现线性动画效果
- LeetCode题解目录
- EXCEL中矩阵运算
- linux+格式化磁盘格式化,Linux下的磁盘格式化