除了正常的保存之外,在編譯無誤后,選擇另存為相同名稱的.h文件,將點h文件中的main函數名稱修改成其他名稱,如xmain,或main1等,則新項目就可以調用原項目中的函數!一、項目1先編寫LCD1602,編譯無錯誤后再將LCD1602.c另存為LCD1602.h,將LCD1602.h中的main()函數文件改為main0()#include<reg52.h>
#include<INTRINS.H>
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
void delay(unsigned char us)
{
while(us--);
}
void w1602(bit r,unsigned char dat)
{
rs=r;
rw=0;
e=0;
P1=dat;
delay(3);
e=1;
delay(7);
e=0;
}
void init1602()
{
w1602(0,0x38);
w1602(0,0x06);
w1602(0,0x0c);
w1602(0,0x01);
}
void main()
{
char i;
init1602();
w1602(0,0x80);
for(i=0;i<10;i++)
{
w1602(1,0x30+i);
}
} 二、建立DS1302萬年歷項目DS1302#include"reg52.h"
#include"intrins.h" //注意上面項目作為頭文件調入該項目
#include"LCD1602.h"
sbit rst=P2^3;
sbit sclk=P2^4;
sbit Dio=P2^5;
sbit A7=ACC^7;
sbit B0=B^0;
void w1302(unsigned char addr,dat)
{
char i;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++)
{
B=addr>>i;
sclk=0;
Dio=B0;
sclk=1;
}
for(i=0;i<8;i++)
{
B=dat>>i;
sclk=0;
Dio=B0;
sclk=1;
}
rst=0;
}
unsigned char r1302(unsigned char addr)
{
char i;
rst=0;
sclk=0;
_nop_();
rst=1;
for(i=0;i<8;i++)
{
B=addr>>i;
sclk=0;
Dio=B0;
sclk=1;
}
for(i=0;i<8;i++)
{
A7=Dio;
sclk=1;
ACC=ACC>>1;
sclk=0;
}
rst=0;
return(ACC);
}
void main()
{
init1602(); //上以項目中的函數可以無條件調用
w1302(0x80,0x33);
while(1)
{
w1602(0,0x80);
w1602(1,0x30+((r1302(0x81)>>4) & 0x0f));//調用
w1602(1,0x30+(r1302(0x81) & 0x0f));//調用
}
} 三、建立溫度DS18B20程序項目#include"reg52.h"
#include"intrins.h"
#include"LCD1602.h"
sbit ds18b20=P2^6;
unsigned char dd[]="date:";
unsigned char dd1[]="temp:";
unsigned char temp1,temp2,TT,ttT;
bit Reset(void)
{
bit k;
ds18b20=0;
delay(145);
ds18b20=1;
delay(10);
k=ds18b20;
delay(90);
return k;
}
//---------------------------
unsigned char ReadByte(void)
{
unsigned char j,buf=0;
for(j=0;j<8;j++)
{
buf=buf>>1;
ds18b20=0;
_nop_();
_nop_();
ds18b20=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(ds18b20==1)
buf|=0x80;
delay(8);
}
return buf;
}
//-------------------------------
void WriteByte(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
if(dat&0x01)
{
ds18b20=0;
_nop_();
_nop_();
ds18b20=1;
delay(10);
}
else
{
ds18b20=0;
delay(10);
ds18b20=1;
_nop_();
_nop_();
}
dat=dat>>1;
}
}
//------------------
bit Convert(void)
{
if(Reset()==0)
{
WriteByte(0xcc);
WriteByte(0x44);
return 1;
}
else
{
return 0;
}
}
//---------------------------------------
void ReadFlash(void)
{
unsigned char Lsb,Msb;
if(Reset()==0)
{
WriteByte(0xcc);
WriteByte(0xbe);
Lsb=ReadByte();
Msb=ReadByte();
temp1=Lsb;//L 8bit
temp2=Msb;//H 8bit
}
else
{
temp1=0;
temp2=0;
}
}
void disp_temp(unsigned char addr)
{
char i,m;
if(Convert()==1)
{
ReadFlash();
TT=(temp2<<4)|(temp1>>4)&0x7F;
if((TT & 0x80)==0x80)
ttT=(~TT & 0x3F)+1;
else
ttT=TT;
}
m=20;
while(m--)
{
w1602(0,addr);
for(i=0;i<5;i++)
w1602(1,dd1[i]);
if((TT & 0x80)==0x80) //-
{
if(TT==0x80)
{
ttT=128;
w1602(1,0x20);
w1602(1,0X30+(ttT/100));
w1602(1,0x30+(ttT%100)/10);
w1602(1,0x30+ttT%10);
}
else
{
w1602(1,0x20);
w1602(1,0x2d);
if(ttT/10>0)
w1602(1,0x30+ttT/10);
else
w1602(1,0x20);
w1602(1,0x30+ttT%10);
}
}
else //+
{
w1602(1,0x20);
if(ttT/100>0)
{
w1602(1,0X30+(ttT/100));
w1602(1,0x30+(ttT%100)/10);
w1602(1,0x30+(ttT%10));
}
else
{
if((ttT%100)/10>0)
{
w1602(1,0x30+(ttT%100)/10);
w1602(1,0x30+ttT%10);
}
else
w1602(1,0x30+ttT%10); }
}
w1602(1,0x22);
w1602(1,0x43);
w1602(1,0x20);
w1602(1,0x20);
}
}
void main()
{
init1602();
while(1)
{
disp_temp(0xc3);
}
}
四、建立綜合項目DS1302_18B20
#include"reg52.h"
#include"intrins.h"
#include"DS1302.h"
sbit ds18b20=P2^6;
unsigned char dd[]="date:";
unsigned char dd1[]="temp:";
unsigned char temp1,temp2,TT,ttT;
bit Reset(void)
{
bit k;
ds18b20=0;
delay(145);
ds18b20=1;
delay(10);
k=ds18b20;
delay(90);
return k;
}
//---------------------------
unsigned char ReadByte(void)
{
unsigned char j,buf=0;
for(j=0;j<8;j++)
{
buf=buf>>1;
ds18b20=0;
_nop_();
_nop_();
ds18b20=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(ds18b20==1)
buf|=0x80;
delay(8);
}
return buf;
}
//-------------------------------
void WriteByte(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
if(dat&0x01)
{
ds18b20=0;
_nop_();
_nop_();
ds18b20=1;
delay(10);
}
else
{
ds18b20=0;
delay(10);
ds18b20=1;
_nop_();
_nop_();
}
dat=dat>>1;
}
}
//------------------
bit Convert(void)
{
if(Reset()==0)
{
WriteByte(0xcc);
WriteByte(0x44);
return 1;
}
else
{
return 0;
}
}
//---------------------------------------
void ReadFlash(void)
{
unsigned char Lsb,Msb;
if(Reset()==0)
{
WriteByte(0xcc);
WriteByte(0xbe);
Lsb=ReadByte();
Msb=ReadByte();
temp1=Lsb;//L 8bit
temp2=Msb;//H 8bit
}
else
{
temp1=0;
temp2=0;
}
}
void main()
{
unsigned char i;
init1602();
while(1)
{
if(Convert()==1)
{
ReadFlash();
TT=(temp2<<4)|(temp1>>4);
ttT=(~TT & 0x3F)+1;
}
//week
w1602(0,0x81);
for(i=0;i<5;i++)
w1602(1,dd[i]);
w1602(1,0x30+((r1302(0x85)>>4) & 0x0f));
w1602(1,0x30+(r1302(0x85) & 0x0f));
w1602(1,0x2d);
w1602(1,0x30+((r1302(0x83)>>4) & 0x0f));
w1602(1,0x30+(r1302(0x83) & 0x0f));
w1602(1,0x2d);
w1602(1,0x30+((r1302(0x81)>>4) & 0x0f));
w1602(1,0x30+(r1302(0x81) & 0x0f));
w1602(0,0xc3); //temp
for(i=0;i<5;i++)
w1602(1,dd1[i]);
if(temp2 & 0x80==0x80) //-
{
w1602(1,0x2d);
w1602(1,0x30+ttT/10);
w1602(1,0x30+ttT%10);
}
else //+
{
w1602(1,0x20);
w1602(1,0x30+TT/10);
w1602(1,0x30+TT%10);
}
w1602(0x22,1);
w1602(0x43,1);
}
}