- /*
- 此文件中将来自OLED_Fuction.c中的显示函数按程序状态封装,调用时更新特定显示
- */
- #include"OLED_Fuction.c"
- #include"RFID_Fuction.c"
- #include"BMP180_Fuction.c"
- extern unsigned char display_hour[];
- extern unsigned char display_minute[];
- extern unsigned char display_month[];
- extern unsigned char display_day[];
- extern unsigned char display_year[];
- extern unsigned char display_second[];
- extern unsigned char display_week;
- extern unsigned char Space_State[4];
- extern long BMP180_Temperature;
- extern long BMP180_Pressure;
- extern unsigned char choose;
- extern unsigned char first_num;
- extern bit User_Locker;
- extern bit Admin_Info;
- extern bit En_Fire_Sensor;
- extern bit En_RFID;
- void OLED_Admin_RFID_Manage(void);
- void delay2(unsigned int cnt)//调用该函数进行一段时间的延时
- {
- while(cnt--);
- }
- /*####################################################用户状态函数##############################################*/
- void OLED_Display_Standby()//待机状态,显示定时器0获取的时间或通知已锁信息
- {
- unsigned char i;
- OLED_Show_CHinese(0,CCTitle1,1);//显示标题:当前已锁
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar3,1);//显示横线
- }
- OLED_Show_Number(8,4,display_year,4,1);
- OLED_Show_cChar(40,4,cChar1,1);//年
- OLED_Show_Number(56,4,display_month,2,1);
- OLED_Show_cChar(72,4,cChar2,1);//月
- OLED_Show_Number(88,4,display_day,2,1);
- OLED_Show_cChar(104,4,cChar3,1);//日
- OLED_Show_Number(32,6,display_hour,2,1);
- OLED_Show_sChar(48,6,sChar2,1);//:
- OLED_Show_Number(56,6,display_minute,2,1);
- OLED_Show_sChar(72,6,sChar2,1);//:
- OLED_Show_Number(80,6,display_second,2,1);
- }
- void OLED_Display_Put_In_Password()//用户模式下输入密码的静态显示
- {
- unsigned char i;
- OLED_Show_CHinese(0,CCTitle1,1);//显示标题:当前已锁
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo1,1);//显示说明文字:请输入密码:
- }
- void OLED_Display_Right_Password()//用户模式下输入密码正确的静态提示信息
- {
- unsigned char i;
- OLED_Show_CHinese(0,CCTitle3,1);//显示标题:密码正确
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(6,CCInfo6,1);//显示说明文字:继电器已启用
- }
- void OLED_User_Mode()//用户模式菜单动态显示,因为容量小于等于3个,一屏可以放得下,所以不加滚屏功能,仅在两个选项中跳动
- {
- OLED_Show_CHinese(0,CCTitle4,0);//显示标题:用户模式
- switch(choose)
- {
- case 1:OLED_Show_CHinese(2,CCList_user_1,0);OLED_Show_CHinese(4,CCList_user_2,1);break;
- case 2:OLED_Show_CHinese(2,CCList_user_1,1);OLED_Show_CHinese(4,CCList_user_2,0);break;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==3)choose=2;//选项最大不能大于2
- }
- while(!KEY4);
- }
- }
- /*######################################################管理员状态函数############################################*/
- void OLED_Display_Administrator_Onload()//管理员登入静态显示
- {
- unsigned char i;
- OLED_Show_CHinese(0,CCTitle5,1);//显示标题:管理模式
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar5,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo3,1);//显示说明文字:请输入口令:
- }
- void OLED_Display_Menu(unsigned char menu_num,unsigned char choose)
- {//定制的菜单显示接口函数,用于将菜单变量名和调用它的变量值连接起来,需要知道显示的起始菜单号和当前选中的菜单
- switch(menu_num)
- {
- case 1:
- OLED_Show_CHinese(2,CCList_admin_1,!(choose==1));
- OLED_Show_CHinese(4,CCList_admin_2,!(choose==2));
- OLED_Show_CHinese(6,CCList_admin_3,!(choose==3));
- break;
- case 2:
- OLED_Show_CHinese(2,CCList_admin_2,!(choose==2));
- OLED_Show_CHinese(4,CCList_admin_3,!(choose==3));
- OLED_Show_CHinese(6,CCList_admin_4,!(choose==4));
- break;
- case 3:
- OLED_Show_CHinese(2,CCList_admin_3,!(choose==3));
- OLED_Show_CHinese(4,CCList_admin_4,!(choose==4));
- OLED_Show_CHinese(6,CCList_admin_5,!(choose==5));
- break;
- case 4:
- OLED_Show_CHinese(2,CCList_admin_4,!(choose==4));
- OLED_Show_CHinese(4,CCList_admin_5,!(choose==5));
- OLED_Show_CHinese(6,CCList_admin_6,!(choose==6));
- break;
- case 5:
- OLED_Show_CHinese(2,CCList_admin_5,!(choose==5));
- OLED_Show_CHinese(4,CCList_admin_6,!(choose==6));
- OLED_Show_CHinese(6,CCList_admin_7,!(choose==7));
- break;
- case 6:
- OLED_Show_CHinese(2,CCList_admin_6,!(choose==6));
- OLED_Show_CHinese(4,CCList_admin_7,!(choose==7));
- OLED_Show_CHinese(6,CCList_admin_8,!(choose==8));
- break;
- case 7:
- OLED_Show_CHinese(2,CCList_admin_7,!(choose==7));
- OLED_Show_CHinese(4,CCList_admin_8,!(choose==8));
- OLED_Show_CHinese(6,CCList_admin_9,!(choose==9));
- break;
- }
- }
- void OLED_Admin_Mode()//管理模式菜单动态显示
- {
- //static unsigned char first_num=1;//第一项菜单标号
- OLED_Show_CHinese(0,CCTitle5,0);//显示标题:管理模式
- OLED_Display_Menu(first_num,choose);//根据first_num和choose的动态刷新显示函数
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- if(choose<first_num)first_num--;
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==10)choose=9;//选项最大不能大于9
- if(choose>first_num+2)first_num++;
- }
- while(!KEY4);
- }
- }
- void OLED_Admin_onoff_Mode()//常开常关选项,因为容量小于等于3个,一屏可以放得下,所以不加滚屏功能,仅在两个选项中跳动
- {
- unsigned char choose_possition;//用于存放进入此级菜单时上一级choose的值
- choose_possition=choose;
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle9,0);//显示标题:开关选项
- while(!KEY1);//等待按键松开
- choose=1;
- while(1)
- {
- switch(choose)
- {
- case 1:OLED_Show_CHinese(2,CCList_onoff_1,0);OLED_Show_CHinese(4,CCList_onoff_2,1);break;
- case 2:OLED_Show_CHinese(2,CCList_onoff_1,1);OLED_Show_CHinese(4,CCList_onoff_2,0);break;
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- switch(choose)
- {
- case 1:
- JDQ=0;//开启继电器,由于继电器所在接口的位定义不再此文件中,故直接使用单片机头文件中的IO口定义
- User_Locker=1;//用户锁定
- Admin_Info=1;//管理员开锁通知开,该提示信息在用户代码处修改
- break;
- case 2:
- JDQ=1;//开启继电器,由于继电器所在接口的位定义不再此文件中,故直接使用单片机头文件中的IO口定义
- User_Locker=0;//用户解锁
- Admin_Info=0;//管理员开锁通知关,该提示信息在用户代码处修改
- break;
- }
- }
- while(!KEY1);
- OLED_Clear();
- goto OUT2;
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- choose=1;//重置菜单选择位
- }
- while(!KEY2);
- OLED_Clear();
- goto OUT2;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==3)choose=2;//选项最大不能大于2
- }
- while(!KEY4);
- }
- }
- OUT2:choose=choose_possition;//将之前存储的值还给choose以保证上级菜单不出现错乱
- }
- void OLED_Admin_firesensor_Mode()//火焰探测器开关选项,因为容量小于等于3个,一屏可以放得下,所以不加滚屏功能,仅在两个选项中跳动
- {
- unsigned char choose_possition;//用于存放进入此级菜单时上一级choose的值
- choose_possition=choose;
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle11,0);//显示标题:火焰探测
- while(!KEY1);//等待按键松开
- choose=1;
- while(1)
- {
- switch(choose)
- {
- case 1:OLED_Show_CHinese(2,CCList_firesensor_1,0);OLED_Show_CHinese(4,CCList_firesensor_2,1);break;
- case 2:OLED_Show_CHinese(2,CCList_firesensor_1,1);OLED_Show_CHinese(4,CCList_firesensor_2,0);break;
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- switch(choose)
- {
- case 1:
- En_Fire_Sensor=0;//关闭火焰探测器使能位
- break;
- case 2:
- En_Fire_Sensor=1;//使能火焰探测器
- break;
- }
- }
- while(!KEY1);
- OLED_Clear();
- goto FSMENUQUIT;
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- choose=1;//重置菜单选择位
- }
- while(!KEY2);
- OLED_Clear();
- goto FSMENUQUIT;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==3)choose=2;//选项最大不能大于2
- }
- while(!KEY4);
- }
- }
- FSMENUQUIT:choose=choose_possition;//将之前存储的值还给choose以保证上级菜单不出现错乱
- }
- void OLED_Admin_RFID_Mode()//RFID选项,因为容量小于等于3个,一屏可以放得下,所以不加滚屏功能,仅在3个选项中跳动
- {
- unsigned char choose_possition;//用于存放进入此级菜单时上一级choose的值
- choose_possition=choose;
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle14,0);//显示标题:RFID
- while(!KEY1);//等待按键松开
- choose=1;
- while(1)
- {
- switch(choose)
- {
- case 1:OLED_Show_CHinese(2,CCList_RFID_1,0);OLED_Show_CHinese(4,CCList_RFID_2,1);OLED_Show_CHinese(6,CCList_RFID_3,1);break;
- case 2:OLED_Show_CHinese(2,CCList_RFID_1,1);OLED_Show_CHinese(4,CCList_RFID_2,0);OLED_Show_CHinese(6,CCList_RFID_3,1);break;
- case 3:OLED_Show_CHinese(2,CCList_RFID_1,1);OLED_Show_CHinese(4,CCList_RFID_2,1);OLED_Show_CHinese(6,CCList_RFID_3,0);break;
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- switch(choose)
- {
- case 1:
- En_RFID=0;//关闭射频卡模块使能位
- break;
- case 2:
- En_RFID=1;//使能射频卡模块
- break;
- case 3:
- OLED_Admin_RFID_Manage();
- break;
- }
- }
- while(!KEY1);
- if(choose!=3)
- {
- goto RFIDQUIT;
- }
- else
- {
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle14,0);//显示标题:RFID
- }
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- choose=1;//重置菜单选择位
- }
- while(!KEY2);
- OLED_Clear();
- goto RFIDQUIT;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==4)choose=3;//选项最大不能大于3
- }
- while(!KEY4);
- }
- }
- RFIDQUIT:choose=choose_possition;//将之前存储的值还给choose以保证上级菜单不出现错乱
- }
- void OLED_Admin_RFID_Manage()//射频管理选项,因为容量小于等于3个,一屏可以放得下,所以不加滚屏功能,仅在3个选项中跳动
- {
- unsigned char choose_manage;//新建一个临时选项变量,与上两层目录无关
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle15,0);//显示标题:管理RFID
- while(!KEY1);//等待按键松开
- choose_manage=1;
- while(1)
- {
- switch(choose_manage)
- {
- case 1:
- OLED_Show_CHinese(2,CCList_admin_RFID_1,0);
- OLED_Show_CHinese(4,CCList_admin_RFID_2,1);
- OLED_Show_CHinese(6,CCList_admin_RFID_3,1);break;
- case 2:
- OLED_Show_CHinese(2,CCList_admin_RFID_1,1);
- OLED_Show_CHinese(4,CCList_admin_RFID_2,0);
- OLED_Show_CHinese(6,CCList_admin_RFID_3,1);break;
- case 3:
- OLED_Show_CHinese(2,CCList_admin_RFID_1,1);
- OLED_Show_CHinese(4,CCList_admin_RFID_2,1);
- OLED_Show_CHinese(6,CCList_admin_RFID_3,0);break;
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- switch(choose_manage)
- {
- case 1:
- /*添加卡函数*/
- Card_Add();
- break;
- case 2:
- /*删除卡函数*/
- Card_Delete();
- break;
- case 3:
- /*对比卡函数*/
- Card_Compare();
- break;
- }
- }
- while(!KEY1);
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle14,0);//显示标题:RFID
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- choose_manage=1;//重置菜单选择位
- }
- while(!KEY2);
- OLED_Clear();
- goto RFIDMQUIT;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose_manage--;
- if(choose_manage==0)choose_manage=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose_manage++;
- if(choose_manage==4)choose_manage=3;//选项最大不能大于3
- }
- while(!KEY4);
- }
- }
- RFIDMQUIT: _nop_();
- }
- void OLED_Display_System_Information()//显示BMP180传回的温度气压信息
- {
- unsigned char i;
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle10,1);//显示标题:状态信息
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- /*在此添加存储容量检测*/
- Storage_Check();
- OLED_Show_cChar(0,4,cChar10,1);//卡
- OLED_Show_cChar(16,4,cChar11,1);//存
- OLED_Show_cChar(32,4,cChar12,1);//储
- OLED_Show_cChar(48,4,cChar8,1);//:
- OLED_Show_sChar(96,4,sChar13,1);///
- OLED_Show_One_Number(80,4,Space_State[0],1);
- OLED_Show_One_Number(88,4,Space_State[1],1);
- OLED_Show_One_Number(104,4,Space_State[2],1);
- OLED_Show_One_Number(112,4,Space_State[3],1);
- while(!KEY1);//等待按键松开
- while(1)
- {
- /*在此添加温度气压扫描显示函数*/
- BMP180_Calculate();
- OLED_Show_sChar(0,6,sChar9,1);//T
- OLED_Show_sChar(8,6,sChar8,1);//P
- OLED_Show_sChar(16,6,sChar2,1);//:
- OLED_Show_sChar(40,6,sChar11,1);//.
- OLED_Show_sChar(56,6,sChar12,1);//°
- OLED_Show_sChar(64,6,sChar10,1);//C
- OLED_Show_sChar(96,6,sChar11,1);//.
- OLED_Show_sChar(112,6,sChar6,1);//K
- OLED_Show_sChar(120,6,sChar7,1);//p
- OLED_Show_One_Number(24,6,BMP180_Temperature/100,1);
- OLED_Show_One_Number(32,6,BMP180_Temperature%100/10,1);
- OLED_Show_One_Number(48,6,BMP180_Temperature%10,1);
- if((BMP180_Pressure/100000)!=0)
- {
- OLED_Show_One_Number(72,6,BMP180_Pressure/100000,1);
- }
- OLED_Show_One_Number(80,6,BMP180_Pressure%100000/10000,1);
- OLED_Show_One_Number(88,6,BMP180_Pressure%10000/1000,1);
- OLED_Show_One_Number(104,6,BMP180_Pressure%1000/100,1);
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- _nop_();
- }
- while(!KEY1);//由于按键只起到返回的作用,此处也可以将第二次if判断去掉,仅使用while判断,但为了整体规范性,就不在意那几个时钟了
- OLED_Clear();
- goto OUT3;
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- _nop_();
- }
- while(!KEY2);//由于按键只起到返回的作用,此处也可以将第二次if判断去掉,仅使用while判断,但为了整体规范性,就不在意那几个时钟了
- OLED_Clear();
- goto OUT3;
- }
- }
- OUT3:_nop_();
- }
- void Time_Set()//时间修改函数
- {
- bit en_data=1;//数据合法标志位,表示数据检查时的合法:1/不合法:0判断结果
- unsigned char i,choose=1,year_temp;
- unsigned char set_clock[6];
- unsigned char set_date[8];
- set_date[0]=display_year[0];
- set_date[1]=display_year[1];
- set_date[2]=display_year[2];
- set_date[3]=display_year[3];
- set_date[4]=display_month[0];
- set_date[5]=display_month[1];
- set_date[6]=display_day[0];
- set_date[7]=display_day[1];
- set_clock[0]=display_hour[0];
- set_clock[1]=display_hour[1];
- set_clock[2]=display_minute[0];
- set_clock[3]=display_minute[1];
- set_clock[4]=display_second[0];
- set_clock[5]=display_second[1];//复制运行数组,取待显示每一位
- /*第一部分,日期设置*/
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle13,1);//显示标题:时间修改
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo7,1);//显示说明文字:请输入年月日:
- while(!KEY1);//确认进入该函数时的按键已经松开
- while(1)
- {
- OLED_DateSet_Display(set_date,choose);//刷新显示时间设置数组,该数组保存设置的时间(按位)
- if(KeyScan()<10)//如果在此时有键盘按键按下则更改当前位的值
- {
- delay2(5000);
- if(KeyScan()<10)
- {
- set_date[choose-1]=KeyScan();
- }
- while(KeyScan()!=16);//等待按键松开
- choose++;
- if(choose==9)choose=8;//选项最大不能大于8
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- _nop_();
- }
- while(!KEY1);
- goto TSB;//跳出当前循环,进入下一循环时间设置
- }
- if(KEY2==0)//取消按键,直接退出时间设置函数
- {
- delay2(5000);
- if(KEY2==0)
- {
- _nop_();
- }
- while(!KEY2);
- OLED_Clear();
- goto TIMESETOUT;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==9)choose=8;//选项最大不能大于8
- }
- while(!KEY4);
- }
- }
- /*第二部分,时间设置*/
- TSB: choose=1;//重置显示位标志
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle13,1);//显示标题:时间修改
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo8,1);//显示说明文字:请输入时钟:
- while(1)
- {
- OLED_TimeSet_Display(set_clock,choose);//刷新显示时间设置数组,该数组保存设置的时间(按位)
- if(KeyScan()<10)//如果在此时有键盘按键按下则更改当前位的值
- {
- delay2(5000);
- if(KeyScan()<10)
- {
- set_clock[choose-1]=KeyScan();
- }
- while(KeyScan()!=16);//等待按键松开
- choose++;
- if(choose==7)choose=6;//选项最大不能大于6
- }
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- _nop_();
- }
- while(!KEY1);
- goto TSC;//跳出当前循环,进入第三部分
- }
- if(KEY2==0)//取消按键,直接退出时间设置函数
- {
- delay2(5000);
- if(KEY2==0)
- {
- _nop_();
- }
- while(!KEY2);
- OLED_Clear();
- goto TIMESETOUT;
- }
- if(KEY3==0)//上调按键
- {
- delay2(5000);
- if(KEY3==0)
- {
- choose--;
- if(choose==0)choose=1;//选项最少不能小于1
- }
- while(!KEY3);
- }
- if(KEY4==0)//下调按键
- {
- delay2(5000);
- if(KEY4==0)
- {
- choose++;
- if(choose==7)choose=6;//选项最大不能大于6
- }
- while(!KEY4);
- }
- }
- /*第三部分,拼接判断和写入*/
- TSC:if((set_clock[0]*10+set_clock[1])>24||set_clock[0]>2)//对小时的判断
- {
- en_data=0;
- }
- else
- {
- if(set_clock[0]==2&&set_clock[1]>4)
- {
- en_data=0;
- }
- }
- if((set_clock[2]*10+set_clock[3])>60||set_clock[2]>5)//对分钟的判断
- {
- en_data=0;
- }
- if((set_clock[4]*10+set_clock[5])>60||set_clock[4]>5)//对秒的判断
- {
- en_data=0;
- }
- if((set_date[4]*10+set_date[5])>12||set_date[4]>1)//对月份的判断
- {
- en_data=0;
- }
- else
- {
- if(set_date[4]==1&&set_date[5]>2)
- {
- en_data=0;
- }
- if(set_date[4]==0&&set_date[5]==0)
- {
- en_data=0;
- }
- }
- if((set_date[6]*10+set_date[7])>31||set_date[6]>3)//对日子的判断。注意,由于闰年的存在,若出现闰年输入2.29这样的情况会在输入完年份后判断退出
- {
- en_data=0;
- }
- if(set_date[0]!=2||set_date[1]!=0)
- {
- en_data=0;
- }
- year_temp=set_date[0]*1000+set_date[1]*100+set_date[2]*10+set_date[3];
- if(!Leap(year_temp))//如果不是闰年
- {
- if(set_date[4]==0&&set_date[5]==2&&set_date[6]==2&&set_date[7]==9)//对2.29作出判断
- {
- en_data=0;
- }
- }
- if(en_data)
- {
- /*拼接写入数组*/
- time_transmission(set_date,set_clock);
- /*写入新时间*/
- TimeReset();
- /*提示成功信息*/
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle13,1);//显示标题:时间修改
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo15,1);//显示说明文字:修改成功
- /*按键循环*/
- while(1)
- {
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- _nop_();
- }
- while(!KEY1);
- OLED_Clear();
- goto TIMESETOUT;
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- _nop_();
- }
- while(!KEY2);
- OLED_Clear();
- goto TIMESETOUT;
- }
- }
- }
- else
- {
- /*提示失败信息*/
- OLED_Clear();
- OLED_Show_CHinese(0,CCTitle13,1);//显示标题:时间修改
- for(i=0;i<16;i++)
- {
- OLED_Show_sChar(i*8,2,sChar4,1);//显示横线
- }
- OLED_Show_CHinese(4,CCInfo16,1);//显示说明文字:输入不合规则
- /*按键循环*/
- while(1)
- {
- if(KEY1==0)//确定按键
- {
- delay2(5000);
- if(KEY1==0)
- {
- _nop_();
- }
- while(!KEY1);
- OLED_Clear();
- goto TIMESETOUT;
- }
- if(KEY2==0)//取消按键
- {
- delay2(5000);
- if(KEY2==0)
- {
- _nop_();
- }
- while(!KEY2);
- OLED_Clear();
- goto TIMESETOUT;
- }
- }
- }
- TIMESETOUT: _nop_();
- }
复制代码
|