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

📄 set_time.c

📁 实现电子钟及温度测量
💻 C
字号:
#include "Cry12864.h"
#include "gata.h"
#include "DS1302.h"

typedef unsigned char uchar;
typedef unsigned int  uint;

void ShowTime(void); 
extern unsigned char keyval;
//游标位置变量
unsigned char pp = 0;
//是否处于修改状态标志,1--是,0--否
extern unsigned char cflag;

/*******************************************
函数名称:Set_Time
功    能:通过按键设置DS1302的时间并在12864上显示
参    数:无
返回值  :无
********************************************/ 

void Set_Time(void)
{
      switch(keyval)
     {  
             case 0x01:
                      switch(++pp)
                      {
                       case 1: Write_Cmd(0x90) ;break;
                       case 2: Write_Cmd(0x92) ;break;
                       case 3: Write_Cmd(0x94) ;break;
                       case 4: Write_Cmd(0x97) ;break;
                       case 5: Write_Cmd(0x89) ;break;
                       case 6: Write_Cmd(0x8b) ;break;
                       case 7: Write_Cmd(0x8d) ;break;
                       default:break;
                      }
                      Write_Cmd(0x0f);
                      if(pp==8)  pp=0;
                      cflag = 1;
                      keyval=0;
                      break;
             case 0x02:
                      keyval=0;
                      if(cflag ==1)
                      {
                          switch(pp)
                          {
                             case 1:
                                   rdata[6]++;
                                   if((rdata[6]&0x0f)==0x0a)
                                   {
                                      rdata[6] +=0x06;
                                   }
                                   if(rdata[6]>0x99)
                                   {
                                      rdata[6]=0x00;
                                   }                      
                                   ShowTime();
                                   Write_Cmd(0x90);
                                   //Set_DS1302(rdata); 
                                   break;
                             case 2:
                                   rdata[4]++;
                                   if((rdata[4]&0x0f)==0x0a)
                                   {
                                       rdata[4] +=0x06;
                                   }
                                   if(rdata[4]>0x12)
                                   {
                                      rdata[4]=0x01;
                                   } 
                                   ShowTime();
                                   Write_Cmd(0x92);
                                  
                                   break;
                             case 3:
                                   rdata[3]++;
                                   if((rdata[3]&0x0f)==0x0a)
                                   {
                                      rdata[3] +=0x06;
                                   }
                                   if(rdata[3]>0x31)
                                   {
                                      rdata[3]=0x01;
                                   } 
                                   ShowTime();
                                   Write_Cmd(0x94);
                                  
                                   break;
                             case 4:
                                   rdata[5]++;
                                   if((rdata[5]&0x0f)==0x08)
                                   {
                                      rdata[5] =0x00;
                                   }
                                   ShowTime();
                                   Write_Cmd(0x97);
                                   
                                   break;
                             case 5:
                                   rdata[2]++;
                                   if((rdata[2]&0x0f)==0x0a)
                                   {
                                      rdata[2] +=0x06;
                                   }
                                   if(rdata[2]>0x23)
                                   {
                                      rdata[2]=0x00;
                                   }
                                   ShowTime();
                                   Write_Cmd(0x89);
                                  
                                   break;
                             case 6:
                                   rdata[1]++;
                                   if((rdata[1]&0x0f)==0x0a)
                                   {
                                      rdata[1] +=0x06;
                                   }
                                   if(rdata[1]>0x59)
                                   {
                                      rdata[1]=0x00;
                                   }
                                   ShowTime();
                                   Write_Cmd(0x8b);
                                   break;
                              case 7:
                                   rdata[0]++;
                                   if((rdata[0]&0x0f)==0x0a)
                                   {
                                      rdata[0] +=0x06;
                                   }
                                   if(rdata[0]>0x59)
                                   {
                                      rdata[0]=0x00;
                                   }
                                   ShowTime();
                                   Write_Cmd(0x8d);
                                  
                                   break;
              
                                  default: break;
                              }     
                        }
                    break;
             case 0x03:
                        keyval=0;
                        if(cflag ==1)
                        {
                            switch(pp)
                            {
                               case 1:
                                     rdata[6]--;
                                     if((rdata[6]&0x0f)==0x0f)
                                     {
                                        rdata[6] -=0x06;
                                     }
                                     if(rdata[6]<0x01)
                                     {
                                        rdata[6]=0x99;
                                     }                      
                                     ShowTime();
                                     Write_Cmd(0x90);
                                     break;
                               case 2:
                                     rdata[4]--;
                                     if((rdata[4]&0x0f)==0x0f)
                                     {
                                         rdata[4] -=0x06;
                                     }
                                     if(rdata[4]<0x01)
                                     {
                                        rdata[4]=0x12;
                                     } 
                                     ShowTime();
                                     Write_Cmd(0x92);
                                    
                                     break;
                               case 3:
                                     rdata[3]--;
                                     if((rdata[3]&0x0f)==0x0f)
                                     {
                                        rdata[3] -=0x06;
                                     }
                                     if(rdata[4]<0x01)
                                     {
                                        rdata[4]=0x31;
                                     } 
                                     ShowTime();
                                     Write_Cmd(0x94);
                                    
                                     break;
                               case 4:
                                     rdata[5]--;
                                     if((rdata[5]&0x0f)==0x01)
                                     {
                                        rdata[5] =0x07;
                                     }
                                     ShowTime();
                                     Write_Cmd(0x97);
                                     
                                     break;
                               case 5:
                                     rdata[3]--;
                                     if((rdata[2]&0x0f)==0x0f)
                                     {
                                        rdata[2] -=0x06;
                                     }
                                     if(rdata[2]<0x01)
                                     {
                                        rdata[4]=0x23;
                                     }
                                     ShowTime();
                                     Write_Cmd(0x89);
                                    
                                     break;
                               case 6:
                                     rdata[1]--;
                                     if((rdata[1]&0x0f)==0x0f)
                                     {
                                        rdata[1]-=0x06;
                                     }
                                     if(rdata[1]<0x01)
                                     {
                                        rdata[1]=0x59;
                                     }
                                     ShowTime();
                                     Write_Cmd(0x8b);
                                     break;
                                case 7:
                                     rdata[0]--;
                                     if((rdata[0]&0x0f)==0x0f)
                                     {
                                        rdata[0] -=0x06;
                                     }
                                     if(rdata[0]<0x01)
                                     {
                                        rdata[0]=0x59;
                                     }
                                     ShowTime();
                                     Write_Cmd(0x8d);                                
                                     break;
                                  
                            }
                        }
                       break;             
              case 0x04:
                        keyval = 0;
                        if(cflag==1)
                        {
                           Set_DS1302(rdata); 
                           Write_Cmd(0x0c); 
                           cflag=0;
                           pp=0;
                        }
           default: break;
    
     }

}

