uvsensor.c

来自「基于pic1687x 的UVSensor 源程序,带128*64 LCD显示,以」· C语言 代码 · 共 1,665 行 · 第 1/4 页

C
1,665
字号
              while(!RD0);
              if(SetTimePos == 0)
                  SetTimePos = 12;
              else
                 SetTimePos --;
              Display_SetTime(SetTimePos);
             }
         }
       
         if(RD1==0)//前一个
          {
           DelayMs(1);
           if(RD1==0)
             {
              while(!RD1);
              SetTimePos ++;
              if(SetTimePos > 12)
                  SetTimePos = 0;
              Display_SetTime(SetTimePos);
             }
          }
         if(RD2==0)//--
          {
           DelayMs(1);
           if(RD2 == 0)
             {
              while(!RD2);
              if(NowTime[SetTimePos] == 0)
                  NowTime[SetTimePos] =  MaxData[SetTimePos];
              else
                 NowTime[SetTimePos] --;
              AdjustTime();
             }
          }
       
         if(RD3==0)//++
          {
           DelayMs(1);
           if(RD3==0)
             {
              while(!RD3);
              NowTime[SetTimePos]++;
              if(NowTime[SetTimePos] > MaxData[SetTimePos])
                NowTime[SetTimePos] = 0;
              AdjustTime();
             }
          }
    
        if(RD4==0)//确定
         {
           DelayMs(1);
           if(RD4==0)
             {
              while(!RD4);
              Save_NewTime();
              return;
             }
         }
         
        if(RD5==0)//取消
         {
           DelayMs(1);
           if(RD5==0)
             {
              while(!RD5);
              P8563_ReadData(RDADDR,P8563Data,7); //读现在的秒、分、时、日、星期、月、年
              PData_To_Time(P8563Data);
              return;
             }
         }

       }
  }
