Exemplo n.º 1
0
/******************************************************
函数名称: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;
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
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);
	}
}
Exemplo n.º 4
0
//时间显示模式    
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;
}
Exemplo n.º 5
0
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
 }