⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20+ds1320+lcd12864.c

📁 多功能太阳能热水器设计 硬件:AT89S52单片机
💻 C
📖 第 1 页 / 共 5 页
字号:
   write_datal(0x00);
   write_datar(0x00);
  }
 }
}

/****************************************************************************
写入ASCII字符
****************************************************************************/
void write_ascii(unsigned char x,unsigned char y,unsigned char time,bit fanhei)
{
 unsigned char i,j;
 unsigned char k=0;
 unsigned char fanheizi=0;
 unsigned char Page,Row;

 Page=x|0xb8;
 if((y>=0)&&(y<8))
 {
  Row=(y*8)|0x40;

  write_cmdl(Page);
  write_cmdl(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<8;i++)
   {
    if(fanhei==1)
	{
     fanheizi=255-nAsciiDot[time*16+k];
	}
    else
    {
	 fanheizi=nAsciiDot[time*16+k];
    }
    write_datal(fanheizi);
    k++;
   }
   write_cmdl(Row);
   write_cmdl(Page+1);
  }
 }

 if((y>=8)&&(y<16))
 {
  y=y-8;
  Row=(y*8)|0x40;

  write_cmdr(Page);
  write_cmdr(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<8;i++)
   {
    if(fanhei==1)
	{
     fanheizi=255-nAsciiDot[time*16+k];
	}
    else
    {
	 fanheizi=nAsciiDot[time*16+k];
    }
    write_datar(fanheizi);
    k++;
   }
   write_cmdr(Row);
   write_cmdr(Page+1);
  }
 }
}

/****************************************************************************
写入星期
****************************************************************************/
void write_week(unsigned char x,unsigned char y,unsigned char weektime,bit fanhei)
{
 unsigned char i,j;
 unsigned char k=0;
 unsigned char fanheizi=0;
 unsigned char Page,Row;

 Page=x|0xb8;
 if((y>=0)&&(y<8))
 {
  Row=(y*8)|0x40;

  write_cmdl(Page);
  write_cmdl(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<16;i++)
   {
   	if(fanhei==1)
	{
     fanheizi=255-characterweek[(weektime-1)*32+k];
	}
    else
    {
	 fanheizi=characterweek[(weektime-1)*32+k];
    }
    write_datal(fanheizi);
    k++;
   }
   write_cmdl(Row);
   write_cmdl(Page+1);
  }
 }

 if((y>=8)&&(y<16))
 {
  y=y-8;
  Row=(y*8)|0x40;

  write_cmdr(Page);
  write_cmdr(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<16;i++)
   {
	if(fanhei==1)
	{
     fanheizi=255-characterweek[(weektime-1)*32+k];
	}
    else
    {
	 fanheizi=characterweek[(weektime-1)*32+k];
    }
    write_datar(fanheizi);
    k++;
   }
   write_cmdr(Row);
   write_cmdr(Page+1);
  }
 }
}

/****************************************************************************
写入汉字
****************************************************************************/
void write_character(unsigned char x,unsigned char y,unsigned char *ptr,bit fanhei)
{
 unsigned char i,j;
 unsigned char number,k=0;
 unsigned char cl,ch;
 unsigned char fanheizi=0;
 unsigned char Page,Row;

 cl=ptr[0];
 ch=ptr[1];
 for(number=0;;number++)
 {
  if((cl==GB_16[number].Index[0])&&(ch==GB_16[number].Index[1]))
  {
   Page=x|0xb8;
   if((y>=0)&&(y<8))
   {
    Row=(y*8)|0x40;

    write_cmdl(Page);
    write_cmdl(Row);

    for(j=0;j<2;j++)
    {
     for(i=0;i<16;i++)
     {
	  if(fanhei==1)
	  {
       fanheizi=255-GB_16[number].Msk[k];
	  }
	  else
	  {
	   fanheizi=GB_16[number].Msk[k];
	  }
      write_datal(fanheizi);
	  k++;
     }
     write_cmdl(Row);
     write_cmdl(Page+1);
    }
   }

   if((y>=8)&&(y<16))
   {
    y=y-8;
    Row=(y*8)|0x40;

    write_cmdr(Page);
    write_cmdr(Row);

    for(j=0;j<2;j++)
    {
     for(i=0;i<16;i++)
     {
	  if(fanhei==1)
	  {
       fanheizi=255-GB_16[number].Msk[k];
	  }
	  else
	  {
	   fanheizi=GB_16[number].Msk[k];
	  }
      write_datar(fanheizi);
	  k++;
     }
     write_cmdr(Row);
     write_cmdr(Page+1);
    }
   }
   break;
  }
 }
}

/****************************************************************************
写入天干地支
****************************************************************************/
void write_yearlunar(unsigned char x,unsigned char y,unsigned char lunar,bit tiandi)
{
 unsigned char i,j;
 unsigned char k=0;
 unsigned char yearlunar;
 unsigned char Page,Row;

 Page=x|0xb8;
 if((y>=0)&&(y<8))
 {
  Row=(y*8)|0x40;

  write_cmdl(Page);
  write_cmdl(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<16;i++)
   {
   	if(tiandi==1)
	{
     yearlunar=tiangan[lunar*32+k];
	}
    else
    {
	 yearlunar=dizhi[lunar*32+k];
    }
    write_datal(yearlunar);
    k++;
   }
   write_cmdl(Row);
   write_cmdl(Page+1);
  }
 }

 if((y>=8)&&(y<16))
 {
  y=y-8;
  Row=(y*8)|0x40;

  write_cmdr(Page);
  write_cmdr(Row);

  for(j=0;j<2;j++)
  {
   for(i=0;i<16;i++)
   {
	if(tiandi==1)
	{
     yearlunar=255-tiangan[lunar*32+k];
	}
    else
    {
	 yearlunar=dizhi[lunar*32+k];
    }
    write_datar(yearlunar);
    k++;
   }
   write_cmdr(Row);
   write_cmdr(Page+1);
  }
 }
}
/****************************************************************************
DS18B20初始化
****************************************************************************/
bit reset_ds18b20(void)
{
 bit presence;

 DQ=0;       
 delayus(70);    
 DQ=1;    
 delayus(3); 
 presence=DQ;
 delayus(25);    
 return presence; 
}   

