métodos de organización con múltiples archivos keil

métodos de organización con múltiples archivos keil


Método uno:
En primer lugar crear un nuevo archivo main.c, a unirse al proyecto, el documento está escrito principalmente principal función, a continuación, el nuevo archivo, como delay.c,
después de escribir el contenido, no añadido al proyecto, pero en main.c a partir de la escritura de archivo # include " delay.c ", compilación, se encuentra delay.c

Lo mismo puede decirse de otras funciones han aparecido en su main.c a continuación. Aquí está el archivo main.c


# include <reg52.h> sistema de construcción para compilar el archivo
# include "delay.c" y luego compilar este archivo
# include "display.c" y luego compilar el archivo

# include "timet0.c" y luego compilar el archivo


main ()
{el TMOD = 0x01;
EA = 1;.
el cultivo de referencia evapotranspiración = 1;.
TR0 = 1;.
TH0 es = (65.536 a 5.000) / 256;
TL0 = (65.536 a 5.000) 256%;
el tiempo (1).
{Display1 ();
Delay (200 es);
Display2 ();
Delay (200 es);
}
Ledl = 0;
}
después de la compilación, a encontrar de todo. c archivo main.c en todos los subdirectorios, tiempo de compilación sistema de compilación de acuerdo con el orden dado compilado
traducción, documento que contiene la variable global para poner la parte delantera, o un error de tiempo de compilación no se producirá ninguna definición de variables, como en la pantalla archivo .c
bandera unsigned char; // variables globales, funciones con otra
LED1 sbit = P1 ^ 0; // variables globales, funciones con otra
LED2 sbit = P2 ^ 0; // variables globales, funciones con otra
Display1 ( )
{IF (En Flag)
Ledl Ledl = ~;
}
Display2 ()
{delay1m ();
LED2 = 1;.
Delay (250);
LED2 = 0;
Delay (200 es);

}

variables globales definidas se utilizan en cada archivo.
De hecho, esto realmente es un formato de varios archivos, pero diferente forma de organización de un documento único, pero clara, fácil de leer.
Esta organización también es necesario escribir archivos de cabecera.


Método dos:
En primer lugar crear un archivo main.c, añadiendo al proyecto, el documento está escrito principalmente principal función, a continuación, el nuevo archivo, como delay.c,
después de contenido escrito, agrega al proyecto, pero en el archivo main.c no comience a escribir # include " delay.c " , otras funciones al mismo
fundamento.
Para llamar a un método de variables globales:
una nueva cabecera, tales como: file.h, al escribir en el archivo de cabecera file.h:
#ifndef __file_H__ / * prevenir repetida referencia graphics.h * /
#define __file_H__
extern función void () ; // Declarar una función global
#endif
luego se quiera o no, el cuerpo de una función en la que usted tiene que escribir # include " file.h " del archivo XX.C en él


