//时间显示模式    
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;
}
Esempio n. 2
0
/*******************************************************************************
函数名: Status_Tran 
函数作用: 根据按键、温度判断等控制状态转换
输入参数: NULL
返回参数: NULL
*******************************************************************************/
void Status_Tran(void)//状态转换
{
    static u16 init_waitingtime = 0;//初始待机时间标志位: 0=> 未初始化,1=>已初始化
    static u8 back_prestatus = 0;
    s16 heat_timecnt = 0,wk_temp;
    u16 mma_active;
    
    switch (Get_CtrlStatus()) {
    case IDLE:
        switch(Get_gKey()) {
        case KEY_V1:
            if(gIs_restartkey != 1) {
                	if(Read_Vb(1) < 4) {
                	Set_CtrlStatus(TEMP_CTR);
                	init_waitingtime    = 0;
                	TEMPSHOW_TIMER  = 0;
                  UI_TIMER = 0;
                  G6_TIMER = 0;
                }
            }
            break;
        case KEY_V2:
            if(gIs_restartkey != 1) {
                Set_CtrlStatus(THERMOMETER);
                UI_TIMER = 0;
                Set_LongKeyFlag(1);
            }
            break;
        case KEY_CN|KEY_V3:
            break;
        }
        if(gIs_restartkey && (KD_TIMER == 0)) {
            gIs_restartkey = 0;
            Set_gKey(NO_KEY);
        }
        if(Read_Vb(1) == 0){
            if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
            Set_CtrlStatus(ALARM);
        }
        if(gPre_status != WAIT && gPre_status != IDLE){
            G6_TIMER = device_info.idle_time;
            Set_gKey(NO_KEY);
            gPre_status = IDLE;
        }
        break;
    case TEMP_CTR:
        switch(Get_gKey()) {
        case KEY_CN|KEY_V1:
        case KEY_CN|KEY_V2:
            Set_HeatingTime(0);
            Set_CtrlStatus(TEMP_SET);
            HEATING_TIMER       = 0;
            EFFECTIVE_KEY_TIMER = 500;
            break;
        case KEY_CN|KEY_V3:
            Set_HeatingTime(0);
            Set_LongKeyFlag(0);
            Set_CtrlStatus(IDLE);
            gPre_status = TEMP_CTR;
            gIs_restartkey = 1;
            KD_TIMER = 50; //
            break;
        }
        
        if(Read_Vb(1) >= 4) {
            Set_HeatingTime(0);
            Set_LongKeyFlag(0);
            Set_CtrlStatus(IDLE);
            gPre_status = TEMP_CTR;
            gIs_restartkey = 1;
            KD_TIMER = 50; // 2秒
        }
        
        wk_temp = device_info.t_work;
        if(HEATING_TIMER == 0) {
            gTemp_data    = Get_Temp(wk_temp);
            heat_timecnt  = Heating_Time(gTemp_data,wk_temp);  //计算加热时间
            Set_HeatingTime(heat_timecnt);
            HEATING_TIMER = HEATINGCYCLE;
        }
        if(Get_HeatingTime() == 0) {
            HEATING_TIMER = 0;
        }


        mma_active = Get_MmaShift();
        if(mma_active == 0) { //MMA_active = 0 ==> static ,MMA_active = 1 ==>move
            if(init_waitingtime == 0) {
                init_waitingtime    = 1;
                ENTER_WAIT_TIMER = device_info.wait_time;
            }
            if((init_waitingtime != 0) && (ENTER_WAIT_TIMER == 0)) {
                gHt_flag      = 0;
                UI_TIMER     = 0;
                Set_HeatingTime(0);
                Set_gKey(0);
                G6_TIMER = device_info.idle_time;
                Set_CtrlStatus(WAIT);
            }
        } else {
            init_waitingtime = 0;
        }
        if(Get_AlarmType() > NORMAL_TEMP) {   //////////////////警告
            if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
            Set_CtrlStatus(ALARM);
        }
        break;
    case WAIT:
        wk_temp = device_info.t_standby;
        if(device_info.t_standby > device_info.t_work) { //休眠温度比工作温度高
            wk_temp = device_info.t_work;
        }
        if(HEATING_TIMER == 0) {
            gTemp_data    = Get_Temp(wk_temp);
            heat_timecnt  = Heating_Time(gTemp_data,wk_temp);  //计算加热时间
            Set_HeatingTime(heat_timecnt);
            HEATING_TIMER = 30;
        }
        
        if(Read_Vb(1) >= 4) {
            Set_HeatingTime(0);
            Set_LongKeyFlag(0);
            Set_CtrlStatus(IDLE);
            G6_TIMER = device_info.idle_time;
            gPre_status = WAIT;
            gIs_restartkey = 1;
            KD_TIMER = 50; // 2秒
        }
        
        if(G6_TIMER == 0) { //进入待机
            Set_HeatingTime(0);
            Set_LongKeyFlag(0);
            gIs_restartkey = 1;
            KD_TIMER = 200; // 2秒
            gPre_status = WAIT;
            Set_CtrlStatus(IDLE);
        }
        
        mma_active = Get_MmaShift();
        if(mma_active == 1 || Get_gKey() != 0) {
            UI_TIMER      = 0;
            G6_TIMER      = 0;
            init_waitingtime = 0;
            Set_CtrlStatus(TEMP_CTR);
        }
        
        if(Get_AlarmType() > NORMAL_TEMP) {   //////////////////警告
            if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
            Set_CtrlStatus(ALARM);
        }
        break;
    case TEMP_SET:
        if(EFFECTIVE_KEY_TIMER == 0) {
            Set_CtrlStatus(TEMP_CTR);
            TEMPSHOW_TIMER = 0;
        }
        break;
    case THERMOMETER:
        if(KD_TIMER > 0) {
            Set_gKey(NO_KEY);
            break;
        }
        switch(Get_gKey()) {
        case KEY_CN|KEY_V1:
        case KEY_CN|KEY_V2:
            back_prestatus = 1;
            break;
        case KEY_CN|KEY_V3:
            Zero_Calibration();
            if(Get_CalFlag() == 1) {
                Disk_BuffInit();
                Config_Analysis();         // 启动虚拟U盘
            }
            KD_TIMER = 200; //20150717 修改
            break;
        default:
            break;
        }
        if(back_prestatus == 1) {
            back_prestatus = 0;
            Set_HeatingTime(0);
            Set_CtrlStatus(IDLE);
            gPre_status = THERMOMETER;
            gIs_restartkey = 1;
            Set_LongKeyFlag(0);
            KD_TIMER = 50; //
        }
        break;
    case ALARM:
        switch(Get_AlarmType()) {
        case HIGH_TEMP:
        case SEN_ERR:
            wk_temp     = device_info.t_work;
            gTemp_data  = Get_Temp(wk_temp);
            if(Get_AlarmType() == NORMAL_TEMP) {
                Set_CtrlStatus(TEMP_CTR);
                Set_UpdataFlag(0);
            }
            break;
        case HIGH_VOLTAGE:
        case LOW_VOLTAGE:
            if(Read_Vb(1) >= 1 && Read_Vb(1) <= 3) {
                Set_HeatingTime(0);
                Set_LongKeyFlag(0);
                gIs_restartkey = 1;
                UI_TIMER = 2; // 2秒
                gPre_status = THERMOMETER;
                Set_CtrlStatus(IDLE);
            }
            break;
        }

        if(Get_HeatingTime != 0) {
            Set_HeatingTime(0) ;                          //马上停止加热
            HEAT_OFF();
        }
        break;
    default:
        break;
    }
}