Exemplo n.º 1
0
/*
 ***************************************************************
 * 名称: beep_task 
 * 功能: 蜂鸣器任务
 * 输入: 1. *pdata:任务参数
 * 输出: NULL 
 * 返回: NULL 
 * 描述: 无 
 ***************************************************************
 */
static void beep_task(void *pdata)
{		
	u8 flag = 0;
	
	Beep_On(100);
	Wt588d16_Play(0);	

	Show_StrInLine(1, 0, "江苏晶浩有限");
	Show_StrInLine(2, 0, "申通快递详情单");
	Show_StrInLine(3, 0, "延中盐汽水");
	Show_StrInLine(4, 0, "liuchao");
	
	oled_Show_StrInLine(1, 0, "江苏晶浩有限");
	oled_Show_StrInLine(2, 0, "申通快递详情单");
	oled_Show_StrInLine(3, 0, "延中盐汽水");
	oled_Show_StrInLine(4, 0, "liuchao:刘超");
	
	if (flag == 1)
		WriteCharToFlash();
	
	if (flag == 1)
		RTC_Set(2015, 5, 13, 16, 50, 00);
		
	while (1)
	{
		userCardCheck();
		
		sprintf(dateshow, "%4d-%2d-%2d", calendar.w_year, calendar.w_month, calendar.w_date);
		sprintf(timeshow, "%2d:%2d:%2d", calendar.hour, calendar.min, calendar.sec);
		Show_StrInLine(3, 0, dateshow);
		Show_StrInLine(4, 0, timeshow);		

		OSTimeDlyHMSM(0, 0, 0, 300);
	}									 
}
Exemplo n.º 2
0
uint08 RTC_Init(void)
{
    //检查是不是第一次配置时钟
    uint08 temp=0;

    if ( BKP_ReadBackupRegister(BKP_DR1) != 0x5050 )      //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);    //使能PWR和BKP外设时钟   
        PWR_BackupAccessCmd(ENABLE);    //使能后备寄存器访问 
        BKP_DeInit();   //复位备份区域 	
        RCC_LSEConfig(RCC_LSE_ON);  //设置外部低速晶振(LSE),使用外设低速晶振
        while ( RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp< 252) //检查指定的RCC标志位设置与否,等待低速晶振就绪
        {
            temp++;
            //delay_ms(10);
            //OSTimeDlyHMSM(0, 0, 0, 10); 
        }
        if ( temp>=250 )
        {
          return 1;//初始化时钟失败,晶振有问题	 
        }
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);     //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
        RCC_RTCCLKCmd(ENABLE);  //使能RTC时钟  
        RTC_WaitForLastTask();  //等待最近一次对RTC寄存器的写操作完成
        RTC_WaitForSynchro();       //等待RTC寄存器同步  
        RTC_ITConfig(RTC_IT_SEC, ENABLE);       //使能RTC秒中断
        RTC_WaitForLastTask();  //等待最近一次对RTC寄存器的写操作完成
        RTC_EnterConfigMode();/// 允许配置	
        RTC_SetPrescaler(32767); //设置RTC预分频的值
        RTC_WaitForLastTask();  //等待最近一次对RTC寄存器的写操作完成
        RTC_Set(2009,12,2,10,0,55);  //设置时间	
        RTC_ExitConfigMode(); //退出配置模式  
        BKP_WriteBackupRegister(BKP_DR1, 0X5050);   //向指定的后备寄存器中写入用户程序数据
    }
    else//系统继续计时
    {

        RTC_WaitForSynchro();   //等待最近一次对RTC寄存器的写操作完成
        RTC_ITConfig(RTC_IT_SEC, ENABLE);   //使能RTC秒中断
        RTC_WaitForLastTask();  //等待最近一次对RTC寄存器的写操作完成
    }
    RTC_NVIC_Config();//RCT中断分组设置		    				     
    RTC_Get();//更新时间	
    return 0; //ok

}                           
Exemplo n.º 3
0
//自动设置时间为编译器时间   
void Auto_Time_Set(void)
{
	u8 temp[3];
	u8 i;
	u8 mon,date;
	u16 year;
	u8 sec,min,hour;
	for(i=0;i<3;i++)temp[i]=COMPILED_DATE[i];   
	for(i=0;i<12;i++)if(str_cmpx((u8*)Month_Tab[i],temp,3))break;	
	mon=i+1;//得到月份
	if(COMPILED_DATE[4]==' ')date=COMPILED_DATE[5]-'0'; 
	else date=10*(COMPILED_DATE[4]-'0')+COMPILED_DATE[5]-'0';  
	year=1000*(COMPILED_DATE[7]-'0')+100*(COMPILED_DATE[8]-'0')+10*(COMPILED_DATE[9]-'0')+COMPILED_DATE[10]-'0';	   
	hour=10*(COMPILED_TIME[0]-'0')+COMPILED_TIME[1]-'0';  
	min=10*(COMPILED_TIME[3]-'0')+COMPILED_TIME[4]-'0';  
	sec=10*(COMPILED_TIME[6]-'0')+COMPILED_TIME[7]-'0';  
	RTC_Set(year,mon,date,hour,min,sec)	;
} 
Exemplo n.º 4
0
//实时时钟配置
//初始化RTC时钟,同时检测时钟是否工作正常
//BKP->DR1用于保存是否第一次配置的设置
//返回0:正常
//其他:错误代码
u8 RTC_Init(void)
{
	//检查是不是第一次配置时钟
	u8 temp=0;
	if(BKP->DR1!=0X5050)//第一次配置
	{	 
	  	RCC->APB1ENR|=1<<28;     //使能电源时钟	    
		RCC->APB1ENR|=1<<27;     //使能备份时钟	    
		PWR->CR|=1<<8;           //取消备份区写保护
		RCC->BDCR|=1<<16;        //备份区域软复位	   
		RCC->BDCR&=~(1<<16);     //备份区域软复位结束	  	 
	    RCC->BDCR|=1<<0;         //开启外部低速振荡器 
	    while((!(RCC->BDCR&0X02))&&temp<250)//等待外部时钟就绪	 
		{
			temp++;
			delay_ms(10);
		};
		if(temp>=250)return 1;//初始化时钟失败,晶振有问题	   
		RCC->BDCR|=1<<8; //LSI作为RTC时钟 	    
		RCC->BDCR|=1<<15;//RTC时钟使能	  
	  	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成	 
    	while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
    	RTC->CRH|=0X01;  		  //允许秒中断
    	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成	 
		RTC->CRL|=1<<4;           //允许配置	 
		RTC->PRLH=0X0000;
		RTC->PRLL=32767;          //时钟周期设置(有待观察,看是否跑慢了?)理论值:32767	
		RTC_Set(2014,3,8,22,10,55);  //设置时间	  
		RTC->CRL&=~(1<<4);           //配置更新
		while(!(RTC->CRL&(1<<5)));   //等待RTC寄存器操作完成		 									  
		BKP->DR1=0X5050;  
	 	printf("FIRST TIME\n");
	}else//系统继续计时
	{
    	while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
    	RTC->CRH|=0X01;  		  //允许秒中断
    	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
		printf("OK\n");
	}		    				  
	MY_NVIC_Init(0,0,RTC_IRQn,2);//优先级设置    
	RTC_Get();//更新时间 
	return 0; //ok
}		 				    
Exemplo n.º 5
0
u8 RTC_Init(void)
	{
	//检查是不是第一次配置时钟
	u8 temp=0;
	RTC_NVIC_Config();
	//if(BKP->DR1!=0X5050)//第一次配置
	if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)		//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
		{	 			
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);	//使能PWR和BKP外设时钟   
		PWR_BackupAccessCmd(ENABLE);	//使能RTC和后备寄存器访问 
		BKP_DeInit();	//将外设BKP的全部寄存器重设为缺省值 	
		RCC_LSEConfig(RCC_LSE_ON);	//设置外部低速晶振(LSE),使用外设低速晶振
		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)	//检查指定的RCC标志位设置与否,等待低速晶振就绪
			{
			temp++;
			delay_ms(10);
			}
		if(temp>=250)return 1;//初始化时钟失败,晶振有问题	    
		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
		RCC_RTCCLKCmd(ENABLE);	//使能RTC时钟  
		RTC_WaitForSynchro();		//等待最近一次对RTC寄存器的写操作完成
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		RTC_ITConfig(RTC_IT_SEC, ENABLE);		//使能RTC秒中断
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		RTC_SetPrescaler(32767); //设置RTC预分频的值
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		RTC_Set(2009,12,2,10,0,55);  //设置时间	  
		BKP_WriteBackupRegister(BKP_DR1, 0X5050);	//向指定的后备寄存器中写入用户程序数据
		}
	else//系统继续计时
		{

		RTC_WaitForSynchro();	//等待最近一次对RTC寄存器的写操作完成
		RTC_ITConfig(RTC_IT_SEC, ENABLE);	//使能RTC秒中断
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		}		    				     
	RTC_Get();//更新时间	
	RCC_ClearFlag();	//清除RCC的复位标志位
	return 0; //ok
	}
