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

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

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

/****************************************************************************
时间设置
****************************************************************************/
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,MONTH&0x0f,0);
 write_ascii(2,10,DAY>>4,0);
 write_ascii(2,11,DAY&0x0f,0);
 write_week(4,8,WEEK,0);
 write_ascii(6,5,HOUR>>4,0);
 write_ascii(6,6,HOUR&0x0f,0);
 write_ascii(6,8,MINUTE>>4,0);
 write_ascii(6,9,MINUTE&0x0f,0);
 delayms(2000);
 while(BACK4!=0)
 {
  readtime();
  if((K1&&K2&&K3)!=1)
  {
   write_character(0,10,"返",0);
   write_character(0,12,"回",0);
   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,MONTH&0x0f,0);
   write_ascii(2,10,DAY>>4,0);
   write_ascii(2,11,DAY&0x0f,0);
   write_week(4,8,WEEK,0);
   write_ascii(6,5,HOUR>>4,0);
   write_ascii(6,6,HOUR&0x0f,0);
   write_ascii(6,8,MINUTE>>4,0);
   write_ascii(6,9,MINUTE&0x0f,0);
  delayms(2000);
  }
  if(K1==0)
  {
   delayms(40);
   while(K1==0);
   TMF++;
  }

  if(K3==0)
  {
   delayms(40);
   while(K3==0);
   TMF--;
  }

  if(TMF==0xff)
  {
   TMF=6;
  }
  if(TMF==7)
  {
   TMF=0;
  }

  switch(TMF)
  {
   case 0:write_character(0,10,"返",1);
          write_character(0,12,"回",1); 
    delayms(2000);
    delayms(2000);
          if(K2==0)
    {
     delayms(60);
           while(K2==0);
     BACK4=0;
     clear();
    }
          break;
   case 1:write_ascii(2,2,YEAR>>4,1);
          write_ascii(2,3,YEAR&0x0f,1);
     delayms(2000);
          if(K2==0)
    {
     delayms(60);
     while(K2==0);
     YEAR=turntobcd(2,2,YEAR,99,0);
           write_ds1302(0x8c,YEAR);
    }          
          break;
   case 2:write_ascii(2,6,MONTH>>4,1);
          write_ascii(2,7,MONTH&0x0f,1);
     delayms(2000);
       if(K2==0)
    {
     delayms(60);
           while(K2==0);
     MONTH=turntobcd(2,6,MONTH,12,1);
           write_ds1302(0x88,MONTH);
    }
          break;
   case 3:write_ascii(2,10,DAY>>4,1);
          write_ascii(2,11,DAY&0x0f,1);
     delayms(2000);
          if(K2==0)
    {
     delayms(60);
     while(K2==0);
           DAY=turntobcd(2,10,DAY,31,1);
     write_ds1302(0x86,DAY);
    }
          break;
   case 4:write_week(4,8,WEEK,1);
      delayms(2000);
          if(K2==0)
    {
     delayms(60);
           while(K2==0);
     WEEK=turntobcd(4,8,WEEK,7,1);
        write_ds1302(0x8a,WEEK);
    }
          break;
   case 5:write_ascii(6,5,HOUR>>4,1);
          write_ascii(6,6,HOUR&0x0f,1);
    delayms(2000);
          if(K2==0)
    {
     delayms(60);
           while(K2==0);
     HOUR=turntobcd(6,5,HOUR,23,0);
    }
    write_ds1302(0x84,HOUR);
          break;
   case 6:write_ascii(6,8,MINUTE>>4,1);
          write_ascii(6,9,MINUTE&0x0f,1);
    delayms(2000);
          if(K2==0)
    {
     delayms(60);
           while(K2==0);
     MINUTE=turntobcd(6,8,MINUTE,59,0);
     write_ds1302(0x82,MINUTE);
    }
          break;
  }
 }
}

