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

📄 12864 具有菜单显示的电子钟 温度计.txt

📁 12864
💻 TXT
📖 第 1 页 / 共 5 页
字号:

 return value;
}

/****************************************************************************
DS1302初始化
****************************************************************************/
void init_ds1302(void)
{
 if(read_ds1302(0x0cd)!=0x01)
 {
  TIMECLK=0;
  TIMERST=0;

  write_ds1302(0x8e,0x00);

  write_ds1302(0x82,INIT_MINUTE);
  write_ds1302(0x84,INIT_HOUR);
  write_ds1302(0x86,INIT_DAY);
  write_ds1302(0x88,INIT_MONTH);
  write_ds1302(0x8a,INIT_WEEK);
  write_ds1302(0x8c,INIT_YEAR);

  write_ds1302(0x90,0xa6);
  write_ds1302(0x0cc,0x01);
  write_ds1302(0x80,INIT_SECOND);  
 }
}

/****************************************************************************
从DS1302中读出温度值并将其显示在LCD上
****************************************************************************/
void readtime(void)
{
 SECOND=read_ds1302(0x81);
 MINUTE=read_ds1302(0x83);
 HOUR=read_ds1302(0x85);
 DAY=read_ds1302(0x87);
 MONTH=read_ds1302(0x89);
 WEEK=read_ds1302(0x8b);
 YEAR=read_ds1302(0x8d);  
}

/****************************************************************************
左屏判忙
****************************************************************************/
void busyl(void)
{
 CS1=1;
 CS2=0;
 DI=0;
 RW=1;
 P0=1;
 ENABLE=1;
 delayus(2);
 
 while(BF);

 ENABLE=0;
 RW=0;
 DI=0;
}

/****************************************************************************
左屏写指令
****************************************************************************/
void write_cmdl(unsigned char Commandaddr)
{
 busyl();

 DI=0;
 RW=0;

 ENABLE=1;
 P0=Commandaddr;
 ENABLE=0;

 RW=0;
 DI=0;
}

/****************************************************************************
左屏写数据
****************************************************************************/
void write_datal(unsigned char Dataaddr)
{
 busyl();

 DI=1;
 RW=0;

 ENABLE=1;
 P0=Dataaddr;
 ENABLE=0;

 RW=0;
 DI=0;
}

/****************************************************************************
右屏判忙
****************************************************************************/
void busyr(void)
{
 CS1=0;
 CS2=1;
 DI=0;
 RW=1;
 P0=1;
 ENABLE=1;
 delayus(2);
 
 while(BF);

 ENABLE=0;
 RW=0;
 DI=0;
}

/****************************************************************************
右屏写指令
****************************************************************************/
void write_cmdr(unsigned char Commandaddr)
{
 busyr();

 DI=0;
 RW=0;

 ENABLE=1;
 P0=Commandaddr;
 ENABLE=0;

 RW=0;
 DI=0;
}

/****************************************************************************
右屏写数据
****************************************************************************/
void write_datar(unsigned char Dataaddr)
{
 busyr();

 DI=1;
 RW=0;

 ENABLE=1;
 P0=Dataaddr;
 ENABLE=0;

 RW=0;
 DI=0;
}

/****************************************************************************
LCD初始化
****************************************************************************/
void init_12864(void)
{
 write_cmdl(0xc0);
 write_cmdl(0x3f);

 write_cmdr(0xc0);
 write_cmdr(0x3f);
}

/****************************************************************************
LCD清屏
****************************************************************************/
void clear(void)
{
 unsigned char i,j;
 unsigned char Page,Row;

 for(i=0;i<8;i++)
 {
  Page=i|0xb8;
  write_cmdl(Page);
  write_cmdr(Page);

  Row=0x40;
  write_cmdl(Row);
  write_cmdr(Row);

  for(j=0;j<64;j++)
  {
   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;
  }
 }
}


/****************************************************************************
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;
}

⌨️ 快捷键说明

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