打印

新手请教头文件的调用问题

[复制链接]
3108|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superbigbaby|  楼主 | 2010-2-4 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 superbigbaby 于 2010-2-4 10:51 编辑

我写好了51单片机模仿I2C总线时序的C程序,请问我如何修改才能将它保存成头文件以备我随时调用?

我的意思就是头文件怎么写?
比如我要写一个延时的头文件
void delay(uint z)
{uchar xxx
uint xxx
XXXX...}
这时我在文件开头必须要加上#define uchar unsigned char 等等
而此时  要不要#include<reg52.h>?

我iic总线定义了scl。sda。
都要用到reg52.h里的内容,如果不定义scl编译就通不过了。。。

而我在主函数调用delay或者是调用iic的时候
只需要include"iic"就行了?
就可以直接调用iic里面写的 诸如write之类的函数了吗?

还有我把写完的H文件如何放才能不用复制黏贴 想要了就调用?
意思是直接include<XXX.h>而不是include"XXX.h"?
我自己试了试放在和REG52.H同个文件下  直接include<XXX.h>找不到  只有放在我工程所在的文件下用include"XXX.h"才能找到

相关帖子

沙发
cauhorse| | 2010-2-4 11:11 | 只看该作者
楼主,头文件里不要出现函数定义。
这么写:
/***头文件I2C.h***/
#ifndef __I2C_H__
#define __I2C_H__

#include "reg52.h"
extern void delay(unsined int uiTimeDelay);
....
#end if
相应的I2C操作函数的定义,放到对应的"I2C.c"文件里,在文件中包含"I2C.h"即可。
至于出现诸如:
sbit SCL = PX^X;
之类的定义,属C51特别的用法,如果定义在*.c文件里,在主文件调用时就无法操作这些个I/O了,
所以,也可以定义在头文件中。

使用特权

评论回复
板凳
superbigbaby|  楼主 | 2010-2-4 11:15 | 只看该作者
看不明白。。#end if#ifndef 什么的接触的比较少。。。。
*.c文件也能调用? 我试了不行呀 只有*.h文件可以被发现。。。。
extern 之类的。。。

没有系统的学过C 只是看了郭天祥的视频入门的,

使用特权

评论回复
地板
cauhorse| | 2010-2-4 12:06 | 只看该作者
楼主应该找本材料先系统地学一下,否则谁都没法给你讲明白。
你提的问题通常的C51书本中都有说明。
#ifndef之类的预编译指令在这里是为了避免同一头文件的重复引用。
没说要用#include "*.c",这样做极不好,也不规范。
在"IIC.h"中声明I2C操作函数,在"IIC.c"中定义这些函数,在主文件中引用"IIC.h"即可。
至于头文件路径,可以在你用的IDE中设置好公用头文件所在的文件路径,之后,直接#include就可以了。

使用特权

评论回复
5
superbigbaby|  楼主 | 2010-2-4 12:23 | 只看该作者
了解了

使用特权

评论回复
6
原野之狼| | 2010-2-4 20:05 | 只看该作者
速成视频教程很难面面俱到的
建议看下软件方面的书
然后就是看下一些开源的项目里面的文件结构式怎么安排的

使用特权

评论回复
7
pkt800| | 2010-2-4 21:10 | 只看该作者
先来看看!

使用特权

评论回复
8
lading| | 2010-5-15 12:31 | 只看该作者
不错,的确该学习学习。

使用特权

评论回复
9
znmcu| | 2010-5-15 13:18 | 只看该作者
可以去下载《单片机基础外设9日通》 在第9日上中,对编译方法有详细讲述

http://v.znmcu.cn

https://bbs.21ic.com/frame.php?fr ... c.com/icnewest.html

使用特权

评论回复
10
一棵小草| | 2010-5-15 14:10 | 只看该作者
#9 楼的,不放过任何广告的机会啊------

LZ,说一下我的理解

(1) #include   "XXX.h"是先从本地目录开始寻找,然后去寻找系统路径,而Include   <XXX.h> 相反先从系统目录,后从本地目录。所以最好#include  <reg52.h>   ,而#include  "ICC.h",当然用哪个问题都不大。

(2)include 的意思是,在你include的地方,把.h的内容覆盖到include的位置。如果你在main中include <reg52.h> 和 在ICC.h中include <reg52.h>,那么会重复包含了!如果不想重复包含,定义头文件的时候加上:
/***头文件I2C.h***/
#ifndef __I2C_H__
#define __I2C_H__

//头文件内容

#end if

(3)-------下次再说

使用特权

评论回复
11
znmcu| | 2010-5-15 14:24 | 只看该作者
没想作广告,如果我连我自己都不把我的视频介绍给大家,又有谁会知道

使用特权

评论回复
12
一棵小草| | 2010-5-15 21:06 | 只看该作者
(3) 算了,直接举例
main.c中
#include <reg52.h>     -----寄存器头文件
#include "I2C.h"  -------这里面只是声明函数,如void  write_cmd();void write_data();

I2C.c中
#include <reg52.h>
------以及I2C的函数,如果I2C.c和main.c有共同的变量,那2边定义的变量要加extern uchar---(初始化只能在main.c)

其他的,试一试就了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

1

粉丝