/****************************************************************************
选择设置
****************************************************************************/
void keyscanf1(void)
{
 bit BACK1=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,6,"时",0);
 write_character(2,8,"间",0);
 write_character(4,6,"闹",0);
 write_character(4,8,"钟",0);
 write_character(6,6,"温",0);
 write_character(6,8,"度",0);
 write_ascii(2,5,1,0);
 write_ascii(4,5,2,0);
 write_ascii(6,5,3,0); 
 while(BACK1!=0)
 {
  if(K1==0)
  {
   delayms(30);
   while(K1==0);
   MF++;
  }

  if(K3==0)
  {
   delayms(30);
   while(K3==0);
   MF--;
  }

  if(MF==4)
  {
   MF=0;
  }
  if(MF==0xff)
  {
   MF=3;
  }

  switch(MF)
  {
   case 0:write_character(0,10,"返",1);
          write_character(0,12,"回",1);
      write_character(0,2,"设",0);
          write_character(0,4,"置",0);
          write_ascii(2,5,1,0);
          write_character(2,6,"时",0);
          write_character(2,8,"间",0);
          write_ascii(4,5,2,0);
          write_character(4,6,"闹",0);
          write_character(4,8,"钟",0);
          write_ascii(6,5,3,0); 
          write_character(6,6,"温",0);
          write_character(6,8,"度",0);
    delayms(2000);
       if(K2==0)
          {
           delayms(30);
     while(K2==0);
     clear();
     BACK1=0;
    }
          break;
   case 1:write_ascii(2,5,1,1); 
          write_character(2,6,"时",1);
          write_character(2,8,"间",1);
    write_character(0,2,"设",0);
          write_character(0,4,"置",0);
    write_character(0,10,"返",0);
          write_character(0,12,"回",0);
          write_ascii(4,5,2,0);
          write_character(4,6,"闹",0);
          write_character(4,8,"钟",0);
          write_ascii(6,5,3,0); 
          write_character(6,6,"温",0);
          write_character(6,8,"度",0);
    if(K2==0)
          {
           delayms(30);
           while(K2==0);
     timereset();
    }
          break;
   case 2:write_ascii(4,5,2,1);
          write_character(4,6,"闹",1);
          write_character(4,8,"钟",1);
    write_character(0,2,"设",0);
          write_character(0,4,"置",0);
       write_character(0,10,"返",0);
          write_character(0,12,"回",0);
          write_ascii(2,5,1,0);
          write_character(2,6,"时",0);
          write_character(2,8,"间",0);
          write_ascii(6,5,3,0); 
          write_character(6,6,"温",0);
          write_character(6,8,"度",0);
     delayms(2000);
          if(K2==0)
          {
           delayms(30);
           while(K2==0);
     //ringreset();
    }
          break;
   case 3:write_ascii(6,5,3,1);
          write_character(6,6,"温",1);
          write_character(6,8,"度",1);
    write_character(0,2,"设",0);
          write_character(0,4,"置",0);
    write_character(0,10,"返",0);
          write_character(0,12,"回",0);
          write_ascii(2,5,1,0);
          write_character(2,6,"时",0);
          write_character(2,8,"间",0);
          write_ascii(4,5,2,0);
          write_character(4,6,"闹",0);
          write_character(4,8,"钟",0);
    delayms(2000);
    if(K2==0)
          {
           delayms(30);
           while(K2==0);
     //tempreset();
    }
          break;
  }
 }
}

/****************************************************************************
按键处理
****************************************************************************/
void keyscanf(void)
{
 if(K1==0)
 {
  delayms(20);
  while(K1==0);
  //tempdisplay();
  BeiGuang=~BeiGuang;
 }

 if(K2==0)
 {
  delayms(20);
  while(K2==0);
  keyscanf1();
  clear();
 }

 if(K3==0)
 {
  delayms(20);
  while(K3==0);
  clear();
  BeiGuang=1;
  delays(30);
  clear();
while(K3==1);
{while(K3==0);
 }
}
}

