密码锁设计程序.doc_第1页
密码锁设计程序.doc_第2页
密码锁设计程序.doc_第3页
密码锁设计程序.doc_第4页
密码锁设计程序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

初始密码为四位,1,2,3,4 如果想修改密码的长度,可将程序中的密码长度4改为你想设置的长度值初始密码1,2,3,4也可在函数init_main()函数中修改密码锁上电后,锁合灯亮,初始密码为1,2,3,4 。当输入的四位密码按确定键后,密码正确时锁开灯亮,锁合灯灭。当不正确时,锁合灯继续亮,蜂鸣器短报警累计有三次密码输入错误时,蜂鸣器一直叫,键盘会自动锁定在输入密码的过程中可以按取消键重新输入密码在锁开的状态下按下修改密码键可以修改密码, 红灯闪三下后可以输入四位新密码,然后按确定键修改成功,锁合灯亮若输入的新密码不为四位,红灯快闪三下,提醒没有修改成功,可以重新输入四位新密码-*/*-密码锁硬件简要说明-黄灯接P2.7,绿灯接P2.5,蓝灯接P2.3,红灯P2.1,蜂鸣器接P2.0 都是低电平时工作键盘接法 行 P1.2 P1.1 P1.0 P1.3 列 P.4 P1.5 P1.6 P1.7键盘分布 7 8 9 修改密码 4 5 6 取消 1 2 3 确定 0-*/#include #define uchar unsigned char#define uint unsigned intuchar count;/ 密码位计数uchar pw4;/ 初始密码存储区uchar pwbuf4;/ 输入密码存储区uchar selfdefinebuf4;/自定义密码存储区uchar error_cnt;/错误次数计数器bit enterflag;/ 确认键按下与否标志bit pwflag;/ 密码正确与否标志bit last_pwflag;/前一次密码输入正确与否标志sbit open=P25; /锁开指示灯,绿灯。低电平亮sbit beep=P20;/蜂鸣器,低电平叫sbit red=P21;/红灯,低电平亮sbit close=P27;/锁合指示灯,黄色。低电平亮sbit youxiao=P23;/蓝灯,按键有效指示。低电平亮void flashred_L(void);/闪红灯,表示可输入自定义密码void flashred_S(void);/快闪红灯,重新输入自定义密码void flashall(void);/三盏灯全亮,不能继续输入/* 键消抖延时函数 */void delay(void)uint i;for (i=8000;i0;i-);/蓝灯亮一下,再灭,用来表示按键按下有效void youxiaoled() youxiao=0; delay(); youxiao=1;/ 蜂鸣器短叫 报警void baojing() beep=0; delay(); beep=1; delay(); beep=0; delay(); beep=1;/* 键扫描函数 */uchar keyscan()/键盘扫描函数 uchar temp;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay();/键盘去抖,temp=P1;temp=temp&0xf0;if(temp!=0xf0) youxiaoled(); /按键有效指示灯亮,即蓝灯亮temp=P1;switch(temp)case 0xee: return 1;break;case 0xde: return 2;break;case 0xbe:return 3;break;case 0x7e:return 11;break; /确定键 11while(temp!=0xf0) /按键抬起检测temp=P1;temp=temp&0xf0; else return 0;/无键按下返回0P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0) youxiaoled();temp=P1;switch(temp)case 0xed: return 4;break;case 0xdd: return 5;break;case 0xbd:return 6;break; case 0x7d:return 12;break;/取消键12while(temp!=0xf0)temp=P1;temp=temp&0xf0; else return 0;P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0)youxiaoled();temp=P1;switch(temp)case 0xeb:return 7;break;case 0xdb: return 8;break;case 0xbb:return 9;break; case 0x7b:return 13;break;/重设密码键13while(temp!=0xf0)temp=P1;temp=temp&0xf0; else return 0;P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0) youxiaoled();temp=P1;switch(temp)case 0xe7:return 10;break;/数字0 default :break;while(temp!=0xf0)temp=P1;temp=temp&0xf0; else return 0;/* 密码比较函数 */bit pwcmp(void)bit flag;uchar i;for (i=0;i4;i+)if (pwi=pwbufi)flag = 1;elseflag = 0;i = 4;error_cnt+;/错误次数加1return(flag);/初始化设置函数void init_main()count = 0;/ 初始没有输入密码,计数器设为0error_cnt=0;/错误次数归0enterflag = 0;/ 没有按下确认键pwflag = 0;/ 密码标志先置为0last_pwflag=0; close=0; /锁合灯亮,其它灯灭 open = 1;beep = 1;red=1;/* 假设内定密码为1234, 修改初始密码可在这里改*/pw0 = 1;pw1 = 2;pw2 = 3;pw3 = 4;/长闪红灯,表示可输入自定义密码void flashred_L(void)red=0;delay();delay();delay();delay();red=1;delay();delay();delay();delay();red=0;delay();delay();delay();delay();red=1;delay();delay();delay();delay();red=0;delay();delay();delay();delay();red=1;/快闪红灯,重新输入自定义密码void flashred_S(void)red=0;delay();delay();red=1;delay();delay();red=0;delay();delay();red=1;delay();delay();red=0;delay();delay();red=1;void flashall(void)beep=0;open=0;red=0;delay();delay();beep=1;open=1;red=1;/* 主程序 */void main()uchar j, key;uchar tempkey;init_main(); while(1) if(error_cnt0&key=10)/用户输入密码if(key=10) key=0; if (count0&tempkey=10)/用户输入密码if(tempkey=10) tempkey=0; if (count4)selfdefinebufcount = tempkey;/保存用户自定义密码count+;else if(tempkey=11)/确认键按下enterflag=1;if(count=4)close=0;open=1;beep=1;for(j=0;j4;j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论