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 + -
显示快捷键?