1、unsigned char code name = =Coded Lock= /显示名称unsigned char code Correct = correct /输入正确unsigned char code Error = error /输入错误unsigned char code codepass = pass unsigned char code LockOpen = open /OPENunsigned char code SetNew = SetNewWordEnableunsigned char code Input = input: /INPUTunsigned char cod
2、e ResetOK = ResetPasswordOK unsigned char code initword = Init password.unsigned char code Er_try = error,try again!unsigned char code again = input again unsigned char InputData6; /输入密码暂存区unsigned char CurrentPassword6=1,3,1,4,2,0; /当前密码值unsigned char TempPassword6;unsigned char N=0; /密码输入位数记数unsig
3、ned char ErrorCont; /错误次数计数unsigned char CorrectCont; /正确输入计数unsigned char ReInputCont; /重新输入计数unsigned char code initpassword6=0,0,0,0,0,0;/=5ms延时=void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/=400ms延时=void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; whil
4、e(TempCycA-) TempCycB=7269; while(TempCycB-); /=/=24C02=void mDelay(uint t) /延时 uchar i; while(t-) for(i=0;i125;i+) ; void Nop(void) /空操作 _nop_();/*起始条件*/void Start(void) Sda=1; Scl=1; Nop(); Sda=0; /*停止条件*/void Stop(void)/*应答位*/void Ack(void) Sda=0; Nop(); Scl=1; Scl=0;/*反向应答位*/void NoAck(void) Scl
5、=0; /*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; Scl=0; Nop(); if(temp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter);/*读一字节的数据,并返回该字节值*/uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1
6、; do if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) temp1=temp0;x-) for(y=110;yy-);/-写指令-write_1602com(uchar com)/*液晶写入指令函数* lcd1602_rs=0;/数据/指令选择置为指令 lcd1602_rw=0; /读写选择置为写 P0=com;/送入数据 delay(1); lcd1602_en=1;/拉高使能端,为制造有效的下降沿做准备 lcd1602_en=0;/en由高变低,产生下降沿,液晶执行命令/-写数据-write_1602dat(uc
7、har dat)/*液晶写入数据函数* lcd1602_rs=1;/数据/指令选择置为数据 P0=dat; /en置高电平,为制造下降沿做准备 /en由高变低,产生下降沿,液晶执行命令/-初始化-void lcd_init(void) write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);/开显示不显示光标 write_1602com(0x06);/整屏不移动,光标自动右移 write_1602com(0x01);/清显示/=/=/=将按键值编码为数值=unsigned char coding(unsig
8、ned char m) unsigned char k; switch(m) case (0x18): k=1;break; case (0x28): k=2; case (0x48): k=3; case (0x88): k=A; case (0x14): k=4; case (0x24): k=5; case (0x44): k=6; case (0x84):B case (0x12): k=7; case (0x22): k=8; case (0x42): k=9; case (0x82):C case (0x11):* case (0x21): k=0; case (0x41):# c
9、ase (0x81):D return(k);/=按键检测并返回按键值=unsigned char keynum(void) unsigned char row,col,i; P1=0xf0; if(P1&0xf0)!=0xf0) Delay5Ms(); Delay5Ms(); if(P1& row=P10xf0; /确定行线 i=0; P1=ai; /精确定位 while(i4) if(P1& col=(P1&0xff); /确定列线 break; /已定位后提前退出 else i+; P1=ai; else return 0; while(P1&=0xf0); return (row|co
10、l); /行线与列线组合后返回 else return 0; /无键按下时返回0/=一声提示音,表示有效输入=void OneAlam(void) ALAM=0; ALAM=1;/=二声提示音,表示操作成功=void TwoAlam(void)/=三声提示音,表示错误=void ThreeAlam(void)/=显示输入的N个数字,用H代替以便隐藏=void DisplayOne(void)/ DisplayOneChar(9+N,1,); write_1602com(yi+5+N); write_1602dat(/=显示提示输入=void DisplayChar(void) unsigned
11、 char i; if(pass=1) /DisplayListChar(0,1,LockOpen); write_1602com(er); for(i=0;16; write_1602dat(LockOpeni); if(N=0) /DisplayListChar(0,1,Error); write_1602com(er); write_1602dat(Errori); else /DisplayListChar(0,1,start_line); write_1602dat(start_linei);void DisplayInput(void) if(CorrectCont=1) /Dis
12、playListChar(0,0,Input); write_1602dat(Inputi);/=重置密码=/=void ResetPassword(void) unsigned char j; if(pass=0) pass=0; DisplayChar(); ThreeAlam(); if(ReInputEn=1) if(N=6) ReInputCont+; if(ReInputCont=2) for(i=0;6;) if(TempPasswordi=InputDatai) /将两次输入的新密码作对比 i+; else /DisplayListChar(0,1,Error); write_
13、1602com(er); for(j=0;jj+) write_1602dat(Errorj); ThreeAlam(); /错误提示 pass=0; ReInputEn=0; /关闭重置功能, ReInputCont=0; DisplayChar(); break; if(i=6) /DisplayListChar(0,1,ResetOK); write_1602com(er); for(j=0; write_1602dat(ResetOKj); TwoAlam(); /操作成功提示 WrToROM(TempPassword,0,6); /将新密码写入24C02存储 ReInputEn=0;
14、 ReInputCont=0; CorrectCont=0; else OneAlam(); /DisplayListChar(0, 1, again); /显示再次输入一次 write_1602com(er); for(j=0; write_1602dat(againj); TempPasswordi=InputDatai; /将第一次输入的数据暂存起来 N=0; /输入数据位数计数器清零/=输入密码错误超过三过,报警并锁死键盘=void Alam_KeyUnable(void) P1=0x00; ALAM=ALAM;/=取消所有操作=void Cancel(void) /DisplayListChar(0, 1, start_line); write_1602c
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1