还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1602液晶电子锁1602液晶电子锁目录
1.设计任务……………………………………………………………………………
1.
1.要求………………………………………………………………………….
(1)基本要求
(2)发挥部分
2.系统方案…………………………………………………………………………….
3.系统硬件设计………………………………………………………………………
4.系统软件设计………………………………………………………………………
5.电路功能及控制流程………………………………………………………………
1.设计任务
1.
1.要求
(1)基本要求可设置2位__从按键输入正确__才可以开锁输入2次错误__,电路应有__声
(2)发挥部分__可设置1~4位__修改需要先输入旧__,比较正确后才可以修改并保存电压低于
4.5V应有低压__提示其他特色与创新
2.系统方案
3.系统硬件设计
4.系统软件设计*************************************主程序*************************************************************************************************************************************#includereg
52.h#include
1602.h#includeI2c_store.h__itkey1=P1^3;__itkey2=P1^1;__itkey3=P1^2;__itkey4=P1^0;__itwr=P3^6;__itrd=P3^7;uintd;uintkeynum;//按键扫描所用参数uintm1m2m3m4m5m6;//__所用参数uint__1__2__3__4__5__6;//所输入__参数uintinputtime;//__输入次数计数uintmi__isright=0mi__key3num;//改__所用参数uintshurulewrongtime;voidread_mi__;voiddelayuinta//毫秒延时函数{uintbc;forb=a;b0;b--forc=110;c0;c--;}voidbing//警告函数{bee=0;delay1000;bee=1;delay1000;bee=0;delay1000;bee=1;delay1000;bee=0;delay1000;bee=1;delay1000;}voidbebe{bee=0;delay200;bee=1;delay200;}voidtimechangeuintpositionuintjishu//改变时间{ucharge;ge=jishu;write_order0x80+0x40+position;write_date0x30+ge;}voidkeyscan//按键扫描{ifkey1==0{delay5;ifkey1==0{keynum++;inputtime++;while!key1;bebe;switchkeynum{case1:write_order0x0f;write_order0x80+0x40+5;break;case2:write_order0x80+0x40+6;break;case3:write_order0x80+0x40+7;break;case4:write_order0x80+0x40+8;break;case5:write_order0x80+0x40+9;break;case6:write_order0x80+0x40+10;break;case7:keynum=0;shurule++;write_order0x0c;break;}}}ifkeynum!=0{ifkey2==0//增加键{delay5;ifkey2==0{while!key2;bebe;switchkeynum{case1:__6++;if__6==10__6=0;timechange5__6;write_order0x80+0x40+5;break;case2:__5++;if__5==10__5=0;timechange6__5;write_order0x80+0x40+6;break;case3:__4++;if__4==10__4=0;timechange7__4;write_order0x80+0x40+7;break;case4:__3++;if__3==10__3=0;timechange8__3;write_order0x80+0x40+8;break;case5:__2++;if__2==10__2=0;timechange9__2;write_order0x80+0x40+9;break;case6:__1++;if__1==10__1=0;timechange10__1;write_order0x80+0x40+10;break;}}}//减小键ifkey4==0{delay5;ifkey4==0{while!key4;bebe;switchkeynum{case1:__6--;if__6==-1__6=9;timechange5__6;write_order0x80+0x40+5;break;case2:__5--;if__5==-1__5=9;timechange6__5;write_order0x80+0x40+6;break;case3:__4--;if__4==-1__4=9;timechange7__4;write_order0x80+0x40+7;break;case4:__3--;if__3==-1__3=9;timechange8__3;write_order0x80+0x40+8;break;case5:__2--;if__2==-1__2=9;timechange9__2;write_order0x80+0x40+9;break;case6:__1--;if__1==-1__1=9;timechange10__1;write_order0x80+0x40+10;break;}}}}}voidwaring_over_twotime//警报,输入次数超过三次{uinta;inputtime=0;write_order0x80;fora=0;a16;a++{write_datetishi7[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi8[a];}bing;delay2000;write_order0x80;fora=0;a16;a++//显示初始提示信息{write_datetishi1[a];}write_order0x80+0x40;fora=0;a16;a++//__位置{write_datetishi5[a];}}voidwaring_onetime//__输入错误一次{uinta;__1=0;__2=0;__3=0;__4=0;__5=0;__6=0;wrongtime++;write_order0x80;//显示提示信息,__错误fora=0;a16;a++{write_datetishi6[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi9[a];}delay2000;ifwrongtime==2{waring_over_twotime;wrongtime=0;}write_order0x80;//重新回到输入__界面fora=0;a16;a++{write_datetishi1[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi5[a];}delay2000;}voidcheck_mi__//检验__是否正确{uinta;ifkeynum==0mi__isright==0shurule==1//必须在输入完__时和没输入正确才会显示{//以输入了正确的__就不能显示!!!注意if__1==m1__2==m2__3==m3__4==m4__5==m5__6==m6//mi__isright要用好{mi__isright=1;//标记__正确了inputtime=0;//重新标记输入错误的次数write_order0x80;//显示提示信息,__正确fora=0;a16;a++{write_datetishi2[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi3[a];}__1=0;__2=0;__3=0;__4=0;__5=0;__6=0;}else{waring_onetime;}shurule=0;}}voidchange_mi__//改__{uinta;ifmi__isright==1//确认__正确{ifkey3==0//确认__键按下{delay5;ifkey3==0{mi__key3num++;while!key3;bebe;ifmi__key3num==1{write_order0x80;//显示提示信息,新__是fora=0;a16;a++{write_datetishi4[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi5[a];}}}}}}voidruturn_again//重新回到输入界面{uinta;ifkeynum==0mi__isright==1{mi__key3num=0;write_order0x80;fora=0;a16;a++{write_datetishi1[a];}write_order0x80+0x40;fora=0;a16;a++{write_datetishi5[a];}mi__isright=0;}}voidmi___store//储存__{ifmi__key3num==2keynum==0mi__isright==1{m1=__1;m2=__2;m3=__3;m4=__4;m5=__5;m6=__6;__1=0;__2=0;__3=0;__4=0;__5=0;__6=0;write_addm11;delay5;write_addm22;delay5;write_addm33;delay5;write_addm44;delay5;write_addm55;delay5;write_addm66;delay5;shurule=0;//防止__修改后直接检验__,造成干扰ruturn_again;}}voidread_mi__//复位断电后重新读取__{m1=read_add1;ifm19m1=0;delay1;m2=read_add2;ifm29m2=0;delay1;m3=read_add3;ifm39m3=0;delay1;m4=read_add4;ifm49m4=0;delay1;m5=read_add5;ifm59m5=0;delay1;m6=read_add6;ifm69m6=0;delay1;}voidinitial_mi__{write_add01;delay10;write_add02;delay10;write_add03;delay10;write_add04;delay10;write_add05;delay10;write_add06;delay10;}void__in{read_mi__;delay20;wela=0;dula=0;//wr=0;//rd=0;initial_1602;initial_24c;while2{keyscan;check_mi__;change_mi__;mi___store;}}******************************1602头文件**************************************************************************************************************************************ucharcodetishi1[]=INPUTYOURKEY;ucharcodetishi2[]=HALLO!;ucharcodetishi3[]=KEYISRIGHT;ucharcodetishi4[]=YOURNUWKEYis;ucharcodetishi5[]=000000;ucharcodetishi6[]=KEYISWRONG;ucharcodetishi7[]=!!!!!WARING!!!!!;ucharcodetishi8[]=!!BEYONGTIME!!!;ucharcodetishi9[]=!!!!!!!!!!!!!!!!;__itRS=P3^5;//显示屏数据命令端__itE=P3^4;//显示屏使能端voiddelay2uinta//毫秒延时函数1{uintbc;forb=a;b0;b--forc=110;c0;c--;}voidwrite_orderucharcom__nd//显示屏写命令{RS=0;P0=com__nd;delay22;E=1;delay22;E=0;}voidwrite_dateucharmessage//显示屏写数据{RS=1;P0=message;delay22;E=1;delay22;E=0;}voidinitial_1602//1602液晶初始化{uchard;write_order0x38;/*确定功能,为2*16*/write_order0x06;/*光标自动右移*/write_order0x0c;/*开关与光标的闪烁光标不闪*/write_order0x01;/*清屏*/write_order0x80;ford=0;d16;d++//显示初始提示信息{write_datetishi1[d];}write_order0x80+0x40;ford=0;d16;d++//__位置{write_datetishi5[d];}delay22000;}*******************************I2c_store头文件****************************************************************************************************************************//不用加任何变量__itscl=P2^1;//24c储存芯片引脚__itsda=P2^0;voiddelay1//微秒延时函数{;;}voidinitial_24c//储存芯片初始化{sda=1;delay1;scl=1;delay1;}voidstart//储存芯片启动{sda=1;delay1;scl=1;delay1;sda=0;delay1;}voidstop//储存芯片终止{sda=0;delay1;scl=1;delay1;sda=1;delay1;}voidresponse//储存芯片回应{uchara;scl=1;delay1;whilesda==1a250a++;delay1;scl=0;delay1;}voidwrite_btucharmessage//储存芯片写一字节数据{ucharcb;c=message;forb=8;b0;b--{scl=0;delay1;c=c1;sda=CY;scl=1;delay1;scl=0;delay1;}scl=0;delay1;sda=1;delay1;}ucharread_bt//储存芯片读一字节{uchardstore;scl=0;delay1;sda=1;delay1;ford=8;d0;d--{scl=1;delay1;store=store1|sda;scl=0;delay1;}returnstore;}voidwrite_adducharmessageucharaddress//指定位置储写数据{start;write_bt0xa0;response;write_btaddress;response;write_btmessage;response;stop;}ucharread_adducharaddress//指定位置读数据{ucharmessage;start;write_bt0xa0;response;write_btaddress;response;start;write_bt0xa1;response;message=read_bt;stop;returnmessage;}
5.电路功能
(1)__位数为六位,需输入正确的__才可进行其他操作页面
(2)__输入错误超过三次会产生警报
(3)__输入正确后可通过__按键对__进行修改
(4)__修改完成后,__会储存在ATM24C02储存芯片中,开关机或复位,__会从储存芯片中读取出来,而不会被初始化__输入界面检验__的正确__错误__正确错误计数清零,进入其他页面错误计数增加__修改错误计数超过2次产生警报新__1。