//extern void flash_write_time_volitage(u8 addr_index,uint16_t volitage,u8 year_H,u8 year_L,u8 month_H,u8 month_L,u8 day_H,u8 day_L,u8 hh_H,u8 hh_L,u8 mm_H,u8 mm_L,u8 ss_H,u8 ss_L ) ;
void operating_12864_system (void)    //按键操作和界面切换
{ 
	 u16 u16_WaitForOscSource,startv=0;
    
	if(rcc_flag==0)
	{
		if(k1==key_ok)
		{
			k1=key_none;
			rcc_flag=1;
			DebugMenu(1);
		}
		if(k1==key_cancel)
		{
			k1=key_none;
			flag_i=1;
			voltage=0;
      Alarm_flag_1=0;
      BUZZER_off;
      Fault_led_off;
      Relay_off;
// 			buzzer_tick_flag=1;
		}
	}
	if(rcc_flag==1)
	{
// 		Delay_ms(1000);
	// 		flag_system=1;
		if(flag_debug==0)
		{
			flag_debug=1;
		}
			switch (k1)
			{
				case key_down:
							k1=key_none;
						 flag_debug++; 
						 if(flag_debug>4)
							{
								flag_debug=1;
							}	
							DebugMenu(flag_debug);
             //	Delay_ms(20);
              						
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=4;
							}
							DebugMenu(flag_debug);
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						 rcc_flag=0;
							flag_debug=1;
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							k1=key_none;
							
							if(flag_debug==1)
							{
								rcc_flag=21;
								flag_debug=1;
								SecondSet(flag_debug);
							}
							if(flag_debug==2)
							{
								rcc_flag=22;
								flag_debug=1;
								SecondSystemDebug(flag_debug);
							}
							if(flag_debug==3)
							{
								rcc_flag=23;
                fault_num=flash_num<0?0:flash_num;
//                 if(flash_num<0)
//                 {
//                   fault_num=0;
//                 }
//                 else{
//                   fault_num=flash_num;
//                 }
								flash_read_time_volitage(start_addr+fault_num*14);
								Second_Fault_record(frecord.voltage,fault_num+1,frecord.year_H,frecord.year_L,frecord.month_H,frecord.month_L,frecord.day_H,frecord.day_L,frecord.hh_H,frecord.hh_L,frecord.mm_H,frecord.mm_L,frecord.ss_H,frecord.ss_L);
//                 flash_read_time_volitage(start_addr+14*fault_num);
//                 Second_Fault_record(frecord.voltage,fault_num+1,frecord.year_H,frecord.year_L,frecord.month_H,frecord.month_L,frecord.day_H,frecord.day_L,frecord.hh_H,frecord.hh_L,frecord.mm_H,frecord.mm_L,frecord.ss_H,frecord.ss_L);
                
							}
							if(flag_debug==4)
							{
								rcc_flag=24;
								Second_clear_fault_records();
							}
				break;
			}
		}
		if(rcc_flag==21)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
							k1=key_none;
						 flag_debug++; 
						 if(flag_debug>2)
							{
								flag_debug=1;
							}	
							SecondSet(flag_debug);
             //	Delay_ms(20);
              						
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=2;
							}
							SecondSet(flag_debug);
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						flag_debug=0;
						 rcc_flag=1;
						DebugMenu(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							k1=key_none;
							
					if(flag_debug==1)
					{
							rcc_flag=31;
							ThirdSystemSetting(1);
					}
					if(flag_debug==2)
					{
             flag_debug=1;
							rcc_flag=32;
							ThirdBaudRateSetting(flag_debug,Device_Add,Band_Rate,Data_bits,Stop_bits);
					}
							
				break;
			}	
		}
		if(rcc_flag==22)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
							k1=key_none;
						 flag_debug++; 
						 if(flag_debug>4)
							{
								flag_debug=1;
							}	
							SecondSystemDebug(flag_debug);
             //	Delay_ms(20);
              						
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=4;
							}
							SecondSystemDebug(flag_debug);
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						flag_debug=1;
						 rcc_flag=1;
				   //  Delay_ms(20);
				     k1=key_none;
				     DebugMenu(1);
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							k1=key_none;
						if(flag_debug==1)
						{
							flag_debug=1;
							rcc_flag=33;
							ThirdChange();
						}
						if(flag_debug==2)
						{
							flag_debug=1;
							rcc_flag=34;
							ThirdCorrect();
						}
						if(flag_debug==3)
						{
							flag_debug=1;
							rcc_flag=35;
							ThirdCheck();
						}
						if(flag_debug==4)
						{
							flag_debug=1;
							rcc_flag=36;
							ThirdReguration(1,1,1,1);
						}
							
				break;
			}	
		}
		if(rcc_flag==23)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down: 
            fault_num++;
            if(fault_num>=50)
            {
              fault_num=0;
            }
            flash_read_time_volitage(start_addr+14*fault_num);
						Second_Fault_record(frecord.voltage,fault_num+1,frecord.year_H,frecord.year_L,frecord.month_H,frecord.month_L,frecord.day_H,frecord.day_L,frecord.hh_H,frecord.hh_L,frecord.mm_H,frecord.mm_L,frecord.ss_H,frecord.ss_L);
