原创 C51头文件的包含

2008-12-15 23:21 4635 7 10 分类: MCU/ 嵌入式

在头文件的声明中,不可重复的包含一个文件如下,I2C.h文件与LCD.h文件就会产生冲突,因为都包含了头文件reg52.h


(1)I2C.h头文件的定义:


#ifndef _I2C_H_
#define _I2C_H_


#include <reg52.h>



//定义I2C总线时钟的延时值,要根据实际情况修改,取值1~255
//SCL信号周期约为(I2C_DELAY_VALUE*4+15)个机器周期
#define I2C_DELAY_VALUE  12


//定义I2C总线停止后在下一次开始之前的等待时间,取值1~65535
//等待时间约为(I2C_STOP_WAIT_VALUE*8)个机器周期
//对于多数器件取值为1即可;但对于某些器件来说,较长的延时是必须的
#define I2C_STOP_WAIT_VALUE 120


//I2C总线初始化,使总线处于空闲状态
void I2C_Init();
void I2C_Init1();
void I2C_Init2();
void I2C_Init3();
//I2C总线综合发送函数,向从机发送多个字节的数据
bit I2C_Puts
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Puts1
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Puts2
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Puts3
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
//I2C总线综合接收函数,从从机接收多个字节的数据
bit I2C_Gets
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Gets1
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Gets2
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);
bit I2C_Gets3
(
 unsigned char SlaveAddr,
 unsigned int SubAddr,
 unsigned char SubMod,
 char *dat,
 unsigned int Size
);


#endif //_I2C_H_


(2)LCD.h头文件的定义:


#ifndef _LCD_H_


#include<intrins.h>
#include <reg52.h>      
#include <absacc.h>
#include <ctype.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Busy 0x80       // 忙判别位


void Checkbusy1();                                              //读取忙标志函数
void Checkbusy2();
 void LcdWriteCommand1( Uchar CMD1,Uchar AttribC1);              //写控制字
void LcdWriteCommand2( Uchar CMD2,Uchar AttribC2);
void LcdWriteData1( char dataW1);                                //写数据
void LcdWriteData2( char dataW2);
void LocateXY1( char posx1,char posy1);                           //显示光标定位
void LocateXY2( char posx2,char posy2);
void DispOneChar1(Uchar x1,Uchar y1,Uchar Wdata1);               //在光标指定位置写一字符
void DispOneChar2(Uchar x2,Uchar y2,Uchar Wdata2);
void ePutstr1(Uchar x1,Uchar y1, Uchar code *ptr1);             //在光标指定位置开始写字符串
void ePutstr2(Uchar x2,Uchar y2, Uchar code *ptr2);
void setCGRAM2(void);                                           //设置CGRAM地址
void displaydata2(void);                                        //显示年月日
void LcdReset1( void );
void LcdReset2( void ); 
void Delay(unsigned int t);


#endif


当然在每个对应的.C文件都用到了C51中的reg52的特殊寄存器,如P1,P2。两个文件在主程序中都要用到,既在主程序中要包含两个头文件,I2C.h,LCD.h。此时会提示出错。


可将LCD.h中的第三行改为#include <I2C.h>,这样就解决了同时包含 reg52.h的问题。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户137104 2008-12-26 17:28

copy,thank you

dmu_xw 2008-12-20 09:56

意思是把第二个头文件中,#include ,改为,#include "reg52.h",就可以了?

用户1353726 2008-12-17 22:44

<>是编译器默认路径寻找 ""是当前工程文件夹寻找
相关推荐阅读
dmu_xw 2010-05-18 10:15
双重while中利用break跳出循环的问题
while(SlaveState ==0)         {<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:...
dmu_xw 2010-05-18 10:05
运算符和结合顺序问题
temp4 = (ReciveBuf[0]&0x80 == 0x80)&&(ReciveBuf[1]&0xe0 == 0xe0)&&(ReciveBuf...
dmu_xw 2010-05-12 10:18
while中利用break跳出循环
void Check_MACID() {           unsigned char data CheckCount = 0;       //MAC ID检查次数           unsig...
dmu_xw 2010-05-07 19:49
SJA1000中断的一点理解
SJA1000中断的一点理解SJA1000可提供中断方式和查询方式接收和发送数据。先说发送中断,若不做特殊要求不必利用发送中断,只要将数据写入发送缓冲区,启动发送命令就可以了,完全可以实现数据的发送,...
dmu_xw 2010-05-04 10:26
报警板调试记录
(1)发送数据函数,其中第15行为延时,不加时收到数据只为FE,加延时后才可收到7个数据.void sendKeynum(char mu,char n)               //向上位机发送连...
dmu_xw 2010-01-16 20:56
设备驱动加载到linux内核流程及两种加载方式
1.将设备驱动加载到linux内核中,第一步是配置Makefile文件,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:of...
EE直播间
更多
我要评论
3
7
关闭 站长推荐上一条 /3 下一条