tres:
por lo general funciona un programa de C51 de acuerdo con las funciones se puede dividir en una pluralidad de módulos (archivos), un módulo se compone típicamente de dos documentos, un archivo de cabecera * .h,
las estructuras de datos y prototipos de función módulo descrito y el otro es de archivos C * .C, datos ejemplos de objetos o definido, y la función
algoritmo específico, tales como I2C.C, ADC.C, DAC.C, LED.C similares, con el fin de llamar al archivo, definimos un encabezado para cada módulo de
archivo a I2C. C, la definición de I2C.H.
#ifndef GRAPHICS_H / * prevenir graphics.h repetidas referencias * /
#define GRAPHICS_H
#include <math.h> / * archivos de cabecera de referencia de la biblioteca estándar * /
...
#include " myheader.h " / cabeza biblioteca * referencia no estándar archivo * /
... V
OID la Función1 ( ... ); / * declaración de la función global * /
...
Declaración cuadro de la clase / * estructura de clases * /
{
...
};
#endif
programa modular es un cuadro negro, solamente una interfaz (variables globales hacia el exterior , la función externa) sin pedir la persona que llama para saber qué proceso. Como
poco como interfaz definida para ayudar a mantener la independencia del módulo (no es necesario que el usuario sepa la función de las variables globales estáticas interna no es necesario que el archivo H
se da con el fin de confundir al usuario a evitar) escrito en la necesidad de archivo para llamar a este módulo la instrucción de inclusión. Una buena ingeniería, archivo de tejidos H está
muy claro, basta con ver el archivo H puede escribir el programa principal llama al módulo C correspondiente.
formato de cabecera es el siguiente (I2C.H por ejemplo):
************************************* *******************************
#ifndef I2C_H / * si no se define "I2C_H "Prevent redefinió * /
#define I2C_H / * define "I2C_H" * /
..........
'mordió setsda (' mordió Up_Down);
'mordió SetSCL (' mordió Up_Down);
#endif
******* ************************************************** *************
formato I2C.C siguiente:
******************************* ***************************************
#include <stdio.h>
#include "I2C .h "
void SendByte (UCHAR C); / * funciones internas no se describen en el archivo de cabecera .H * /
'bit setsda (' mordió Up_Down) .......... {};
'bit SetSCL (Up_Down' bit) { ..........};
************************************** ********************************
otra
escritura: ============= ================
#ifndef I2C_H
#define I2C_H
..........
'Bit setsda eXten (' mordió Up_Down);
exten 'mordió SetSCL (' mordió Up_Down);
#endif
================================ =================
I2C.C siguiente formato:
=========================== ======================
#include <stdio.h>
vacío SendByte (UCHAR C); / * .H dentro de funciones declaradas en el archivo de cabecera * /
'bit setsda (' mordió Up_Down) .......... {};
'mordió SetSCL (' mordió Up_Down)} {..........;
============ =====================================


cuatro:
primero, necesitamos un nuevo documento que hay dos métodos para establecer (a la función delay1s como un ejemplo). La primera, en el directorio del proyectopara construir un delay1s.txt delay1s.h continuación, cambiar el nombre. Puesto que no están codificados con ilegible es así, entonces en la ingenieríaabrirlo. El segundo método es crear un nuevo documento directamente en el proyecto, y luego guardar el tiempo ahorrado puede ser identificado delay1s.h. Sies así, entonces es necesario agregar muchos archivos se recomienda utilizar el primer método, esto es una recomendación personal. En segundo lugar, tenemos que escribir delay1s.h los archivoscontenidos, que dice lo siguiente:


#ifndef _DELAY1S_H_
#define _DELAY1S_H_
void delay1s();//延时函数
#endif
这个是头文件的定义,作用是声明了 delay1s()函数,因为如果在别的函数中如果我们需要用到 delay1s()
函数的话,若不事先声明则在编译的时候会出错。对于#ifndef……#define……#endif;这个结构大概的意
思就是说如果没有定义(宏定义)一个字符串,那么我们就定义它,然后执行后面的语句,如果定义过了
那么就跳过不执行任何语句。
关于为什么要使用这么一个定义方法,比如在 led_on()函数中我们调用了 delay1s()函数,然后在 main()
函数中我们也调用了 delay()函数,那么,在 led_on()函数中我就就要包含头文件 delay1s.h,然后在 main()
函数中也要包含 delay1s.h,若主函数中我们调用过 led_on(),那么在编译的时候,遇到 delay1s()和 led_on()
的时候就会对 delay1s.h 进行两次解释,那么就会出现错误。若有以上预处理命令的话,那么在第二次的
时候这个_DELAY1S_H_已经被定义过了,那么就不会出现重复定义的问题。这就是它的作用。但是注意,
在编译器进行编译的时候头文件不参与编译。
再次,我们建立一个 led_on.h,起代码内容如下:
#ifndef _LED_ON_H_
#define _LED_ON_H_
void led_on();//灯闪烁
#endif
作用同 delay1s.h,不理解的话可以再看一下上面的解释。
最后,将我们上次说的三个函数补充完整。
在 led_on()函数中,我们用到了 51 单片机的一些寄存器的定义,所以我们要包含 reg52.h,而且我们用到了
delay1s()函数,所以我们要包含 delay1s.h,故 led_on()函数的代码如下:
#include <reg52.h>
#include delay1s.h //注意这里没有分号
void led_on()
{
P0=0x00;
delay1s();
P0=0xff;
delay1s();
}
Main 函数的代码如下:
#include <reg52.h>
#include delay1s.h
void main()
{
led_on();
delay1s();//在这里其实只有第一句就可以了,这句是不必要的
led_on();//这也是不必要的
}
在这个函数中,为了再次说明一下#ifndef……#define……#endif 这个结构的定义,大家可以把所有的.h 文
件中的这个结构去掉,然后编译一下看一下效果。
到这里相信大家对于这种模块化的写法就有大概的了解了,如果我们想添加新功能的时候,比如我们要添
加一个流水灯的功能,那么,我们只需要增加一个 led_circle.c 和 led_circle.h,然后按照上述步骤添加进
工程即可,程序的其他部分不需要任何改动。显然这是很方便的。其实函数的声明可以使用 extern 关键字,
C 语言中默认都是这个类型的,所以可以不用写。



发布了6 篇原创文章 · 获赞 92 · 访问量 20万+

Supongo que te gusta

Origin blog.csdn.net/zhy295006359/article/details/77417763
Recomendado
Clasificación