密码锁设计报告格式_第1页
密码锁设计报告格式_第2页
密码锁设计报告格式_第3页
密码锁设计报告格式_第4页
密码锁设计报告格式_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、重庆交通大学信息科学与工程学院课程设计报告班 级: 2011级电子1班 姓 名: 陈 易 学 号: 3 设计项目名称: 电子密码锁 实验所属课程: 专业方向课程设计 实验室(中心): 现代电子实验中心 指 导 教 师 : 兰 章 礼 设计完成时间: 2014 年 6 月 5 日一、 设计的目标本次设计主要以STC89C52RC单片机为核心,实现开锁,修改密码,重置密码和保存密码等,完成基本的密码锁功能。二、 系统组成框架开锁STC89C52RC单片机矩阵键盘修改密码输入错误锁定键盘AT24C02掉电存储重置密码LCD1602显示图21单片机控制方案三、 主要元器件序号元件名称主要参数备注1电阻

2、(1)10K用于限流2电阻(2)4.7K上拉电阻3按键(16)矩阵键盘4AT24C02(1)保存数据5STC89C52RC(1)主控芯片6电解电容(1)10uf组成单片机的最小系统7瓷片电容(2)30pf8晶振(1)11.0592MHZ9按键(1)10LCD1602(1)显示字符四、 原理图五、 主要软件流程本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。主要程序设计流程图如下所示:开始初始化键盘扫描启动程序键盘扫描键功能程序结束关闭程序 图5-1 主程序流程图返回解除键盘锁程序重置密码程序修改密码程序确定程序密

3、码输入程序开锁程序清除程序键值重置密码?键值解除键盘锁?键值设置?键值开锁?键值清除?键值确定?键值09?键功能程序 图5-2 键功能流程图初始化按开锁键输入密码确认程序所输入密码正确?Y开锁成功开锁程序输入次数加1次数3?报警程序返回NYN 图5-3 开锁流程图设置程序初始化按下设置键输旧密码确认程序所输入旧密码正确?输新密码确认程序设置成功输入次数加1次数3?报警程序NYNY返回确认程序再次输新密码两次新密码输入相同?NY 图5-4 密码设置流程图重置密码程序初始化按下重置密码按键输入管理员密码N密码是否正确Y输出:code is error!输入数字是否是1,2,3?NYY是否重新输入是

4、否重置密码输出:reset code fail输出:reset code ok 图5-5 重置密码流程图六、 核心代码#include#include#include#include#include#includevoid open();/开锁void set();/修改密码void admin();/使用管理员解除键盘锁void password_recovery();/重置密码/系统管理员密码,系统初始化提示录入/系统初始化,还需要录入用户密码!/uchar admin_pwdmax_code=;uchar key_value=0;uchar key_flage=0;uchar error

5、_count=0;uchar is_colse_key=1;/1表示打开键盘 0 表示关闭键盘!/*开锁*/void open() clear(); dis_arr(message1,0x80); input_pwd(pwd); clear(); if(check_pwd(pwd,init_pwd)0) /开锁成功 dis_arr(message3,0x80); /dis_arr(message3,0x80); send_remand(0x80+0x0b);write_data(check_pwd(pwd,init_pwd)+0x30); /显示是哪个用户开锁key_flage=0;error

6、_count=0; else /如果输入的密码错误,错误次数将+1; error_count+;if(error_count=error_max_count) clear(); dis_arr(message11,0x80); dis_arr(message12,0xc0); /现在开始锁定键盘 管理员 密码不可修改! /系统初始化第一次就提示录入管理员密码!/关闭键盘响应事件 is_colse_key=0; key_flage=17; else dis_arr(message2,0x80); key_flage=0; /*修改密码*/void set() clear(); dis_arr(m

7、essage4,0x80); input_pwd(pwd); clear(); /旧密码正确 /系统管理员密码不允许修改! if(check_pwd(pwd,init_pwd)0) /显示请输入新密码 dis_arr(message5,0x80);/输入新密码input_pwd(new_pwd);clear();/显示再次输入密码dis_arr(message6,0x80);input_pwd(confirm_pwd); clear();/开始比较两次密码是否一致 if(check_change_pwd(new_pwd,confirm_pwd)=1)/如果一致显示修改密码成功dis_arr(m

8、essage8,0x80); /最后一步把数据写进去 /这点进行二次判断 /判断输入的是那个用户的密码! copy_password(new_pwd,init_pwdcheck_pwd(pwd,init_pwd)-1); / dis_arr(new_pwd,0xc0); / /对密码的初始止进行修改/ key_flage=0;else/如果不一致则显示修改失败 dis_arr(message10,0x80); key_flage=0; else /不正确则显示密码错误退出 dis_arr(message2,0x80);key_flage=0; /*解除键盘锁*/void admin() /调用