/******************************************************************************/
/******************      浏览数据                ************************************/
/******************************************************************************
"各个UVSensor参数";  
 "2006-09-19 16:30";
 "1:1.00V  2:2.00V";
"3:1.00V  4:2.00V";
/******************************************************************************/
void  ScanSensorData(void)
  {
   unsigned char const ScanMenu1[] = "各个UVSensor参数";///"2006-09-19 16:30";
   unsigned char const NoScanMenu[] = "还没有测量数据  ";
   unsigned char ScanMenu2[] ="2006-09-19 16:30";
   unsigned char ScanMenu3[] = "1:1.00V ";
   union
      {
       unsigned char magic[5];
       unsigned char DateTime[5];
       unsigned char SensorData[8];
       unsigned char SensorVoltage[4];
      }EepData;
   union
      {
       unsigned int RAddInt; 
       unsigned char RAddChar[2];
      }EepRAddr;
   union
      {
       unsigned int WAddInt; 
       unsigned char WAddChar[2];
      }EepWAddr;
      
   static bit UpdataScreen ,NewPageFlag,Next4Sensor;
   unsigned char i,j;
   unsigned long Temp;


   UpdataScreen = 1;
   NewPageFlag = 1;
   Next4Sensor = 0;

   LCD_Write_Command(0x01);//清除显示

      
   Read_24C512(0x00,5,EepData.magic);//读标志位和地址
   
   if(EepData.magic[0]!=0x55)
     {
      LCD_set_xy(0,1);//第一行
      for(i=0;i<16;i++)
        {
     	   LCD_Write_Data(NoScanMenu[i]);
        }
      DelayMs(2000);
      return;
     }
   EepRAddr.RAddChar[0]= EepData.magic[1];
   EepRAddr.RAddChar[1]= EepData.magic[2];
   
   EepWAddr.WAddChar[0]= EepData.magic[3];
   EepWAddr.WAddChar[1]= EepData.magic[4];

  while(1)
     {
      P8563_ReadData(RDADDR,P8563Data,7); //读现在的秒、分、时、日、星期、月、年
      if(Judge_MeaTime())
        {
         NewPageFlag = 1;
         UpdataScreen = 1;
        }

      if(NewPageFlag)//新的一页
       {
        LCD_set_xy(0,0);//第一行
        for(i=0;i<16;i++)
           {
     	      LCD_Write_Data(ScanMenu1[i]);
           }
        NewPageFlag = 0;
        Next4Sensor = 0;
        Read_24C512(EepRAddr.RAddInt,5,EepData.DateTime);//时间
        
        ScanMenu2[2] = EepData.DateTime[0]/16 +'0';//年
        ScanMenu2[3] = EepData.DateTime[0]%16 +'0';
        ScanMenu2[5] = EepData.DateTime[1]/16 +'0';//月
        ScanMenu2[6] = EepData.DateTime[1]%16 +'0';
        ScanMenu2[8] = EepData.DateTime[2]/16 +'0';//日
        ScanMenu2[9] = EepData.DateTime[2]%16 +'0';
        ScanMenu2[11] = EepData.DateTime[3]/16 +'0';//时
        ScanMenu2[12] = EepData.DateTime[3]%16 +'0';
        ScanMenu2[14] = EepData.DateTime[4]/16 +'0';//分
        ScanMenu2[15] = EepData.DateTime[4]%16 +'0';
        LCD_Write_string(0,1,ScanMenu2);//第二行
        Write_24C512(0x0001, 2, EepRAddr.RAddChar);
       }

      if(UpdataScreen)//另外4个参数
       {
        UpdataScreen = 0;
        Read_24C512((EepRAddr.RAddInt+5+Next4Sensor*8),8,EepData.SensorData);//Sensor参数
        for(i=0;i<4;i++)
           {
            Temp = EepData.SensorData[2*i + 1];
            Temp <<=8;
            Temp |= EepData.SensorData[2*i];
            Temp *= AD_VREF;
            Temp /= 1024;
            if(Temp>5)   //补偿运算过程中的误差
              Temp += 1;
/*
            if(Temp>10)   //补偿运算过程中的误差
              Temp += 1;
            if(Temp > 120)//补偿运算过程中的误差
              Temp += 1;
            if(Temp > 150)//补偿运算过程中的误差
              Temp += 1;
*/
            EepData.SensorVoltage[i] = Temp;
           }
        for(i=0;i<4;i++)
           {
            ScanMenu3[0] = Next4Sensor*4 + i + '0' + 1;
            ScanMenu3[2] = EepData.SensorVoltage[i]/100 + '0';
            ScanMenu3[4] = (EepData.SensorVoltage[i] - (ScanMenu3[2] - '0')*100)/10 + '0';
            ScanMenu3[5] = EepData.SensorVoltage[i]%10 + '0';
            switch(i)
                {
                 case 0:
                      LCD_set_xy(0,2);
                 break;
                 case 1:
                      LCD_set_xy(4,2);
                 break;
                 case 2:
                      LCD_set_xy(0,3);
                 break;
                 case 3:
                      LCD_set_xy(4,3);
                 break;
                }
            for(j=0;j<8;j++)
               {
         	  LCD_Write_Data(ScanMenu3[j]);
               }
           }
       }


      if(RD0==0)//后一个
        {
         DelayMs(10);
         if(RD0==0)
           {
            while(!RD0);
            if(EepRAddr.RAddInt > 0x000B)
              {
               EepRAddr.RAddInt -= 21;
               NewPageFlag = 1;
               UpdataScreen = 1;
              }
           }
        }
       
      if(RD1==0)//前一个
       {
         DelayMs(10);
         if(RD1==0)
           {
            while(!RD1);
            if(EepRAddr.RAddInt < (EepWAddr.WAddInt - 21))
              {
               EepRAddr.RAddInt += 21;
               NewPageFlag = 1;
               UpdataScreen = 1;
              }
           }
       }

      if(RD2==0)//--
       {
         DelayMs(10);
         if(RD2==0)
           {
            while(!RD2);
            Next4Sensor = 0;
            UpdataScreen = 1;
           }
       }
       
      if(RD3==0)//++
       {
         DelayMs(10);
         if(RD3==0)
           {
            while(!RD3);
            Next4Sensor = 1;
            UpdataScreen = 1;
           }
       }

      if(RD4==0)//确定
       {
         DelayMs(10);
         if(RD4==0)
           {
            while(!RD4);
            return;
           }
      }
         
      if(RD5==0)//取消
       {
         DelayMs(10);
         if(RD5==0)
           {
            while(!RD5);
            return;
           }
      }

     }

  }
/******************************************************************************/
/*********************       读取测量状态参数  ******************************/
/******************************************************************************/
void ReadMeasureParam(void)
  {
   unsigned char Eep_Data[6] = {0};

   Read_24C512(0x0005,6,Eep_Data);

   Eep_MeaData.Mea_Switch = Eep_Data[0];
   Eep_MeaData.Time = Eep_Data[1];
   Eep_MeaData.StartTime = Eep_Data[2];
   Eep_MeaData.StartTime <<= 8;
   Eep_MeaData.StartTime |= Eep_Data[3];
   Eep_MeaData.EndTime = Eep_Data[4];
   Eep_MeaData.EndTime <<= 8;
   Eep_MeaData.EndTime |= Eep_Data[5];

  }