/*******************************************
函数名称:ShowTime
功    能:将DS1302的时间转换成10进制显示
参    数:无
返回值  :无
********************************************/    
void ShowTime(void)
{
    uchar h1[16];       //第1行显示数据
    uchar h2[12];        //第2行显示数据
    uchar *p ;
   // uchar *w;//[14];
    uchar i;
    h1[0] = shuzi[rdata[6]>>4];     //年
    h1[1] = shuzi[rdata[6]&0x0f];
    p="年";
    h1[2]=*p;
    p++;
    h1[3]=*p;
   
    h1[4] = shuzi[rdata[4]>>4];     //月
    h1[5] = shuzi[rdata[4]&0x0f];
    p="月";
    h1[6]=*p;
    p++;
    h1[7]=*p;;       //"-"
   
    h1[8] = shuzi[rdata[3]>>4];     //日
    h1[9] = shuzi[rdata[3]&0x0f];
    p="日";
    h1[10]=*p;
    p++;
    h1[11]=*p;
    
 
    p="周";
    h1[12]=*p;
    p++;
    h1[13]=*p;
    
     for(i=0;i<2;i++)
     { //一个汉字写两次
        if(rdata[5]==0)
        {  
          p="日";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        } 
        if(rdata[5]==1)
        { 
            p="一";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        }
        if(rdata[5]==2)
        { 
            p="二";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        }                
        if(rdata[5]==3)
        {
            p="三";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        }
        if(rdata[5]==4)
        {  
            p="四";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        }
        if(rdata[5]==5)
        {  
           p="五";
          h1[14]=*p;
          p++;
          h1[15]=*p;
        }
        if(rdata[5]==6)
         {  
          p="六";
          h1[14]=*p;
          p++;
          h1[15]=*p; 
         }
    }
    //h1[14] = shuzi[rdata[5]]; //周
    //h1[15]=0x20; 
    Disp_HZ(0x90,h1,8);           //在第二行显示年月日
   
    h2[0] = shuzi[rdata[2]>>4];     //时
    h2[1] = shuzi[rdata[2]&0x0f];
    p="时";
    h2[2]=*p;
    p++;
    h2[3]=*p;       
   
    h2[4] = shuzi[rdata[1]>>4];     //分
    h2[5] = shuzi[rdata[1]&0x0f];
    p="分";
    h2[6]=*p;
    p++;
    h2[7]=*p;       //":"
   
    h2[8] = shuzi[rdata[0]>>4];     //秒
    h2[9] = shuzi[rdata[0]&0x0f];
    p="秒";
    h2[10]=*p;
    p++;
    h2[11]=*p;

    Disp_HZ(0x89,h2,6);          //在第三行显示
    
   
}

⌨️ 快捷键说明

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