//                 fault_num=flash_num; 
            
            
            k1=key_none;
				break;		
				case key_up:
            fault_num--;
            if(fault_num<0)
            {
              fault_num=49;
            }
					 flash_read_time_volitage(start_addr+14*fault_num);
					 Second_Fault_record(frecord.voltage,fault_num+1,frecord.year_H,frecord.year_L,frecord.month_H,frecord.month_L,frecord.day_H,frecord.day_L,frecord.hh_H,frecord.hh_L,frecord.mm_H,frecord.mm_L,frecord.ss_H,frecord.ss_L);
//                 fault_num=flash_num; 
            
            
            k1=key_none;    							
				break;
				case key_cancel:
						 rcc_flag=1;
				   //  Delay_ms(20);
							flag_debug=1;
				     k1=key_none;
						DebugMenu(1);
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							k1=key_none;
						//	rcc_flag=2;
							
							
				break;
			}	
		}
		if(rcc_flag==24)
		{
			//flag_debug=1;
				switch (k1)
			{
				
				case key_cancel:
						 rcc_flag=1;
							flag_debug=1;
				   //  Delay_ms(20);
				     k1=key_none;
						DebugMenu(1);
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							k1=key_none;
//               fi++;
							rcc_flag=2;
                //flash_cache[300]=0;
//  							for(fi=0;fi<255;fi++)
//               {
//                 flash_cache[fi]=0;
//               }

//               Delay_ms(100);
//               flash_write_time_volitage(0,0,0,0,0,0,0,0,0,0,0,0,0,0 ) ;
//               Delay_ms(500);
//               flash_write(0xffff,flash_num_addr);
							
				break;
			}	
		}
		if(rcc_flag==31)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
						 k1=key_none;
						 flag_debug++; 
						 if(flag_debug>2)
							{
								flag_debug=1;
							}	
							ThirdSystemSetting(flag_debug);
             //	Delay_ms(20);
              						
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=2;
							}
							ThirdSystemSetting(flag_debug);
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=21;
						 SecondSet(1);
				   //  Delay_ms(20);
				     k1=key_none;

				timer.sec=ss_H*10+ss_L;
				timer.min=mm_H*10+mm_L;
				timer.hour=hh_H*10+hh_L;
				timer.w_date=day_H*10+day_L;
				timer.w_month=month_H*10+month_L;
				timer.w_year=(year_H*10+year_L)+2000;
				
				RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
 
      /* Allow access to BKP Domain */
      PWR_BackupAccessCmd(ENABLE);
 
      /* Reset Backup Domain */
       BKP_DeInit();
 
      /* Enable LSE */
      RCC_LSEConfig(RCC_LSE_ON);
       for(u16_WaitForOscSource=0;u16_WaitForOscSource<5000;u16_WaitForOscSource++)
           {
           }
      /* Wait till LSE is ready */
      while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
 
      /* Select LSE as RTC Clock Source */
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
 
      /* Enable RTC Clock */
      RCC_RTCCLKCmd(ENABLE);
 
      /* Wait for RTC registers synchronization */
      RTC_WaitForSynchro();
 
      /* Wait until last write operation on RTC registers has finished */
      RTC_WaitForLastTask();
 
      /* Enable the RTC Second */
      RTC_ITConfig(RTC_IT_SEC, ENABLE);
 
      /* Wait until last write operation on RTC registers has finished */
       RTC_WaitForLastTask();
 
      /* Set RTC prescaler: set RTC period to 1sec */
      RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
 
      /* Wait until last write operation on RTC registers has finished */
      RTC_WaitForLastTask();
        BKP_WriteBackupRegister(BKP_DR1, 0x5A5A);
        RTC_Set(timer.w_year,timer.w_month,timer.w_date,timer.hour,timer.min,timer.sec);
				break;
				case key_ok:
							k1=key_none;
							
					if(flag_debug==1)
					{
						  flag_debug=1;
							rcc_flag=41;
							FourStart(start_v);
					}
					if(flag_debug==2)
					{
						  flag_debug=1;
							rcc_flag=42;
							FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);	
					}
							
				break;
			}	
		}
		if(rcc_flag==32)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
						 k1=key_none;
						 flag_debug++; 
						 if(flag_debug>4)
							{
								flag_debug=1;
							}	
							ThirdBaudRateSetting(flag_debug,Device_Add,Band_Rate,Data_bits,Stop_bits);
             //	Delay_ms(20);
              						
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=4;
							}
							ThirdBaudRateSetting(flag_debug,Device_Add,Band_Rate,Data_bits,Stop_bits);
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						 flag_debug=1;
						 rcc_flag=21;
						 SecondSet(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
						 k1=key_none;	
					if(flag_debug==1)
					{
// 						  flag_debug=1;
							rcc_flag=43;	
					} 
          else if(flag_debug==2)
					{
// 						  flag_debug=1;
							rcc_flag=44;
					}
           else if(flag_debug==3)
					{
// 						  flag_debug=1;
							rcc_flag=45;
					}
          else if(flag_debug==4)
					{
// 						  flag_debug=1;
							rcc_flag=46;
					}
							
				break;
			}	
		}
		if(rcc_flag==33)
		{
			//flag_debug=1;
				switch (k1)
			{
				
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=22;
						 SecondSystemDebug(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							
							
				break;
			}	
		}
		if(rcc_flag==34)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
						
              						
				break;		
				case key_up:
						
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=22;
						 SecondSystemDebug(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							
							
				break;
			}	
		}
		if(rcc_flag==35)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
						
              						
				break;		
				case key_up:
						
           //   Delay_ms(20);
              							
				break;
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=22;
						 SecondSystemDebug(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
							
							
				break;
			}	
		}
		if(rcc_flag==36)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
						 k1=key_none;
						 flag_debug++; 
						 if(flag_debug>3)
							{
								flag_debug=1;
							}	
							ThirdReguration(flag_debug,flag_Led,flag_Relay,flag_Buzzer);							
				break;		
				case key_up:
						 k1=key_none;
						 flag_debug--;
						 if(flag_debug==0)
							{
								flag_debug=3;
							}
							ThirdReguration(flag_debug,flag_Led,flag_Relay,flag_Buzzer);								
				break;
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=22;
						 SecondSystemDebug(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
					   k1=key_none;	
						 if(flag_debug==1)              
					  {					  
							++flag_Led;
							if(flag_Led<1)
							{
								flag_Led=2;
              }
							else if(flag_Led>2)
							{
								flag_Led=1;
              }
						ThirdReguration(1,flag_Led,flag_Relay,flag_Buzzer);	
					  }
						if(flag_debug==2)
						{
								++flag_Relay;
							if(flag_Relay<1)
							{
								flag_Relay=2;
              }
							else if(flag_Relay>2)
							{
								flag_Relay=1;
              }
						ThirdReguration(2,flag_Led,flag_Relay,flag_Buzzer);
						}
						if(flag_debug==3)
						{
								++flag_Buzzer;
							if(flag_Buzzer<1)
							{
								flag_Buzzer=2;
              }
							else if(flag_Buzzer>2)
							{
								flag_Buzzer=1;
              }
						ThirdReguration(3,flag_Led,flag_Relay,flag_Buzzer);
						}							
				break;
			}	
		}
    if(rcc_flag==41)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
							 
              if(start_v<=0)
							{
								start_v=0;
							}
				      start_v-=5;
							 FourStart(start_v);
             //	Delay_ms(20);
				      k1=key_none;
              						
				break;		
				case key_up:
							start_v+=5;
							 FourStart(start_v);
           //   Delay_ms(20);
				     k1=key_none;
              							
				break;
				case key_cancel:
              startv=start_v;
						 flag_debug=1;
						 rcc_flag=31;
						 ThirdSystemSetting(1);
				     k1=key_none;
            // flash_write_start_v(start_v);
            flash_write(startv,start_v_addr);
				break;
				case key_ok:
							
							
				break;
			}	
		}
		if(rcc_flag==42)
		{
			//flag_debug=1;
				switch (k1)
			{
				case key_down:
              						
				break;		
				case key_up:
						
              							
				break;
				case key_cancel:
						 	flag_debug=1;
						 rcc_flag=31;
						 ThirdSystemSetting(1);
				   //  Delay_ms(20);
				     k1=key_none;
							//DebugMenu(flag_debug);
				break;
				case key_ok:
					   ++flagTime;
				     if(flagTime > 12)
				     {
				      flagTime = 1;
				     }
              k1=key_none;						 
				break;
			}	
		}
		/*设置时间*/
		       if(flagTime==1)
					 {
						 switch (k1)
			      {
				     case key_down:
              	  --ss_L;
					    	if(ss_L<0)
					        {
					        	ss_L = 9;
					    	  }	
                  FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);	
                  k1=key_none;									
				     break;		
				     case key_up:
						      ++ss_L;
					    	if(ss_L>9)
					        {
					        	ss_L = 0;
					    	  }
                  FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
                  k1=key_none;									
				     break;
            }
					}
					 else if(flagTime==2)
					 {
            	switch (k1)
			      {
				     case key_down:
                  --ss_H;
					    	if(ss_H<0)
					        {
					        	ss_H = 6;
					    	  }	
                  FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);	
                  k1=key_none;										
				     break;		
				     case key_up:
						      ++ss_H;
					    	if(ss_H>6)
					        {
					        	ss_H = 0;
					    	  }
									FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              		 k1=key_none;				
				     break;
            }
           }
					 else if(flagTime==3)
					 {
            	switch (k1)
			      {
				     case key_down:
							    --mm_L;
					    	  if(mm_L<0)
					        {
					        	mm_L = 9;
					    	  }
									FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              		k1=key_none;					
				     break;		
				     case key_up:
						      ++mm_L;
					    	  if(mm_L>9)
					        {
					        	mm_L = 0;
					    	  }
									FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;							
				     break;
            }
           }
					 else if(flagTime==4)
					 {
            	switch (k1)
			      {
				     case key_down:
							    --mm_H;
					    	  if(mm_H<0)
					        {
					        	mm_H = 6;
					    	  }
									FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              		k1=key_none;					
				     break;		
				     case key_up:
						      ++mm_H;
					    	  if(mm_H>6)
					        {
					        	mm_H = 0;
					    	  }
									FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;				
				     break;
            }
           }
				   else if(flagTime==5)
					 {
            	switch (k1)
			      {
				     case key_down:
							    --hh_L;
					    	  if(hh_L<0)
					         {
					        	 hh_L = 9;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;			
				     break;		
				     case key_up:
						      ++hh_L;
					    	  if(hh_L>9)
					         {
					        	 hh_L = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;						
				     break;
            }
           }
					 else if(flagTime==6)
					 {
            	switch (k1)
			      {
				     case key_down:
              		--hh_H;
					    	  if(hh_H<0)
					         {
					        	 hh_H = 2;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;			
				     break;		
				     case key_up:
						      ++hh_H;
					    	  if(hh_H>2)
					         {
					        	 hh_H = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					 else if(flagTime==7)
					 {
            	switch (k1)
			      {
				     case key_down:
              			--day_L;
					    	  if(day_L<0)
					         {
					        	 day_L = 9;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;			
				     break;		
				     case key_up:
						      ++day_L;
					    	  if(day_L>9)
					         {
					        	 day_L = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					 else if(flagTime==8)
					 {
            	switch (k1)
			      {
				     case key_down:
              		--day_H;
					    	  if(day_H<0)
					         {
					        	 day_H = 3;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;			
				     break;		
				     case key_up:
						      ++day_H;
					    	  if(day_H>3)
					         {
					        	 day_H = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					 else if(flagTime==9)
					 {
            	switch (k1)
			      {
				     case key_down:
              		--month_L;
					    	  if(month_L<0)
					         {
					        	 month_L = 9;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;				
				     break;		
				     case key_up:
						      ++month_L;
					    	  if(month_L>9)
					         {
					        	 month_L = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;					
				     break;
            }
           }
					 else if(flagTime==10)
					 {
            	switch (k1)
			      {
				     case key_down:
              		--month_H;
					    	  if(month_H<0)
					         {
					        	 month_H = 1;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;				
				     break;		
				     case key_up:
						      ++month_H;
					    	  if(month_H>1)
					         {
					        	 month_H = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					 
					 else if(flagTime==11)
					 {
            	switch (k1)
			      {
				     case key_down:
							    --year_L;
					    	  if(year_L<0)
					         {
					        	 year_L = 9;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;	
              						
				     break;		
				     case key_up:
						       ++year_L;
					    	  if(year_L>9)
					         {
					        	 year_L = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					 else if(flagTime==12)
					 {
            	switch (k1)
			      {
				     case key_down:
              		--year_H;
					    	  if(year_H<0)
					         {
					        	 year_H = 9;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;				
				     break;		
				     case key_up:
						       ++year_H;
					    	  if(year_H>9)
					         {
					        	 year_H = 0;
					    	   }
              		FourTime(year_H, year_L, month_H, month_L, day_H, day_L, hh_H, hh_L, mm_H, mm_L, ss_H, ss_L);
              	  k1=key_none;
              							
				     break;
            }
           }
					if(rcc_flag==43)                 //设置装置号
					{
						switch (k1)
			      {
				     case key_down: 
                  --Device_Add;
					    	if(Device_Add<1)
					        {
					        	Device_Add = 255;
					    	  }	
             ThirdBaudRateSetting(1,Device_Add,Band_Rate,Data_bits,Stop_bits);
                  k1=key_none;							
				     break;		
				     case key_up:
						      ++Device_Add;
					    	  if(Device_Add>255)
					         {
					        	Device_Add = 1;
					    	   }	
             ThirdBaudRateSetting(1,Device_Add,Band_Rate,Data_bits,Stop_bits);	
                   k1=key_none;                     
				     break;		 
						case key_cancel:                                //设置装置后返回
									 flag_debug=1;
									 rcc_flag=21;
									 SecondSet(1);
                 //  flash_write_device_b(Device_Add);	
                  flash_write(Device_Add,device_id_addr);
									 k1=key_none;
				    break;
            }
          }
					
					if(rcc_flag==44)                 //设置波特率
					{
						switch (k1)
			      {
				     case key_down: 
						     k1=key_none;
                  --flag_debug;
					    	if(flag_debug<1)
					        {
					        	flag_debug = 4;
					    	  }	
									switch(flag_debug)
									{
										case 1:
											    Band_Rate=4800;
										break;
										case 2:
											    Band_Rate=9600;
										break;
										case 3:
											    Band_Rate=19200;
										break;
										case 4:
											    Band_Rate=115200;
										break;
                  }
             ThirdBaudRateSetting(2,Device_Add,Band_Rate,Data_bits,Stop_bits);									
				     break;		
				     case key_up:
							     k1=key_none;
						      k1=key_none;
                  ++flag_debug;
					    	if(flag_debug>4)
					        {
					        	flag_debug = 0;
					    	  }	
									switch(flag_debug)
									{
										case 1:
											    Band_Rate=4800;
										break;
										case 2:
											    Band_Rate=9600;
										break;
										case 3:
											    Band_Rate=19200;
										break;
										case 4:
											    Band_Rate=115200;
										break;
                  }
             ThirdBaudRateSetting(2,Device_Add,Band_Rate,Data_bits,Stop_bits);								
				     break;		 
						case key_cancel:                                //设置装置后返回
									 flag_debug=1;
									 rcc_flag=21;
									 SecondSet(1);
									 k1=key_none;
                   uart_init(Band_Rate);
                   RS485_Init(Band_Rate);       //波特率设置  485
                  // flash_write_Band_Rate(Band_Rate);
                  flash_write(Band_Rate,Band_Rate_addr);
				    break;
            }
          }
          
          if(rcc_flag==45)                                 //设置数据位
					{
						switch (k1)
			      {
				     case key_down: 
                  --Data_bits;
					    	if(Data_bits<5)
					        {
					        	Data_bits = 8;
					    	  }	
             ThirdBaudRateSetting(3,Device_Add,Band_Rate,Data_bits,Stop_bits);
                  k1=key_none;							
				     break;		
				     case key_up:
						      ++Data_bits;
					    	  if(Data_bits>9)
					         {
					        	Data_bits = 5;
					    	   }	
             ThirdBaudRateSetting(3,Device_Add,Band_Rate,Data_bits,Stop_bits);	
                   k1=key_none;                     
				     break;		 
						case key_cancel:                                //设置停止位
									 flag_debug=1;
									 rcc_flag=21;
									 SecondSet(1);
//                    flash_write_device_b(Device_Add);	
//                  flash_write_databits(Data_bits);
                  flash_write(Data_bits,databits_addr);
									 k1=key_none;
				    break;
            }
          }
          
					if(rcc_flag==46)                                 //设置停止位
					{
						switch (k1)
			      {
				     case key_down: 
                  --Stop_bits;
					    	if(Stop_bits<1)
					        {
					        	Stop_bits = 9;
					    	  }	
             ThirdBaudRateSetting(4,Device_Add,Band_Rate,Data_bits,Stop_bits);
                  k1=key_none;							
				     break;		
				     case key_up:
						      ++Stop_bits;
					    	  if(Stop_bits>10)
					         {
					        	Stop_bits = 1;
					    	   }	
             ThirdBaudRateSetting(4,Device_Add,Band_Rate,Data_bits,Stop_bits);	
                   k1=key_none;                     
				     break;		 
						case key_cancel:                                //设置停止位
									 flag_debug=1;
									 rcc_flag=21;
									 SecondSet(1);
//                   flash_write_stopbits(Stop_bits);
                   flash_write(Stop_bits,stopbits_addr);
									 k1=key_none;
				    break;
            }
          }

}
Exemplo n.º 7
0
void configchanged(void)
{
        unsigned char tempconfig,configtemp1,configtemp2;
        if(dispconfig[2]==0)//当进入菜单选择时
        {
            switch(dispconfig[0])//对按键行为进行判断
            {
                case 2 : dispconfig[2]=1;break;
                case 3 : dispconfig[2]=2;break;
                case 4 : dispconfig[2]=3;break;
								case 5 : dispconfig[2]=5;SaveData();break;
								case 6 : dispconfig[2]=6;break;
								case 7 : dispconfig[2]=4;			
												timer1.w_year=2014;
												timer1.w_month=5;
												timer1.w_date=10;
												timer1.hour=8;
												timer1.min=59;
												timer1.sec=50;break;
                case 255 : break;
            }
        }
        else if((dispconfig[2]==1)||(dispconfig[2]==2))//当进入人群和季节选择时
        {
            switch(dispconfig[0])//对按键行为进行判断
            {
                   case 1 : 
                  {
                    tempconfig=dispconfig[2];
                    config[tempconfig]=dispconfig[0]-1;
                    dispconfig[2]=0;
                    dispconfig[1]=0;
                    configtemp1=config[1];
                    configtemp2=config[2];
                    needwater=needdrink[configtemp1][configtemp2];
                    selecttemp[0]=tempdata1[configtemp1][configtemp2];
                    selecttemp[1]=tempdata2[configtemp1][configtemp2];
                  }
                  break;
                  case 2 : 
                  {
                    tempconfig=dispconfig[2];
                    config[tempconfig]=dispconfig[0]-1;
                    dispconfig[2]=0;
                    dispconfig[1]=0;
                    configtemp1=config[1];
                    configtemp2=config[2];
                    needwater=needdrink[configtemp1][configtemp2];
                    selecttemp[0]=tempdata1[configtemp1][configtemp2];
                    selecttemp[1]=tempdata2[configtemp1][configtemp2];
                  }
                  break;
                  case 3 : 
                  {
                    tempconfig=dispconfig[2];
                    config[tempconfig]=dispconfig[0]-1;
                    dispconfig[2]=0;
                    dispconfig[1]=0;
                    configtemp1=config[1];
                    configtemp2=config[2];
                    needwater=needdrink[configtemp1][configtemp2];
                    selecttemp[0]=tempdata1[configtemp1][configtemp2];
                    selecttemp[1]=tempdata2[configtemp1][configtemp2];
                  }
                  break;
                  case 4 : 
                  {
                    tempconfig=dispconfig[2];
                    config[tempconfig]=dispconfig[0]-1;
                    dispconfig[2]=0;
                    dispconfig[1]=0;
                    configtemp1=config[1];
                    configtemp2=config[2];
                    needwater=needdrink[configtemp1][configtemp2];
                    selecttemp[0]=tempdata1[configtemp1][configtemp2];
                    selecttemp[1]=tempdata2[configtemp1][configtemp2];
                  }
                  break;
									case 0 : dispconfig[2]=0; break;
                case 255 : break;
            }
        }
        else if(dispconfig[2]==3)//当进入理想温度设定
        {

            switch(dispconfig[0])//对按键行为进行判断
            {
                /*
                case 6 : if(dispconfig[1]==1)dispconfig[1]=0;else dispconfig[1]++;break;
                case 9 : if(dispconfig[1]==1)
                          {
                            if(selecttemp[1]==48)
                              selecttemp[1]=57;
                            else selecttemp[1]--;
                          }
                          else if(dispconfig[1]==0)
                          {
                            if(selecttemp[0]==51)
                              selecttemp[0]=57;
                            else selecttemp[0]--;
                          }break;
                case 10 : dispconfig[2]=0;dispconfig[1]=0;break;
                case 11 : if(dispconfig[1]==1)
                          {
                            if(selecttemp[1]==57)
                              selecttemp[1]=48;
                            else selecttemp[1]++;
                          }
                          else if(dispconfig[1]==0)
                          {
                            if(selecttemp[0]==57)
                              selecttemp[0]=51;
                            else selecttemp[0]++;
                          }break;
                case 14 : if(dispconfig[1]==0)dispconfig[1]=1;else dispconfig[1]--;break;*/
								case 0 : dispconfig[2]=0; break;
								case 1 :  {
                            if(selecttemp[0]==57)
                              selecttemp[0]=51;
                            else selecttemp[0]++;
                          }break;
							  case 2 :  {
                            if(selecttemp[0]==51)
                              selecttemp[0]=57;
                            else selecttemp[0]--;
                          }break;
								case 3 :  {
                            if(selecttemp[1]==57)
                              selecttemp[1]=48;
                            else selecttemp[1]++;
                          }break;
								case 5 :  {
                            if(selecttemp[1]==48)
                              selecttemp[1]=57;
                            else selecttemp[1]--;
                          }break;
                case 255 : break;
            }
        }
        else if(dispconfig[2]==4)//进入RTC
        {
            switch(dispconfig[0])//对按键行为进行判断
            {
              case 0 : dispconfig[2]=0;dispconfig[1]=0;break;
							case 1 : timer1.w_year++;break;
							case 2 : timer1.w_year--;break;
							case 3 : timer1.w_month++;if(timer1.w_month==13)timer1.w_month=1;break;
							case 4 : timer1.w_month--;if(timer1.w_month==0)timer1.w_month=12;break;
							case 5 : timer1.w_date++;if(timer1.w_date==32)timer1.w_date=1;break;
							case 6 : timer1.w_date--;if(timer1.w_date==0)timer1.w_date=31;break;
							case 7 : timer1.hour++;if(timer1.hour==24)timer1.hour=0;break;
							case 8 : timer1.hour--;if(timer1.hour==255)timer1.hour=23;break;
							case 9 : timer1.min++;if(timer1.min==60)timer1.min=0;break;
							case 10 : timer1.min--;if(timer1.min==255)timer1.min=59;break;
							case 11 : timer1.sec++;if(timer1.sec==60)timer1.sec=0;break;
              case 12 : timer1.sec--;if(timer1.sec==255)timer1.sec=59;break;
							case 13 : RTC_Set(timer1.w_year,timer1.w_month,timer1.w_date,timer1.hour,timer1.min,timer1.sec);break;
							case 255 : break;
            }
        }
        else if(dispconfig[2]==5)//进入主页2
        {
            switch(dispconfig[0])//对按键行为进行判断
            {
                case 0 : dispconfig[2]=0;dispconfig[1]=0;break;
								case 1 : if(startflag==0)
													{
														startflag=1;
														finalwater=0;
													}
													else if(startflag==1)
													{
														startflag=0;
														finalwater=0;
														waterflag=0;
														finaltime=0;
														buzzerflag=0;
													}
													LED3=!LED3;
													UR1TxReadIndex=0;
													UR1TxWriteIndex=0;
													UR1TxBuf[0]=48;
													UR1TxBuf[1]=table_mbtemp[0];
													UR1TxBuf[2]=table_mbtemp[1];
													UR1TxBuf[3]=dN1[0];
													UR1TxBuf[4]=dN1[1];
													UR1TxBuf[5]=finaltime;
													UR1TxBuf[6]=startflag+48;
													UR1TxBuf[7]=selecttemp[0];
													UR1TxBuf[8]=selecttemp[1];
													UR1TxBuf[9]=127;
													UR1TxBuf[10]=127;
													UR1TxBuf[11]=127;
													UR1TxBuf[12]=127;
													UR1TxBuf[13]=127;
													UR1TxBuf[14]=127;
													UR1TxBuf[15]=fanflag+48;
													UR2_TX(1);
													break;
								case 2 : if(fanflag==0)
													{
														fanflag=1;
														
													}
													else if(fanflag==1)
													{
														fanflag=0;
													}
													UR1TxReadIndex=0;
													UR1TxWriteIndex=0;
													UR1TxBuf[0]=48;
													UR1TxBuf[1]=table_mbtemp[0];
													UR1TxBuf[2]=table_mbtemp[1];
													UR1TxBuf[3]=dN1[0];
													UR1TxBuf[4]=dN1[1];
													UR1TxBuf[5]=finaltime;
													UR1TxBuf[6]=startflag+48;
													UR1TxBuf[7]=selecttemp[0];
													UR1TxBuf[8]=selecttemp[1];
													UR1TxBuf[9]=127;
													UR1TxBuf[10]=127;
													UR1TxBuf[11]=127;
													UR1TxBuf[12]=127;
													UR1TxBuf[13]=127;
													UR1TxBuf[14]=127;
													UR1TxBuf[15]=fanflag+48;
													UR2_TX(1);
													break;
                case 5 : dispconfig[2]=5;break;
								case 6 : dispconfig[2]=5;needwater=needdrink[config[1]][config[2]];break;
                case 255 : break;
            }
        }
        else if(dispconfig[2]==6)//进入测重校准
        {
            switch(dispconfig[0])//对按键行为进行判断
            {
                case 0 : dispconfig[2]=0;dispconfig[1]=0;break;
                case 5 : if((def>ad_c))def=ad_c+7;break;//开始校准
								case 6 : dispconfig[2]=6;
                case 14 : if((def<ad_c))def+=50000;break;//数据复位
                case 255 : if(def<ad_c)def+=775;break;//自动修正(有bug)
            }
        }             
}
Exemplo n.º 8
0
u8 RTC_Init(void)
	{
	//检查是不是第一次配置时钟
	u8 temp=0;
	RTC_NVIC_Config();
	//if(BKP->DR1!=0X5050)//第一次配置
	if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)		//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
		{	 			
		/* Enable PWR and BKP clocks */
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);	//使能PWR和BKP外设时钟   
		
		/* Allow access to BKP Domain */
		PWR_BackupAccessCmd(ENABLE);	//使能RTC和后备寄存器访问 
		
		/* Reset Backup Domain */
		BKP_DeInit();	//将外设BKP的全部寄存器重设为缺省值 	
		
		
		/* Enable LSE */
		RCC_LSEConfig(RCC_LSE_ON);	//设置外部低速晶振(LSE),使用外设低速晶振
		/* Wait till LSE is ready */
		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)	//检查指定的RCC标志位设置与否,等待低速晶振就绪
			{
			temp++;
			delay_ms(10);
			}
		if(temp>=250)return 1;//初始化时钟失败,晶振有问题	    
		/* Select LSE as RTC Clock Source */
		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
		/* Enable RTC Clock */
		RCC_RTCCLKCmd(ENABLE);	//使能RTC时钟  
		/* Wait for RTC registers synchronization */
		RTC_WaitForSynchro();		//等待最近一次对RTC寄存器的写操作完成
		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		/* Enable the RTC Second */
		RTC_ITConfig(RTC_IT_SEC, ENABLE);		//使能RTC秒中断
		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		/* Set RTC prescaler: set RTC period to 1sec */
		/* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
		RTC_SetPrescaler(32767); //设置RTC预分频的值
		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		RTC_Set(2009,12,2,10,0,55);  //设置时间	  
		BKP_WriteBackupRegister(BKP_DR1, 0X5050);	//向指定的后备寄存器中写入用户程序数据
		}
	else//系统继续计时
		{
		/* Check if the Power On Reset flag is set */
		if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)	//检查指定的RCC标志位设置与否:POR/PDR复位
			{
			//printf("\rPower On Reset occurred....");
			}
		/* Check if the Pin Reset flag is set */
		else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)	//检查指定的RCC标志位设置与否:管脚复位
			{
			//printf("\rExternal Reset occurred....");
			}
		
		//printf("\rNo need to configure RTC....");
		/* Wait for RTC registers synchronization */
		RTC_WaitForSynchro();	//等待最近一次对RTC寄存器的写操作完成
		
		/* Enable the RTC Second */
		RTC_ITConfig(RTC_IT_SEC, ENABLE);	//使能RTC秒中断
		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
		}		    				     
	RTC_Get();//更新时间 
	
	/* Clear reset flags */
	RCC_ClearFlag();	//清除RCC的复位标志位
	
	return 0; //ok
	}