//写入日历闹钟信息
//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();		//退出临界区(可以被中断打断)
} 
Esempio n. 2
0
 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;
		}		   
	}
 }
Esempio n. 3
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');
		}
	}
}