void DS18B20_Execute() { /* -флаг сброшен - выполнить поиск 1Wire устройств -если количество заданных устройсв совпадает с колличеством найденных - устанавливаем флаг, чтобы функция поиска больше не запускалась */ if (ds18b20_searchFlag == SEARCH_SENSORS){ ds18b20_num = 0; ds18b20_crcFlag = OWI_SearchDevices(ds18b20_AllDevices, MAX_DEVICES, BUS, &ds18b20_num); if ((ds18b20_num == MAX_DEVICES)&&(ds18b20_crcFlag != SEARCH_CRC_ERROR)){ ds18b20_searchFlag = SENSORS_FOUND; } } /* считать температуру первого найденного датчика если возвращена ошибка CRC, вывести строку "not" и сбросить флаг, чтобы функция поиска снова произвела опрос шины */ ds18b20_crcFlag = DS18B20_ReadTemperature(BUS, ds18b20_AllDevices[0].id, &(ds18b20_temperature[0])); if (ds18b20_crcFlag != READ_CRC_ERROR){ // DS18B20_PrintTemperature(ds18b20_temperature); } else{ ds18b20_searchFlag = SEARCH_SENSORS; } /* считать температуру второго найденного датчика если возвращена ошибка CRC, вывести строку "not" и сбросить флаг, чтобы функция поиска снова произвела опрос шины */ // LCD_Goto(7,1); ds18b20_crcFlag = DS18B20_ReadTemperature(BUS, ds18b20_AllDevices[1].id, &(ds18b20_temperature[1])); if (ds18b20_crcFlag != READ_CRC_ERROR){ // DS18B20_PrintTemperature(ds18b20_temperature); } else{ // LCD_SendString(" not "); ds18b20_searchFlag = SEARCH_SENSORS; } }
/******************************************************************************* * Function Name : TaskTouch * Description : Touch Pannel task. * Input : - *pdata. * Output : None * Return : None *******************************************************************************/ void TaskTouch(void *pdata) { float temp = 0.0; char str_buf[32]; pdata = pdata; // 防止编译器告警 DS18B20_Configuration(12); while(1) { OSTimeDlyHMSM(0, 0, 0, 500); // 任务延时3s temp = DS18B20_ReadTemperature(); strcpy(str_buf, FLOAT2STR(temp, 4)); TFT_DisplayD36x48(10, 70, str_buf[1], White, Blue); TFT_DisplayD36x48(46, 70, str_buf[2], White, Blue); TFT_DisplayD36x48(82, 70, '.', White, Blue); TFT_DisplayD36x48(118, 70, str_buf[4], White, Blue); TFT_DisplayD36x48(154, 70, str_buf[5], White, Blue); TFT_DisplayD36x48(190, 70, str_buf[6], White, Blue); printf("%s\r\n", str_buf); } // end while(1)... }
unsigned int GetTemperature(uint8 *pID) { unsigned int Data; DS18B20_Convert(pID); OWDelay(500); Data = DS18B20_ReadTemperature(pID); Data = Data*10/16; return Data; }
/******************************************************************************** * 函数名:TemperDatHandle() * 描述 :温度数据处理 * 输入 :- * 返回 :- * 调用 :- ********************************************************************************/ void TemperDatHandle() { tmp_data.tmp2 = DS18B20_ReadTemperature(1); // SendString("temp2:\r\n"); //调试信息时候用 // SendTemp(tmp_data.tmp2); // SendString("\r\n"); // tmp_data.tmp1 = (uint)sensor_data.temp1_h<<8|(uint)sensor_data.temp1_l; // SendString("temp1:\r\n"); // SendByteASCII(tmp_data.tmp1); // SendString("\r\n"); // tmp_data.tmp2 = (uint)sensor_data.temp2_h<<8|(uint)sensor_data.temp2_l; // SendString("temp2:\r\n"); // SendByteASCII(tmp_data.tmp2); // SendString("\r\n"); // if(tmp_data.tmp1>5000) tmp_data.tmp1 = 8888; //默认没有零下的情况,50度以上显示错误88.88度 if(tmp_data.tmp2>5000) tmp_data.tmp2 = 8888; //默认没有零下的情况,50度以上显示错误88.88度 }