/* *************************************************************** * 名称: 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); } }
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 }
//自动设置时间为编译器时间 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) ; }
//实时时钟配置 //初始化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 }
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; } } }
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) } } }
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 }