//写入日历闹钟信息 //alarm:闹钟信息 void calendar_save_para(_alarm_obj * alarm) { OS_CPU_SR cpu_sr=0; alarm->ringsta&=0X7F; //清空最高位 OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) AT24CXX_Write(SYSTEM_PARA_SAVE_BASE+sizeof(_system_setings),(u8*)alarm,sizeof(_alarm_obj)); OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) }
int main(void) { u8 key; u16 i=0; u8 datatemp[SIZE]; SystemInit(); delay_init(72); //延时初始化 NVIC_Configuration(); uart_init(9600); LED_Init(); KEY_Init(); LCD_Init(); AT24CXX_Init(); //IIC初始化 POINT_COLOR=RED;//设置字体为蓝色 LCD_ShowString(60,50,"Mini STM32"); LCD_ShowString(60,70,"IIC TEST"); LCD_ShowString(60,90,"ATOM@ALIENTEK"); LCD_ShowString(60,110,"2011/1/1"); while(AT24CXX_Check())//检测不到24c02 { LCD_ShowString(60,130,"24C02 Check Failed!"); delay_ms(500); LCD_ShowString(60,130,"Please Check! "); delay_ms(500); LED0=!LED0;//DS0闪烁 } LCD_ShowString(60,130,"24C02 Ready!"); //显示提示信息 LCD_ShowString(60,150,"KEY0:Write KEY2(WK_UP):Read"); POINT_COLOR=BLUE;//设置字体为蓝色 while(1) { key=KEY_Scan(); if(key==1)//KEY0按下,写入24C02 { LCD_Fill(0,170,239,319,WHITE);//清除半屏 LCD_ShowString(60,170,"Start Write 24C02...."); AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE); LCD_ShowString(60,170,"24C02 Write Finished!");//提示传送完成 } if(key==3)//KEY_UP按下,读取字符串并显示 { LCD_ShowString(60,170,"Start Read 24C02.... "); AT24CXX_Read(0,datatemp,SIZE); LCD_ShowString(60,170,"The Data Readed Is: ");//提示传送完成 LCD_ShowString(60,190,datatemp);//显示读到的字符串 } i++; delay_ms(10); if(i==20) { LED0=!LED0;//提示系统正在运行 i=0; } } }
void FSM_Proc(u8 key) { if(key!=0) { Key_Value=key; DISP_Update=1; goto Parse; } Key_Value=update_key(); if(Key_Value==0) { return ; } DISP_Update=1; /****GoBack******/ Parse: if(Key_Value==MENU_KEY_B) { Key_Cmd_Length=0; if(FSM_VAL==DISP_MENU41||FSM_VAL==DISP_MENU42) { FSM_VAL=0; return ; } if(GETMENU4!=MENU_NULL) { CLEAR_MENU(4); }else if(GETMENU3!=MENU_NULL) { CLEAR_MENU(3); }else if(GETMENU2!=MENU_NULL) { CLEAR_MENU(2); } else if(GETMENU1!=MENU_NULL) { CLEAR_MENU(1); } return ; } if(GETMENU4!=MENU_NULL) { if(Key_Value==MENU_KEY_Y&&Key_Cmd_Length>0) { aPoints[curve_current_len++].y=Key_Cmd_Length==2?Key_Cmd_Value[0]*10+Key_Cmd_Value[1]:Key_Cmd_Value[0]; Key_Cmd_Length=0; FSM_VAL=DISP_MENU41; } else if(IS_KEY_NUM(Key_Value)) { if(Key_Cmd_Length==2) { return ; } Key_Cmd_Value[Key_Cmd_Length++]=Key_Value-'0'; } }else if(GETMENU3!=MENU_NULL) { if(Key_Value==MENU_KEY_Y&&Key_Cmd_Length>0) { if(getValue()!=-1) { if(curve_current_len>0) { if(getValue()<=aPoints[curve_current_len-1].x) { goto BACK2MENU41; } } aPoints[curve_current_len].x=getValue(); SET_MENU(4,1); }else { BACK2MENU41: FSM_VAL=DISP_MENU41; } Key_Cmd_Length=0; } else if(IS_KEY_NUM(Key_Value)) { if(Key_Cmd_Length==4) { return ; } Key_Cmd_Value[Key_Cmd_Length++]=Key_Value-'0'; } }else if(GETMENU2!=MENU_NULL)//已点二级菜单 { switch(GETMENU1)// { case MENU1_SET_ALARM: switch(GETMENU2) { case MENU_SUB1: if(set_var(Key_Value,&_tmp)) { PID_alarm_MIN=_tmp; RESTRAINALARM_MIN(PID_alarm_MIN) RESTRAIN_LH(PID_alarm_MIN,PID_alarm_MAX); AT24CXX_Write(TARGET_MIN_STORGE_ADDR,(u8*)&PID_alarm_MIN,sizeof(PID_alarm_MIN)); } break; case MENU_SUB2: if(set_var(Key_Value,&_tmp)) { PID_alarm_MAX=_tmp; RESTRAINALARM_MAX(PID_alarm_MAX) RESTRAIN_LH(PID_alarm_MIN,PID_alarm_MAX); AT24CXX_Write(TARGET_MAX_STORGE_ADDR,(u8*)&PID_alarm_MAX,sizeof(PID_alarm_MAX)); } break; } break; case MENU1_SET_HEATER: switch(GETMENU2) { case MENU_SUB1: set_var(Key_Value,&PID_output); break; } case MENU1_SET_CURVE: switch(GETMENU2) { case MENU_SUB1: if(Key_Value==MENU_KEY_Y) { SET_MENU(3,1); }else if(Key_Value==MENU_KEY_2) { if(Curve_Top>1) { Curve_Top--; } }else if(Key_Value==MENU_KEY_8||Key_Value==MENU_KEY_5) { if(Curve_Top<curve_current_len) { Curve_Top++; } } break; case MENU_SUB2: break; case MENU_SUB3: break; } break; } }else if(GETMENU1!=MENU_NULL)//已点一级菜单 { switch(GETMENU1) { case MENU1_SET_ALARM: if(Key_Value==MENU_KEY_1||Key_Value==MENU_KEY_2) { SET_MENU(2,Key_Value-'0'); } break; case MENU1_SET_TEMP: //输入的是设定温度 if(set_var(Key_Value,&PID_target)) { AT24CXX_Write(TARGET_STORGE_ADDR,(u8*)&PID_target,sizeof(PID_target)); } break; case MENU1_SET_HEATER: //输入的是加热功率 if(Key_Value==MENU_KEY_1) { forceMANUAL=1; PID.SetMode(MANUAL); SET_MENU(2,Key_Value-'0'); }else if(Key_Value==MENU_KEY_2) { forceMANUAL=0; PID.SetMode(AUTOMATIC); FSM_VAL=0; } //set_var(Key_Value,&PID_output); break; case MENU1_SET_CURVE: if(Key_Value==MENU_KEY_1||Key_Value==MENU_KEY_2||Key_Value==MENU_KEY_3) { SET_MENU(2,Key_Value-'0'); } if(Key_Value==MENU_KEY_2) { AccordingCurve=1; curveStartTime=millis(); } break; } }else//IDLE状态 { if(Key_Value==MENU_KEY_1||Key_Value==MENU_KEY_2||Key_Value==MENU_KEY_3||Key_Value==MENU_KEY_4) { SET_MENU(1,Key_Value-'0'); } } }