《特别讲解模块化编程.pdf》由会员分享,可在线阅读,更多相关《特别讲解模块化编程.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、51 单片机lzh 电子论坛模块化编程模块化编程这一讲是由 Admin 编写!有什么问题的可以在 lzhlzh 电子论坛电子论坛的51 版块发帖提问!在刚接触单片机,刚编写代码的时候都只是有一个.h 和一个.c文件。把所有的函数都写在.c 里面。这样遇到复杂的系统时,代码量就很大,一下子就是几百行。而且把所有函数写在一个.c 里不利于移植,对于以后的开发有了很大的限制。为了解决这个缺点就必须学会模块化编程。将程序分解成一个一个模块。这样就有了多个.c和多个.h。下面开始讲解什么是模块化编程,怎么去模块化。我们以菜鸟学习 51 单片机之永远的流水灯里的程序为例子讲解。在不模块化情况下:51 单片
2、机lzh 电子论坛上面这个程序是全部写在了 main.c 一个 C 文件里。完成了一个流水灯功能,程序非常简单,那么下面我们将程序模块化。模块化我们就建立一个 main.cled.cled.h这三个文件,那么这三个文件里分别写什么东西呢,下面一个一个的写。用来完成流水灯功能的模块程序已经写好了,现在就开始主函数的编写。主函数就只需要调用一个 Display_Led()函数就行了,看现在是怎么写的。#include#include intrins.h#define uchar unsigned char#define uint unsigned intvoid Delay_Ms(uint xms
3、)uint i,j;for(i=0;ixms;i+)for(j=0;j110;j+);void Display_Led()uchar aa,j;aa=0 x7f;for(j=0;j8;j+)P1=aa;aa=_cror_(aa,1);Delay_Ms(500);void main()while(1)Display_Led();51 单片机lzh 电子论坛led.h 里内容如下#ifndef _LED_H_/理解为 if not define led.h#define _LED_H_/如果没有定义 led.h,这里就定义一个 led.h#include reg52.h/由于 led,c 里面要用
4、到 51 单片机寄存器 P1,/所以这里包含 51 单片机的头文件#include intrins.h/循环移位用到#define uchar unsigned char#define uint unsigned int/这些宏定义都可以在头文件.h里定义void Delay_Ms(uint xms);void Display_Led();/将led.c里的函数在led.h里面申明#endif/定义结束led.c 里内容如下,将流水灯的主要程序放在这个.c 里面。作为单独的流水灯模块,在以后的程序中如果要用到这个流水灯程序就直接把 led.c 和 led.h 移植过去。#include“led
5、.h”/这里包含 led.h 这个头文件void Delay_Ms(uint xms)uint i,j;for(i=0;ixms;i+)for(j=0;j110;j+);void Display_Led()uchar aa,j;aa=0 x7f;for(j=0;j8;j+)P1=aa;aa=_cror_(aa,1);Delay_Ms(500);51 单片机lzh 电子论坛模块化编程的时候要想到你把一个.c 和.h 文件给另一个人,那个人能够很轻松的运用你给的这个模块来实现效果那就算成功了。而不需要去改动很多东西。上面的例子只不过是很简单的一个小例子。对于模块化编程更深的理解要自己去编写程序。现
6、在大家可以把以前的程序模块化试试,看有没有问题。下面给出几个模块化编程的注意点:先分模块一个个编程调试,确保无误后在一个个联合起来调试,千万不要写了一堆后再去调试,会很麻烦。一个点 c 文件对应的一个点 h 文件#ifndef _LED_H#define _LED_H/*内容*/endif全局变量前面加 extern如extern char Num;数组申明不能带数组的大小如:extern char Num;正确extern char Num8;错误二维数组extern char Num8;正确extern char Num68;错误extern char Num;错误#include“led.h”/在 main.c 里现在包含的也是 led.h 而不是 reg52.h 了void main()while(1)Display_Led();/这样直接调用就行。