/***************************************************************************
调整
****************************************************************************/
unsigned char turntobcd(unsigned char x,unsigned char y,unsigned char value,
                        unsigned char max,unsigned char min)
{
 unsigned char valueh;
 unsigned char valuel;
 valueh=value>>4;
 valuel=value&0x0f;
 value=valueh*10+valuel;

 while(K2!=0)
 {
  if(K1==0)
  {
   delayms(60);
   while(K1==0);
   value++;
  }
              
  if(K3==0)
  {
   delayms(60);
   while(K3==0);
   value--;
  }
              
  if(min==0)
  {
   if(value==0x0ff) value=max;
  }
  else 
  {
   if(value<min) value=max;
  }

  if(value>max)
  {
   value=min;
  }

  if((x==4)&&(y==8))
  {
   if(SCNF==1) write_week(x,y,value,1);
   else
   {
    write_ascii(x,y,12,0);
 write_ascii(x,y+1,12,0);
   }
  }

  else
  {
   if(SCNF==1)
   {
    write_ascii(x,y,value/10,1);
    write_ascii(x,y+1,value%10,1);
   }
   else
   {
    write_ascii(x,y,12,0);
    write_ascii(x,y+1,12,0);
   }
  }
 }
 delayms(60);
 while(K2==0);
 valueh=value/10;
 valuel=value%10;
 value=((valueh<<4)|valuel);
 return value;
}

/****************************************************************************
主函数
****************************************************************************/
void main(void)
{
 unsigned char i;
 unsigned char count;
 unsigned char RF=1;

 //init_ds1302();
 init_12864();

 initTimer0();
 IE=0x82;
 TR0=1;

 clear();

 while(1)
 {delayms(2000);
  if(!(K1&&K2&&K3))
  {
   keyscanf();
  }
init_12864();

  write_character(0,5,"年",0);//写入 年月日星期室温等不变汉字
  write_character(0,9,"月",0);
  write_character(0,13,"日",0);
  write_character(2,4,"星",0);
  write_character(2,6,"期",0);
  write_character(6,1,"室",0);
  write_character(6,3,"温",0);
  write_character(6,11,"℃",0);
  write_week(2,8,WEEK,0);//写入星期
  readtime();//写入时间
  write_ascii(0,1,2,0);
  write_ascii(0,2,0,0);
  write_ascii(0,3,YEAR>>4,0);
  write_ascii(0,4,YEAR&0x0f,0);
  write_ascii(0,7,MONTH>>4,0);
  write_ascii(0,8,MONTH&0x0f,0);
  write_ascii(0,11,DAY>>4,0);
  write_ascii(0,12,DAY&0x0f,0);
  write_ascii(4,5,HOUR>>4,0);
  write_ascii(4,6,HOUR&0x0f,0);
  write_ascii(4,8,MINUTE>>4,0);
  write_ascii(4,9,MINUTE&0x0f,0);

  if(SCNF==1) write_ascii(4,7,11,0);
  else write_ascii(4,7,12,0);

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

  write_week(3,14,9,0);
  write_week(5,14,10,0);
delayms(2000);
 
delayms(2000);
 }

}


     

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


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

--------------------------------------------------------------------------------
/****************************************************************************
*描述:12864+ds1302+ds18b20                                              *
*硬件:AT89C52单片机,晶振为11.0592MHz,KS0108驱动的128*64液晶                   *
*      SPI总线的DS1302时钟,1-WIRE温度传感器DS18B20。      *
*作者:LO单片机VE                                                           *                                                 
*文件:12864.c                  *             
*日期:2007-06-10                                                           *
*****************************************************************************
*描述:                                                                     *
****************************************************************************/

/****************************************************************************
头文件区
****************************************************************************/
#include<reg52.h>
#include<intrins.h>

/****************************************************************************
内存区定义
****************************************************************************/
sbit BF=P0^7; //12864
sbit DI=P2^0; 
sbit RW=P2^1;
sbit ENABLE=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit TIMECLK=P2^7; //DS1302
sbit TIMEDATA=P1^7; 
sbit TIMERST=P1^6;
sbit K1=P1^2; //三个按键
sbit K2=P1^3;
sbit K3=P1^4;
sbit K4=P1^5;
sbit LN1=P3^2; //水位控制端口
//sbit LN2=P3^7;
sbit DQ=P3^6; //DS18b20*1
sbit HT=P3^4; //温度控制端口
sbit CR=P3^5;
sbit WT=P3^3;
sbit BUZZ=P3^7;//蜂鸣器
sbit BeiGuang=P2^6;//液晶背光控制

bit SCNF=1; //秒闪烁标志位

⌨️ 快捷键说明

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