c语言新51h,头文件/C语言把一个项目添加到新项目

本文介绍如何在DS1302万年历项目中整合DS18B20温度传感器,通过LCD1602显示日期和实时温度。重点在于修改main函数并调用LCD1602和DS1302的API,实现跨项目的函数交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了正常的保存之外,在编译无误后,选择另存为相同名称的.h文件,将点h文件中的main函数名称修改成其他名称,如xmain,或main1等,则新项目就可以调用原项目中的函数!

一、项目1先编写LCD1602,编译无错误后再将LCD1602.c另存为LCD1602.h,将LCD1602.h中的main()函数文件改为main0()

#include

#include

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);

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);

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);

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值