找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4997|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:113276 发表于 2016-4-10 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
除了正常的保存之外,在编译无误后,选择另存为相同名称的.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);
                         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);
  }
}







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表