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

📄 realmain.c

📁 用pic单片机做的一个温度计 实现实时时钟显示和存储
💻 C
📖 第 1 页 / 共 3 页
字号:
   lcd_set_cursor(1,2);
   putslcd(tempdisplay1);
  
   lcd_set_cursor(2,1);
   putslcd(tempdisplay2);
   writedatalcd(58); //:

   lcd_set_cursor(2,8);
   writedatalcd(0xA1);                                      //温度标识 
   writedatalcd(0xE6);  

   lcd_set_cursor(3,1);
   putslcd(tempdisplay3);

   lcd_set_cursor(3,8);
   writedatalcd(0XC3);                                      //秒标识
   writedatalcd(0XEB); 


   lcd_set_cursor(4,1); 
 
   if(read_i2c_date( at2416, uprestrctflag)) writedatalcd(45); 		                 		  //-
   else          writedatalcd(43);                                //+
   display_float3bit(stof(at2416,at2416temup));


   lcd_set_cursor(4,5);  


   if(read_i2c_date( at2416, downrestrctflag)) writedatalcd(45); 		                 		  //-
   else          writedatalcd(43);                                //+
   display_float3bit(stof(at2416,at2416temdown));
   
  PORTAbits.RA2=1;
  PORTAbits.RA3=0;
  PORTAbits.RA5=0;
  PORTAbits.RA1=1;

   while(1)
 { 
   extern  char  tempflag;  
   
   float temperature;
   i++;
   tempflag=0;
   temperature=get_ds18b20_temp();                                //读取温度

   pwm_set(temperature);                                          //温度控制PWM波

   lcd_set_cursor(2,3);
   writedatalcd(58);


   if(tempflag) writedatalcd(45); 		                 		 //-
   else         writedatalcd(43);                                //+

   lcd_set_cursor(2,4);
   display_float(temperature);
  
   

   lcd_set_cursor(3,4);
   
   read_time();                                               //读取时间
                         
   h_to_number(hour);  
   if(y==48) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z);writedatalcd(58);  //:

   h_to_number(minute);  
   if(y==48) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z); writedatalcd(58);  //:
 
   h_to_number(second); 
   if(y==48) writedatalcd(32);
   else    writedatalcd(y);  writedatalcd(z);
   
   while(1)                                                   //判断是否超越温度控制
       {
          if(tempflag==0&&read_i2c_date( at2416, uprestrctflag)==0)
                   {     
                        if(temperature>stof(at2416,at2416temup))
                                    {  
                                        uplight();
                                        sound();
                                         break; 
                                     }
                   }

          if(tempflag==0&&read_i2c_date( at2416, uprestrctflag)==1)
                   { 
                          uplight();
                          sound();         
                           break;

                   }
           if(tempflag==1&&read_i2c_date( at2416, uprestrctflag)==1)
                    
                   {
                        if(temperature<stof(at2416,at2416temup))
                                     {    
                                         uplight();
                                         sound(); 
                                          break; 
                                     }
                    }
           if(tempflag==1&&read_i2c_date( at2416, downrestrctflag)==0)
                    {                           
                          dowmlight();
                          sound();
                           break;
                    }
           if(tempflag==1&&read_i2c_date( at2416, downrestrctflag)==1)
                    {
                          if(temperature>stof(at2416,at2416temdown))
                                     {    
                                           dowmlight();
                                           sound();
                                           break;
                                      }
                    }
           if(tempflag==0&&read_i2c_date( at2416, downrestrctflag)==0)
                    {
                           if(temperature<stof(at2416,at2416temdown))
                                     {
                                            dowmlight();
                                            sound();
                                            break;
                                      }
                    }
            
         TRISAbits.TRISA2=1;

         TRISAbits.TRISA3=1; 
         
         
         TRISAbits.TRISA1=1;
         TRISAbits.TRISA5=1; 
          break;

       }

   if(i>=38)                                                     //每隔5秒进行一次存储
               {
                union {
                      char c[4];
                      float f;
                      }temp;
                char j;
                char writeeepromdate[12];       
                temp.f=temperature;
    
                writeeepromdate[0]=year;
                writeeepromdate[1]=month;
                writeeepromdate[2]=date;
                writeeepromdate[3]=day;
                writeeepromdate[4]=hour;
                writeeepromdate[5]=minute;
                writeeepromdate[6]=second;
                writeeepromdate[7]=tempflag;
                for(j=0;j<4;j++)   { writeeepromdate[j+8]=temp.c[j]; }    
                write_i2c_pagedate(at2416, 12*k+20,12,writeeepromdate);          //存储当前信息

                k++;
                if(k==20) k=0;                                                    
                i=0;
               }

   if(keyflag)
    {   
       readkey();
       if(key==escape)  break;              
    }
  
  } 
   TRISAbits.TRISA2=1;

   TRISAbits.TRISA3=1; 
         
         
   TRISAbits.TRISA1=1;
   TRISAbits.TRISA5=1; 
 
  pwm_set(0.00);                                                                   //关闭PWM波
}
 