/****************************************************************************
读一字节温度值
****************************************************************************/
unsigned char read_ds18b20(void)
{
 unsigned char i;
 unsigned char value = 0;

 for(i=8;i>0;i--)
 {
  value=value>>1;
  DQ=0; 
  DQ=1;
  delayus(1);  
  if(DQ)
  {
   value=value|0x80;
  }
  delayus(6); 
 }
  return(value);
}

/****************************************************************************
写一字节命令
****************************************************************************/
void write_ds18b20(unsigned char value)
{
 unsigned char i;
 for(i=8;i>0;i--)
 {
  DQ=0; 
  DQ=value&0x01;
  delayus(5); 
  DQ=1;
  value=value>>1;
 }
 delayus(5);
}

/****************************************************************************
读出温度值
****************************************************************************/
unsigned char read_temp(void)
{
 unsigned char i,count;
 unsigned int temp_v;
 unsigned int x;
 unsigned char temp[2];

 reset_ds18b20();
 write_ds18b20(0xcc);
 write_ds18b20(0x44); 
 reset_ds18b20();
 write_ds18b20(0xcc);
 write_ds18b20(0xbe); 
 temp[1]=read_ds18b20();
 temp[0]=read_ds18b20();
 tempflag=0; 
 if((temp[0]&0xf8)!=0x00)
 {
  tempflag=1; 
  temp[1]=~temp[1];
  temp[0]=~temp[0]; 
  temp_v=temp[1]+1;  
  temp[1]=temp_v;   
  if(temp_v>255)
  {
   temp[0]++; 
  } 
 }

 x=((temp[0]&0x07)*256+temp[1])>>4;
 temp[1]=temp[1]&0x0f;
 temp[1]=divdisplay[temp[1]];

 for(i=0;i<8;i++)
 {
  bcddis[i]=0;
 }

 i=0;
 bcddis[0]=temp[1];
 i++;

 bcddis[1]=10;
 i++;

 while(x/10)
 {
  bcddis[i]=x%10;
  x=x/10;
  i++;
 }
 bcddis[i]=x;
 i++;
 count=i;
 if(tempflag==1)
 {
  bcddis[i]=13;//-
 }
 else
 {
  bcddis[i]=12;//+
 }
 
 return count;
}

/****************************************************************************
显示三路温度值
****************************************************************************/
void tempdisplay(void)
{
 unsigned char i;
 unsigned char count;
 clear();
 write_character(0,2,"温",0);
 write_character(0,4,"度",0);
 write_character(2,2,"热",0);
 write_character(2,4,"水",0);
 write_character(2,6,"箱",0);
 write_character(4,2,"水",0);
 write_character(4,4,"管",0);
 write_character(6,2,"集",0);
 write_character(6,4,"热",0);
 write_character(6,6,"器",0);
 write_character(0,10,"℃",0);  
 write_character(2,11,"℃",0);
 write_character(4,11,"℃",0);
 write_character(6,11,"℃",0);
 
 write_ascii(0,8,TN>>4,0);
 write_ascii(0,9,TN&0x0f,0);

 count=read_temp();//写入温度
 for(i=0;i<count+1;i++)
 {
  write_ascii(2,10-i,bcddis[i],0);
 }  

 count=read_temp();//写入温度
 for(i=0;i<count+1;i++)
 {
  write_ascii(4,10-i,bcddis[i],0);
 }  

 count=read_temp();//写入温度
 for(i=0;i<count+1;i++)
 {
  write_ascii(6,10-i,bcddis[i],0);
 }  
}

/****************************************************************************
显示闹钟状态
****************************************************************************/
void ringdisplay(void)
{
 unsigned char onoff1=read_ds1302(0x0c1);
 unsigned char ring1h=read_ds1302(0x0c3);
 unsigned char ring1l=read_ds1302(0x0c5);
  
 unsigned char onoff2=read_ds1302(0x0c7);
 unsigned char ring2h=read_ds1302(0x0c9);
 unsigned char ring2l=read_ds1302(0x0cb);

 clear();
 solartolunar();
 displaylunar();
 write_character(2,5,"闹",0);
 write_character(2,9,"钟",0);
 write_week(4,2,1,0);
 write_character(4,4,"路",0);
 write_week(6,2,2,0);
 write_character(6,4,"路",0);
 write_ascii(4,9,ring1h>>4,0);
 write_ascii(4,10,ring1h&0x0f,0);
 write_ascii(4,11,11,0);
 write_ascii(4,12,ring1l>>4,0);
 write_ascii(4,13,ring1l&0x0f,0);
 write_ascii(6,9,ring2h>>4,0);
 write_ascii(6,10,ring2h&0x0f,0);
 write_ascii(6,11,11,0);
 write_ascii(6,12,ring2l>>4,0);
 write_ascii(6,13,ring2l&0x0f,0);
 if(onoff1==0)
 {
  write_character(4,6,"关",0);
 }
 else
 {
  write_character(4,6,"开",0);		   
 }
 if(onoff2==0)
 {
  write_character(6,6,"关",0);
 }
 else
 {
  write_character(6,6,"开",0);		   
 }
}


/****************************************************************************
温度设置
****************************************************************************/
void tempreset(void)
{
 bit BACK2=1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -