/****************************************************** 函数名称:short Temperaturepro(void) 返回值:short 参数: void 作用:温度处理,返回温度数值,并修改字符串全局变量 *******************************************************/ short Temperaturepro(void) { short tem,temp; tem=DS18B20_Get_Temp(); if (tem < 0) { temp=-tem; tempbuf[0]='-';//符号位 } else { temp=tem; tempbuf[0]=' ' ; } if (temp/1000==0) tempbuf[1]=' '; else tempbuf[1]=temp/1000 + 0x30;//百位 tempbuf[2]=temp%1000/100 + 0x30;//十位 if ((tempbuf[1]==' ')&&(tempbuf[2]=='0')) tempbuf[2]=' '; tempbuf[3]=temp%100/10 + 0x30; //个位 tempbuf[4]='.'; tempbuf[5]=temp%10 + 0x30; //小数 tempbuf[6]= 'C'; //显示温度符 tempbuf[7]= '\0'; return tem; }
int main(void) { int dis_num; setup(); while ( 1 ) { dis_num =DS18B20_Get_Temp(); printf("The temperatuer is %d.%d\n",dis_num/10,dis_num%10); delay( 1000 ); /* wait 1sec to refresh */ } return(0); }
int main() { u16 PM25Val; short temperature; SysTick_Init(); pc1.baud(115200); ESP8266_Init(); while(1){ PM25Val=GP2Y1010auGetPM25(); pc1.printf("Dust Value is: %d ug/m3\r\n",PM25Val); ESP8266_Ds18b20UpdateLeWei50(PM25Val); } pc1.printf("Start DS18B20 Init ..."); while(DS18B20_Init()) { wait_ms(1000); pc1.printf("DS18B20 Init Ing..."); } while(1){ temperature=DS18B20_Get_Temp(); pc1.printf("Get Temperature : %.1f\n",temperature/10.0); wait_ms(1000); } }
//时间显示模式 u8 calendar_play(void) { u8 second=0; short temperate=0; //温度值 u8 t=0; u8 tempdate=0; u8 rval=0; //返回值 u8 res; u16 xoff=0; u16 yoff=0; //表盘y偏移量 u16 r=0; //表盘半径 u8 d=0; //指针长度 u8 TEMP_SEN_TYPE=0; //默认使用DS18B20 FIL* f_calendar=0; f_calendar=(FIL *)gui_memin_malloc(sizeof(FIL));//开辟FIL字节的内存区域 if(f_calendar==NULL)rval=1; //申请失败 else { res=f_open(f_calendar,(const TCHAR*)APP_ASCII_S6030,FA_READ);//打开文件 if(res==FR_OK) { asc2_s6030=(u8*)gui_memex_malloc(f_calendar->fsize); //为大字体开辟缓存地址 if(asc2_s6030==0)rval=1; else { res=f_read(f_calendar,asc2_s6030,f_calendar->fsize,(UINT*)&br); //一次读取整个文件 } f_close(f_calendar); } if(res)rval=res; } if(rval==0)//无错误 { LCD_Clear(BLACK);//清黑屏 second=calendar.sec;//得到此刻的秒钟 POINT_COLOR=GBLUE; Show_Str(48,60,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][0],16,0x01); //显示进入信息 if(DS18B20_Init()) { Show_Str(48,76,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][1],16,0x01); delay_ms(500); Show_Str(48,92,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][2],16,0x01); TEMP_SEN_TYPE=1; } delay_ms(1100);//等待1.1s BACK_COLOR= BLACK; LCD_Clear(BLACK);//清黑屏 if(lcddev.width==240) { r=80; d=7; }else if(lcddev.width==320) { r=120; d=9; }else if(lcddev.width==480) { r=160; d=12; } yoff=(lcddev.height-r*2-140)/2; TIME_TOPY=yoff+r*2+10; OTHER_TOPY=TIME_TOPY+60+10; xoff=(lcddev.width-240)/2; calendar_circle_clock_drawpanel(lcddev.width/2,yoff+r,r*2,d);//显示指针时钟表盘 calendar_date_refresh(); //加载日历 tempdate=calendar.w_date;//天数暂存器 gui_phy.back_color=BLACK; gui_show_ptchar(xoff+70-4,TIME_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,':',0); //":" gui_show_ptchar(xoff+150-4,TIME_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,':',0); //":" } while(rval==0) { RTC_Get(); //更新时间 if(system_task_return)break;//需要返回 if(second!=calendar.sec) //秒钟改变了 { second=calendar.sec; calendar_circle_clock_showtime(lcddev.width/2,yoff+r,r*2,d,calendar.hour,calendar.min,calendar.sec);//指针时钟显示时间 gui_phy.back_color=BLACK; gui_show_num(xoff+10,TIME_TOPY,2,GBLUE,60,calendar.hour,0X80); //显示时 gui_show_num(xoff+90,TIME_TOPY,2,GBLUE,60,calendar.min,0X80); //显示分 gui_show_num(xoff+170,TIME_TOPY,2,GBLUE,60,calendar.sec,0X80); //显示秒 if(t%2==0)//等待2秒钟 { if(TEMP_SEN_TYPE)temperate=Get_Temp();//得到内部温度传感器的温度值,0.1℃ else temperate=DS18B20_Get_Temp();//得到18b20温度 if(temperate<0)//温度为负数的时候,红色显示 { POINT_COLOR=RED; temperate=-temperate; //改为正温度 }else POINT_COLOR=BRRED; //正常为棕红色字体显示 gui_show_num(xoff+90,OTHER_TOPY,2,GBLUE,60,temperate/10,0X80); //XX gui_show_ptchar(xoff+150,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,'.',0); //"." gui_show_ptchar(xoff+180-15,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,temperate%10+'0',0);//显示小数 gui_show_ptchar(xoff+210-10,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,95+' ',0);//显示℃ if(t>0)t=0; } if(calendar.w_date!=tempdate) { calendar_date_refresh(); //天数变化了,更新日历. tempdate=calendar.w_date; //修改tempdate,防止重复进入 } t++; } delay_ms(20); }; while(tp_dev.sta&TP_PRES_DOWN)tp_dev.scan(0);//等待TP松开. gui_memex_free(asc2_s6030); //删除申请的内存 asc2_s6030=0; //清零 gui_memin_free(f_calendar); //删除申请的内存 POINT_COLOR=BLUE; BACK_COLOR=WHITE ; return rval; }
int main(void) { // u8 key; // u16 i=0; u16 adc_91000,adc_91200,reg_read_data=0,reg_write_data=0; float LMP91000_VOUT,LMP91200_VOUT,Temp_Integer,Temp_Decimal; short temp; u8 read_val[5] = {0xff}; u8 status = TI_LMP91000_NOT_READY; SystemInit(); delay_init(72); //延时初始化 NVIC_Configuration(); uart_init(9600); LED_Init(); KEY_Init(); Adc_Init(); IIC_Init(); //IIC初始化 LMP91200_Init(); //初始化PH delay_ms(500); printf("\nHello XXL"); /************************************************************ * 溶氧电极初始化及数据采集 ************************************************************/ LMP91000_ENABLE(); // enable LM while (status == TI_LMP91000_NOT_READY) // wait while device is not ready status = LMP91000_ReadOneByte(TI_LMP91000_STATUS_REG); // Read device ready status read_val[0] = LMP91000_ReadOneByte(TI_LMP91000_LOCK_REG); // Read from lock register default value 0x01 read_val[1] = LMP91000_ReadOneByte(TI_LMP91000_TIACN_REG); // Read TIA control register default value 0x03 read_val[2] = LMP91000_ReadOneByte(TI_LMP91000_REFCN_REG); // Read Reference control register default value 0x20 read_val[3] = LMP91000_ReadOneByte(TI_LMP91000_MODECN_REG); // Read Mode control register default value 0x00 LMP91000_WriteOneByte(TI_LMP91000_LOCK_REG, TI_LMP91000_WRITE_UNLOCK); // unlock the registers for write LMP91000_WriteOneByte(TI_LMP91000_TIACN_REG, TIACN_NEW_VALUE); // Modify TIA control register LMP91000_WriteOneByte(TI_LMP91000_REFCN_REG, REFCN_NEW_VALUE); // Modify REF control register LMP91000_WriteOneByte(TI_LMP91000_MODECN_REG, MODECN_NEW_VALUE); // Modify MODE control register read_val[1] = LMP91000_ReadOneByte(TI_LMP91000_TIACN_REG); // Read to confirm register is modified read_val[2] = LMP91000_ReadOneByte(TI_LMP91000_REFCN_REG); // Read to confirm register is modified read_val[3] = LMP91000_ReadOneByte(TI_LMP91000_MODECN_REG); // Read to confirm register is modified read_val[4] = LMP91000_ReadOneByte(TI_LMP91000_STATUS_REG); // test if write/read values match if (read_val[1] == TIACN_NEW_VALUE) { // while (1) // no error: blink LED continuously // { delay_ms(500); LED1=!LED1;//绿灯闪烁 // } } else { delay_ms(500); LED0=!LED0;//红灯闪烁 // error } // 获取LMP91000输出电压 // while(1) // { adc_91000=Get_Adc(ADC_Channel_8); LMP91000_VOUT=(float)adc_91000*(3.3/4096); LMP91000_VOUT=LMP91000_VOUT; printf("\n\nDO=%fv ",LMP91000_VOUT); temp=DS18B20_Get_Temp(); if(temp<0) { temp=-temp; } Temp_Integer=temp/10; Temp_Integer=Temp_Integer; //整数 Temp_Decimal=temp%10; Temp_Decimal=Temp_Decimal; //小数 printf(" Temp=%f.%fc " __TIME__ "",Temp_Integer,Temp_Decimal); delay_ms(1000); // } LMP91000_WriteOneByte(TI_LMP91000_LOCK_REG, TI_LMP91000_WRITE_LOCK); // lock the registers LMP91000_DISABLE(); /************************************************************ * PH电极初始化及数据采集,无论在空气,碱水,酸水中vout总是1.420~1.429,可能电极坏掉 ************************************************************/ Clr_LMP91200_CSN; reg_write_data = TI_LMP91200_CONFIG_REG_TEST_VALUE; // value to write reg_read_data = SPIx_ReadWriteByte(reg_write_data); // Write to config register, read old value reg_read_data = SPIx_ReadWriteByte(reg_write_data); // Write again to read previous update reg_read_data = SPIx_ReadWriteByte(reg_write_data); // Write again to read previous update,if not read this time,bit-15 will be wrong // Set_LMP91200_CSN; while(1) // test if write/read values match { if (reg_write_data == reg_read_data) { adc_91200=Get_Adc(ADC_Channel_9); LMP91200_VOUT=(float)adc_91200*(3.3/4096); LMP91200_VOUT=LMP91200_VOUT; LED1=!LED1; //正确则绿灯亮 delay_ms(500); } else { LED0=!LED0; //错误则黄灯亮 delay_ms(300); } } /************************************************************ * 温度传感器初始化及数据采集 ************************************************************/ while(DS18B20_Init())//初始化DS18B20,兼检测18B20 { delay_ms(600); // error_report();//DS18B20 未连接 } while(1) { temp=DS18B20_Get_Temp(); if(temp<0) { temp=-temp; } Temp_Integer=temp/10; Temp_Integer=Temp_Integer; //整数 Temp_Decimal=temp%10; Temp_Decimal=Temp_Decimal; //小数 delay_ms(500); LED1=!LED1;//DS1闪烁 } /************************************************************ * 按键扫描 ************************************************************/ #if 0 while(1) { key=KEY_Scan(); if(key==1)//KEY0按下,写入24C02 { ; } if(key==3)//KEY_UP按下,读取字符串并显示 { ; } i++; delay_ms(10); } #endif }