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

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

📁 12864
💻 TXT
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************
左屏判忙
****************************************************************************/
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;
}




     

2007-6-23 21:03:00举报帖子 
使用道具 
    LO单片机VE 


等级:业余侠客
文章:65
积分:536
门派:无门无派
注册:2005年7月28日第 13 楼      

--------------------------------------------------------------------------------
/****************************************************************************
时间设置
****************************************************************************/
void timereset(void)
{
 bit BACK4=1; 

 clear();

 write_character(0,2,"时",0);
 write_character(0,4,"间",0); 
 write_character(0,10,"返",0);
 write_character(0,12,"回",0);
 write_character(2,4,"年",0);//写入 年月日星期等不变汉字
 write_character(2,8,"月",0);
 write_character(2,12,"日",0);
 write_character(4,4,"星",0);
 write_character(4,6,"期",0);
 delayms(2000);
 write_ascii(6,7,11,0);

 readtime();
 write_ascii(2,2,YEAR>>4,0);
 write_ascii(2,3,YEAR&0x0f,0);
 write_ascii(2,6,MONTH>>4,0);
 write_ascii(2,7,MONT

⌨️ 快捷键说明

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