//时间显示模式 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; }
/******************************************************************************* 函数名: 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; } }