/******************************************************************************/
/*********************       保存测量状态参数  ******************************/
/******************************************************************************/
void SaveMeasureParam(void)
  {
   unsigned char Eep_Data[6] = {0};
   unsigned int Eep_DataTemp;


   Eep_Data[0] = Eep_MeaData.Mea_Switch;
   Eep_Data[1] = Eep_MeaData.Time;
   
   Eep_DataTemp = Eep_MeaData.StartTime;
   Eep_DataTemp >>= 8;
   Eep_Data[2] = (unsigned char)Eep_DataTemp;
   Eep_DataTemp = Eep_MeaData.StartTime;
   Eep_Data[3] = (unsigned char)Eep_DataTemp;

   Eep_DataTemp = Eep_MeaData.EndTime;
   Eep_DataTemp >>= 8;
   Eep_Data[4] = (unsigned char)Eep_DataTemp;
   Eep_DataTemp = Eep_MeaData.EndTime;
   Eep_Data[5] = (unsigned char)Eep_DataTemp;

   Write_24C512(0x0005,6,Eep_Data);
  }
/******************************************************************************/
/*****************                 显示测量状态             ****************************/
/******************************************************************************/
void Display_SetState(unsigned char Pos)
  {
   unsigned char const SetMeasureMenu1[] = "测试状态: ";
   unsigned char const SetMeasureMenu2[] = "测试间隔为  分钟";
   unsigned char const SetMeasureMenu3[] = "开始时间: ";
   unsigned char const SetMeasureMenu4[] = "结束时间: ";
   unsigned char const SwitchMenu[] = "关开";

   unsigned int DataTemp;
   unsigned char i;

   LCD_set_xy(0,0);
   for(i=0;i<10;i++)
       LCD_Write_Data(SetMeasureMenu1[i]);
   LCD_set_xy(0,1);
   for(i=0;i<10;i++)
       LCD_Write_Data(SetMeasureMenu2[i]);
   LCD_set_xy(6,1);
   for(i=12;i<16;i++)
       LCD_Write_Data(SetMeasureMenu2[i]);
   LCD_set_xy(0,2);
   for(i=0;i<10;i++)
       LCD_Write_Data(SetMeasureMenu3[i]);
   LCD_set_xy(0,3);
   for(i=0;i<10;i++)
       LCD_Write_Data(SetMeasureMenu4[i]);

   LCD_set_xy(5,0);//ON OFF
   if(FlashFlag&&(Pos==0))
     {
      LCD_Write_Data(FlashPic);
      LCD_Write_Data(FlashPic);
     }
   else
     {
      LCD_Write_Data(SwitchMenu[Eep_MeaData.Mea_Switch*2]);
      LCD_Write_Data(SwitchMenu[Eep_MeaData.Mea_Switch*2 + 1]);
     }
     
   LCD_set_xy(5,1);//time
   if(FlashFlag&&(Pos==1))
     {
      LCD_Write_Data(FlashPic);
      LCD_Write_Data(FlashPic);
     }
   else
     {
      LCD_Write_Data(Eep_MeaData.Time + '0');
      LCD_Write_Data('0');
     }

//start time  
   DataTemp = Eep_MeaData.StartTime;
   LCD_set_xy(5,2);
   if(FlashFlag&&(Pos==2))
      LCD_Write_Data(FlashPic);
   else
      LCD_Write_Data((unsigned char)((DataTemp >> 12)&0x000F) + '0');
   if(FlashFlag&&(Pos==3))
      LCD_Write_Data(FlashPic);
   else
      LCD_Write_Data((unsigned char)((DataTemp >> 8)&0x000F) + '0');
   LCD_Write_Data(':');
   if(FlashFlag&&(Pos==4))
      LCD_Write_Data(FlashPic);
   else
      LCD_Write_Data((unsigned char)((DataTemp >> 4)&0x000F) + '0');
   if(FlashFlag&&(Pos==5))
      LCD_Write_Data(FlashPic);
   else
      LCD_Write_Data((unsigned char)((DataTemp)&0x000F) + '0');
   LCD_Write_Data(' ');
//End time  

⌨️ 快捷键说明

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