c语⾔模块化编程实例,单⽚机C语⾔学习之模块化编程完结篇单⽚机C语⾔学习之模块化编程
单⽚机模块化编程是针对编写容量较⼤的程序的⼀种编程⽅法,这种编程会更好的管理⾃⼰所建的⼯程⽂件。下⾯是模块化编程的⼀般步骤:
1.新建⼯程⽂件夹(如:C:\模块化编程),具体步骤略。另外在此⽂件夹下新建四个⽂件,分别命名为output、src、inc和listing。
2.新建⼯程(直接命名为模块化编程并保存在⼯程⽂件夹下),具体步骤略。
3.设置Target
Options对话框
在Target窗⼝下做出如下图1、图2修改与设置。
图1
图2
之后还将做出如下步骤(图3、图4):
图3
图4
4.设置Components对话框
将图6的两个红⾊箭头处改为图7那样(也可根据个⼈的情况来命名),如果想新建或删除已有的⽂件,可以点击1,2位置来进⾏新建或删除。
图5
之后弹出图6所⽰的界⾯。
图6
5.新建源⽂件(.c⽂件和.h⽂件)
先建main.c⽂件,直接将其保存在⼯程⽂件夹(C:\模块化编程)下;在建其他.c⽂件(如delay.c、led.c),将它们保存在src⽂件夹下;最后建.h⽂件(如delay.h、led.h、common.h),将它们保存在inc⽂件夹下。
6.添加源⽂件(.c⽂件)到⼯程
具体⽅法如下图:
图8
图9
添加成功后可以看到左栏如下图所⽰:
图10
图10
那么接下来应该怎样在⾥⾯编写源程序就是⾮常关键的问题了。.c⽂件⼀般是⽤来放函数和定义的变量的,如主函数放在main.c中,延时函数放在delay.c中,.h⽂件是对各个模块的声明,也就是对相应
的函数进⾏封装,在封装的过程中不能包含任何实质性的函数代码。如⽤模块化编程来编写⼀个简单的单向流⽔灯程序,需要新建main.c、delay.c和led.c三个源⽂件以及common.h、delay.h和led.h三个.h⽂件。具体代码如下:
//main.c⽂件
#include"led.h"
//包含该头⽂件,是因为主函数调⽤了流⽔灯函数void main()
{
led_flash();
//调⽤流⽔灯函数
}
//delay.c⽂件
#include"delay.h"
void delay(uintz)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//led.c⽂件
最容易上手的编程语言#include"led.h"
uchar temp;//定义⼀个字符型的变量
void led_flash()
{
temp=0xfe;
P1=temp;
while(1)
{
temp=_crol_(temp,1);//循环左移
delay(1000);//延时约1000ms
P1=temp;
}
}
//common.h⽂件
#ifndef_COMMON_H_
#define_COMMON_H_
typedef unsigned int uint;
typedef unsigned
char uchar;
//宏定义
#endif
//delay.h⽂件
#ifndef_DELAY_H_
#define_DELAY_H_
#include"common.h"
//由于delay.c⽂件中⽤到了宏定义uint,所以在这⾥要包含common.h
extern void delay(uint z);
#endif
//led.h⽂件
#ifndef _LED_H_
#define _LED_H_
#include"delay.h"
//包含delay.h是由于led.c⽂件调⽤了delay()函数
#include
//在这⾥包含51头⽂件是因为led.c中⽤到了P1⼝
#include
//包含循环移位的头⽂件
extern void
led_flash();//在头⽂件中声明函数需冠以extern关键字
#endif
通俗的讲,⼀个模块化程序⾥⾯包含硬件驱动模块和软件功能模块。⽐如上⾯的例⼦⾥⾯led.c⽂件是⽤来驱动(可以理解为点亮)LED灯的。像这样的模块属于硬件驱动模块。⽽main.c是⽤来调⽤各个⼦函数的;delay.c是⽤来延时的。这些模块没有与之对应的硬件模块,只是起特定的功能,因此它们属于软件功能模块。
当上⾯所有的⼯作都做好了之后,我们开始编译,但发现了许多错误,如下图:
图11
出现这些错误的原因是我们没有完成源⽂件路径的添加,具体添加⽅法如下:
图12
图13
图14
图15
完成上述路径的添加,在编译源⽂件,就不会出现上⾯的错误了,接着便可⽣成.HEX⽂件了。
这便是⼀个简单的模块化编程实例。实际中遇到这样⼀个程序并不需要模块化编程,因为它使编程的流程变得更加复杂了。但模块化编程确实有很⼤⽤处,当我们遇到的问题⽐较复杂时,要编写的程序的量也相对较⼤,这时模块化编程便是⼿中的⼀把利器,它会为你开辟⼀条宽敞⽽光明的⼤道。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。