加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【网络收集】keil中C51头文件问题

(2011-10-21 20:00:26)
标签:

头文件

c语言

数码管

函数

编译器

it

分类: electronic

一直希望自己编写一个C语言头文件,把自己常用的一些函数放进去。上网看了很多文章,我所看到文章做法和一般C语言头文件写法基本一样,自己学着试了一下,老是不成功。后来去图书馆查书,才知道原来keil的C语言比较特别,引用同一工程其他文件中的函数需要在声明函数前加extern。

以下是一个例子:

 

//步骤一:建立fc.h

 

#ifndef FC_H

#define FC_H

#include <reg51.h>

extern void f(void)

#endif

 

//步骤二:建立fc.c

 

#include "fc.h"

#include <reg51.h>

//还需要什么头文件自己添加

void f(void)

{

 //要什么程序自己添加

}

 

步骤三:将fc.h和fc.c放在工程的文件夹里,并在keil中将f.c添加到工程中(右键左边的Source Group n,选择Add file to group 'Source group n'),要用到f()函数的话就include“fC.h”就行了,例如:

 

#include <reg51.h>

#include "fc.h"

void main()

{

f();

while(1);

}

 

 

 

 

结果大功告成,成功编译,但是并没有想象中那么实用,例如fc.c中如果定义了函数但没有被引用的话,keil会发出警告,虽然可以编译,但是一大堆警告很烦人,也和容易让人忽视其他很重要警告。我想自己编写头文件主要是适用于大型工程吧。很多人编写各自不同的函数,然后通过头文件的引用把函数给主程序或者其他子程序引用。

 

C语言(C51)头文件的编写笔记

2010-06-11 20:44

 

先看如下例子

The language of C

1. 

2.  #include "REG52.h"

3.  void delayNs(unsigned char w,unsigned char z,unsigned char n) 

4. 

5. 

6.  // 延时时间       a的值       b的值       c的值           延时误差(us)

7.  // 10us                                          -0.5    

8.  // 20us                                           0

9.  // 30us                               15            +0.5

10.// 40us                                           0

11.// 50us                               28             0

12.// 60us                               35            +0.5

13.// 70us                               42            +1

14.// 80us                               48             0

15.// 90us                               55            +0.5

16.// 100us                              61            -0.5

17.// 200us                              128            0

18.// 300us                              63            +1.5

19.// 400us                              129            0

20.// 500us                              63            +0.5

21.// 600us                              63             0

22.// 700us                              63            -0.5

23.// 800us                              175           +0.5

24.// 900us                              63            -1.5

25.// 1ms                                219           -1.5

26.// 2ms                                220           +3

27.// 3ms                                220           +3

28.// Xms              X (2~255)            220           +3

29. 

30.     unsigned char a,b,c;

31.     for(a=0;a<w;a++)

32.         for(b=0;b<z;b++) 

33.            for(c=0;c<n;c++);        

34.}

 

The language of C

  1. #ifndef delayNs_h
  2. #define delayNs_h
  3. extern void delayNs(unsigned char w,unsigned char z,unsigned char n);
  4. #endif

 

The language of C

  1. #include<reg52.h>
  2. #include "delayNs.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.  
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8.  
  9. uchar code table[]={    //0~F,-,共阳
  10.                         0XC0,0XF9,0XA4,0XB0,
  11.                         0X99,0X92,0X82,0XF8,
  12.                         0X80,0X90,0X88,0X83,
  13.                         0XC6,0XA1,0X8E,0X86,
  14.                         0xbf
  15.                     };
  16.  
  17. void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6);
  18.  
  19. void main()
  20. {
  21.     while(1)
  22.     {disp(1,2,3,4,5,6);}//调用显示
  23. }
  24. void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //显示函数
  25. {
  26.     P2=0x01;
  27.     P0=table[a1]; //段码送P0口
  28.     delayNs(1,1,61);//调用延时
  29.     P0=0xff;
  30.  
  31.     P2=0x02;
  32.     P0=table[a2]; //第2个数码管显示,带小数点
  33.     delayNs(1,1,61);
  34.     P0=0xff;
  35.  
  36.     P2=0x04;
  37.     P0=table[16]; //第3个数码管显示
  38.     delayNs(1,1,61);
  39.     P0=0xff;
  40.     
  41.     P2=0x08;
  42.     P0=table[a3]; //第4个数码管显示,带小数点
  43.     delayNs(1,1,61);
  44.     P0=0xff;
  45.  
  46.     P2=0x10;
  47.     P0=table[a4];
  48.     delayNs(1,1,61);
  49.     P0=0xff;
  50.  
  51.     P2=0x20;
  52.     P0=table[16]; //第6个数码管显示
  53.     delayNs(1,1,61);
  54.     P0=0xff;
  55.  
  56.     P2=0x40;
  57.     P0=table[a5]; //第6个数码管显示
  58.     delayNs(1,1,61);
  59.     P0=0xff;
  60.  
  61.     P2=0x80;
  62.     P0=table[a6]; //第6个数码管显示
  63.     delayNs(1,1,61);
  64.     P0=0xff;
  65. }


【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。

【规则1-2-2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则1-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。

【建议1-2-1】头文件中只存放“声明”而不存放“定义”

在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却

造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

【建议1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明

   

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有