标题:
单片机密码锁程序
[打印本页]
作者:
SAKURA6
时间:
2019-2-4 07:15
标题:
单片机密码锁程序
/*
此文件中将来自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_();
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1