/*****************************************************************************
 ******函 数 名 称 : timeset()
 ******函 数 功 能 : 进入时间设定界面
 ******输       入 :  
 ******输       出 :  
 ******************************************************************************/
void timesset()
{ 
   char settime1[]="系统时间设定";
   char settime2[]="时";
   char settime3[]="分";
   char settime4[]="秒";
   char settime5[]="当前时刻:";
   char settime6[]="年";
   char settime7[]="月";
   char settime8[]="日";

   writecmdlcd(0x0f);                                                   // 光标开

   clearlcd();                                                          //清屏 

   read_time();                                                         //读取时间
  
   lcd_set_cursor(1,2);

   putslcd(settime1);

   lcd_set_cursor(2,1);
   putslcd(settime5);

   lcd_set_cursor(3,2);
 
   h_to_number(hour); 
   if(y==48) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z); putslcd(settime2);        //X时

   h_to_number(minute);
   if(y==48) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z); putslcd(settime3);        //X分

   h_to_number(second); 
   if(y==48) writedatalcd(32); 
   else    writedatalcd(y);    writedatalcd(z); putslcd(settime4);       //x秒

   lcd_set_cursor(4,2);  
   writedatalcd(50);  writedatalcd(48);                                  //20

   h_to_number(year);
   writedatalcd(y);   writedatalcd(z); putslcd(settime6);               //X年
 
   h_to_number(month);
   if(y==0) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z); putslcd(settime7);        //X月

   h_to_number(date);
   if(y==0) writedatalcd(32); 
   else    writedatalcd(y);   writedatalcd(z); putslcd(settime8);       //X日

 
   lcd_set_cursor(3,2);
   timesettemp();
   writecmdlcd(0x0c);                                                    // 光标关

}

/*****************************************************************************
 ******函 数 名 称 : timesettemp()
 ******函 数 功 能 : 时间设定
 ******输       入 :  
 ******输       出 :  
 ******************************************************************************/ 
 void timesettemp()
{    
     char settime9[]="输入成功";
     char settime10[]="您取消了输入";
     char number[3];                                                          
     char pos=0; 
     char i=0;
     char temptime[6]; 
     number[2]=0; 
     temptime[2]=second; temptime[1]=minute; temptime[0]=hour;      //在设置栏中显示原始值
     temptime[5]=date;   temptime[4]=month;  temptime[3]=year; 
     while(1)
  {
     
       readkey();
      if(key>=key0&&key<=key9)                                       //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       { 
           
     	 if(pos<2)    
         {
         number[pos++]=key;                            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         writedatalcd(number[pos-1]+48); 
         }  
       
       }
     
      if(key==right)
      {   
          temptime[i]=number[0]*10+number[1];
         
          if(i<=1)   lcd_set_cursor(3,i*2+4);
          if(i>=2) 
          {      
               if(i==5)  {
                           i=0;
                           lcd_set_cursor(3,2);continue;
                         }
               else        lcd_set_cursor(4,2*i-1);
          }
          i++;
          pos=0;
      }
     if(key==lift)
      {    
           temptime[i]=number[0]*10+number[1];
           
           if(i>=4)  lcd_set_cursor(4,2*i-5);
           if(i<=3)
           {
                if(i==0)   { 
                               i=5; 
                               lcd_set_cursor(4,7);continue;
                            }

                 else       lcd_set_cursor(3,2*i);
           }
           i--;
           pos=0;       
      }
     if(key==enter)
      {
        temptime[i]=number[0]*10+number[1];
                  clearlcd(); 
                  clearlcd();   
                  writecmdlcd(0x0c);                                 // 光标关  
                  writecmdlcd(0x0c);                                 // 光标关           
                  lcd_set_cursor(2,3);
                  lcd_set_cursor(2,3);
                  putslcd(settime9);
                  delays(10000,500);                                //延迟2.5秒    

⌨️ 快捷键说明

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