9、管理员的密码开门 /添加一个功能 ,就是恢复被用户的密码 /第一步清屏 clear(); /提示输入管理员密码 dis_arr(message13,0x80); input_pwd(pwd); clear(); if(check_pwd(pwd,init_pwd)=4) /开锁成功 dis_arr(message3,0x80);is_colse_key=1;key_flage=0;error_count=0; else dis_arr(message2,0x80);key_flage=0; /*重置密码*/void password_recovery() uchar error_flage=1

10、; uchar exit_flage=1; uchar select_user=1; /恢复用户默认密码 clear(); /提示输入管理员密码 dis_arr(message13,0x80); input_pwd(pwd); clear(); if(check_pwd(pwd,init_pwd)=4) /输入是否是管理员密码 /成功 /提示用户选择 恢复那个用户的密码 /开始捕获键盘输入 /如果输入 while(exit_flage) dis_arr(message15,0x80); key_value=keyscan(); /表示输入合法 if(key_value3)&key_value!

11、=17) clear(); /提示用户输入的不存在 ,询问是否需要重新输入 dis_arr(message16,0x80); dis_arr(message17,0xc0); /来检测按键 while(error_flage) key_value=keyscan();if(key_value=key_ensure) clear(); error_flage=0; /退出if(key_value=key_exit)clear();exit_flage=0;error_flage=0; if(key_value=1&key_value=3) /询问是否是否确认重置这个用户的密码select_use

12、r=key_value;dis_arr(message18,0x80); /来检测按键 while(exit_flage) key_value=keyscan();if(key_value=key_ensure) /重置密码 copy_default_password(default_pwd,init_pwdselect_user-1); clear(); dis_arr(message19,0x80); exit_flage=0;/退出if(key_value=key_exit) exit_flage=0; /表示输入不合法,重新输入 这个时候退出模式怎么弄/ / 什么是否可以退出! 按下确

13、定键之后就进行确认是否 恢复成为默认密码什么时候可以退出,按下清楚键! /退出 if(key_value=key_exit) exit_flage=0; else dis_arr(message2,0x80);key_flage=0; /存储初始化密码void save_init_pwd() save_data(4, init_pwd0); save_data(14,init_pwd1); save_data(24,init_pwd2); save_data(34,init_pwd3);void read_init_pwd() read_data(4,init_pwd0); read_data

14、(14,init_pwd1); read_data(24,init_pwd2); read_data(34,init_pwd3);void main()uchar i=d,adr=1;clear();init(); dis_arr(message9,0x80); /第一步先设计一个输入密码函数,用于接收输入的密码!/输入密码输入完成后按确定键 退出 /read_init_pwd();/ dis_arr(init_pwd0,0x80);/dis_arr(init_pwd1,0x87);/dis_arr(init_pwd2,0xc0);/dis_arr(init_pwd3,0xc7); while

15、(1) key_value=keyscan(); if(key_value!=17&is_colse_key)|key_value=admin_model) key_flage=key_value; if(key_flage=open_door) open(); if(key_flage=key_set) set(); save_init_pwd(); if(key_flage=admin_model) admin(); if(key_flage=code_reset) password_recovery();save_init_pwd(); key_flage=0; 七、 设计总结与体会通过这次实验,让我学会了许多知识。比如24C02芯片如何存储数据,LCD1602液晶显示屏如何显示字符,如何在线下载程序等等。在这次实验中,我也遇到了很多问题。比如,首先1602显示屏不显示数据,或者显示乱码;24C02芯片没有存进数据,复

温馨提示

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

评论

0/150

提交评论