找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 23562|回复: 8
收起左侧

在Keil中添加.h文件

[复制链接]
ID:99624 发表于 2015-12-27 04:34 | 显示全部楼层 |阅读模式
1.   
   在进行keil中编写单片机C语言程序时,有时为了方便处理函数中的一些模块函数、变量或者引脚的定义,常常要将某些变量的定义单独写出来,方便在以后的项目中调用,则要建立相应的.h文件:
    方法是:
       直接 文件-->打开-->找到你的文件目录,把文件打开就可以了。
       但是要注意:.h文件的命名:在.c文件中定义形式和.h文件的本身命名形式。
        eg: 在.c文件中:#include "light.H"
             在.h文件中,文件名为light.h。否则就会有错误出现。《完》

请问keil C里怎样将*.h文件添加到*.C文件下       事实上是#include在起作用了如#include <reg52.h>或#include "reg52.h",编译后就会在.C文件下了。你把你需要加载的 h 文件以 #include<xx.h> 的形式写在C文件前面可以直接跟在 #include<reg51.h>后面,  然后编译一下  你加载的h文件就会出现在c文件下了。千万别像添加C文件那样  Add  要不然就会跟你的DS18B20.h与ksyscan.h一样了,不在C文件下面。
   在工程中添加C文件,只要选到相应的目录,再选相应的文件就可以了。
添加H文件,要在C文件中添加,#include ".xxx1xxx2xxx3.h"或#include"..xxx1xxx2xxx3.h"
‘.’表示当前目录,‘..’表示上级目录,以main函数所在的C文件目录为准。

.h 文件的分析:

1)h文件作用

1方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;

2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如:stdio.h)。

2)h文件里应该有什么

   常量,结构,类型定义,函数,变量申明。

3)h文件不应该有什么

    变量定义,函数定义。

4)extern问题

   对于变量需要extern;

   对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。

5)include包含问题

   虽然申明和类型定义可以重复,不过推荐使用条件编译。

#ifndef _FILENAME_H,

#define _FILENAME_H

……

#endif

6)应该在那儿包含h文件

   在需要的地方.比如某个提供接口的h文件仅仅被1.c文件需要,那么就在1.c文件里包含。               

编写的程序一般会有.H文件和相对应的.C文件,.H文件是声明所用,.C文件是其函数实现部分。在调用时只要包含.H文件即可,我们没有听说过#include"delay.c"这类的程序,同时也不提倡使用这个形式。

         

在delay.h文件中:               //对调用的函数声明

#ifndef __DELAY_H__

#define __DELAY_H__

extern void Delayms(unsigned intn);

#endif

在delay.c文件中:                //函数实现部分

#include

//for crystal 11.0592M

void Delayms(unsigned int n)

{

      unsigned int i,j;

      for(j=n;j>0;j--)

      for(i=112;i>0;i--);

}

在主程序main.c中

#include               //在主程序包含.h文件,不能包含.c文件

……

上述方法仍然要求每建立一个工程就需要把对应的头文件复制到工程的文件夹里,这样看来仍然是比较麻烦的,这时还有另外一中方法就是将做好的头文件放在一个文件夹中,然后将这个文件夹整体拷贝到..KEILC51INC下面,以后若需要使用某个头文件,就如使用KEIL自带的头文件一样方便了,在主函数mani()之前有一句#include就可以在main()中使用其中的函数了。

   2.如图。我的键盘扫描.h文件不能加入到键盘扫描的程序,却可以加入主程序中,应该怎么做呢?
首先keyboard.c中要有  #include"keyboard.h"
然后keyboard.c要成功通过编译一次后才会将keyboard.h添加到左边的‘+’列表里
回复

使用道具 举报

ID:93386 发表于 2016-8-13 16:08 | 显示全部楼层
;;;;;;;;;
回复

使用道具 举报

ID:193662 发表于 2017-5-10 22:19 | 显示全部楼层
那么编译不成功一般是什么情况?
回复

使用道具 举报

ID:199463 发表于 2017-5-11 11:15 | 显示全部楼层
黑电子爱好者 发表于 2017-5-10 22:19
那么编译不成功一般是什么情况?

文件没有齐全或者设置没有设置好
回复

使用道具 举报

ID:214031 发表于 2017-6-23 14:56 | 显示全部楼层
很不错,谢谢分享!
回复

使用道具 举报

ID:234180 发表于 2017-10-10 18:48 | 显示全部楼层
谢分享
回复

使用道具 举报

ID:359950 发表于 2019-8-15 09:51 | 显示全部楼层
主要来学习,ifndef这个条件编译
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表