《单片机C语言模块化设计.doc》由会员分享,可在线阅读,更多相关《单片机C语言模块化设计.doc(3页珍藏版)》请在金锄头文库上搜索。
1、单片机C语言模块化设计leech自顶向下,逐步细分,分功能实现的模块化设计,将让你的程序更清晰。下面,我将以点亮两个LED的程序向大家介绍模块化设计的框架结构的写法。每一个功能模块都是由.H和.C文件组成, c文件是功能的实现,H文件是该功能与外部的接口C文件如下:led.c/第一部分,包含相应的头文件#include stm8_example.h #include led.h/该功能模块的接口/第二部分,定义该功能模块要用到的变量int flagGreen;/绿灯亮的标志int flagCount;/绿灯亮的次数/第三部分,声明该模块要实现的函数void Led_Control(uchar
2、ch);void delayNms(int ms);/第四部分,函数的具体实现。/各位同学不用关心实现的是什么功能,我们的目的是了解这个结构就行了void Led_Control(uchar ch)switch(ch)case GREEN:PD_ODR&=0x08;PD_ODR|=0x04;break;case RED:PD_ODR&=0x04;PD_ODR|=0x08;break;case BON:PD_ODR&=0x0C;break;case BOFF:PD_ODR|=0x0C;break;default:PD_ODR|=0x0C;break;void delayNms(int ms)in
3、t x;for(;ms0;ms-)for(x=2000;x0;x-);同学们应该发现,跟我们平时的写法没什么两样,只是少了MAIN()函数。因为它只是一个功能模块,是被其它函数(包括MAIN函数)调用的。问题是,在其它文件里的函数怎样调用在led.C里的函数呢。这就得靠头文件了。头文件的写法步骤如下:H文件如下:led.h第一步,做是否已经调用过该头文件判断,避免重复定义:#ifndef _led_h_#define _led_h_/头文件具体内容#endif第二步,把C文件里的变量定义和函数声明复制进来:#ifndef _led_h_#define _led_h_/还可以define一些常量
4、,方便程序阅读#define GREEN 1#define RED 2#define BON 3#define BOFF 0/复制进来的变量和函数声明,要在前面加上extern,说明是在其他地方已经定义过的,避免重复定义/extern int flagGreen;/绿灯亮的标志extern int flagCount;/绿灯亮的次数extern void Led_Control(uchar ch);extern void delayNms(int ms);#endif至此,头文件已经完成。当然,不是所有的变量和函数都是外部需要调用的,在头文件里可以不写,例如extern int flagGre
5、en;/绿灯亮的标志,只是在该模块里要用到,在这里可以删除,在外部就调用不了这个变量。注意,有同学会发现,函数声明前面不加extern也可以通过编译,那是因为C标准里默认所有的函数声明前面都是带extern的,所以可以省去不写。现在我们来看一下,在主函数里应该如何调用led.C里的函数。其实,跟在同一个文件里的调用方法一样,只是先要把led.h先包括进去。主函数:/把要调用的模块的头文件都包括进去#include stm8_example.h /* Registers and memory mapping file. */#include gpio.h#include led.hvoid main(void)GPIO_Init();/GPIO初始化 while(1) Led_Control(GREEN);/点亮绿灯delayNms(1000); /延时1SLed_Control(RED); /点亮红灯delayNms(1000);Led_Control(BON); /两盏灯同时亮delayNms(1000);Led_Control(BOFF); /两盏灯同时灭delayNms(1000);