您好,欢迎访问三七文档
重庆交通大学信息科学与工程学院课程设计报告班级:2011级电子1班姓名:陈易学号:631106020133设计项目名称:电子密码锁实验所属课程:专业方向课程设计实验室(中心):现代电子实验中心指导教师:兰章礼设计完成时间:2014年6月5日一、设计的目标本次设计主要以STC89C52RC单片机为核心,实现开锁,修改密码,重置密码和保存密码等,完成基本的密码锁功能。二、系统组成框架图2-1单片机控制方案三、主要元器件序号元件名称主要参数备注1电阻(1)10K用于限流2电阻(2)4.7K上拉电阻3按键(16)——矩阵键盘4AT24C02(1)——保存数据5STC89C52RC(1)——主控芯片6电解电容(1)10uf组成单片机的最小系统7瓷片电容(2)30pf8晶振(1)11.0592MHZ9按键(1)——重置密码STC89C52RC单片机AT24C02掉电存储LCD1602显示矩阵键盘开锁输入错误锁定键盘修改密码10LCD1602(1)——显示字符四、原理图五、主要软件流程本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。主要程序设计流程图如下所示:图5-1主程序流程图开始初始化键盘扫描启动程序键盘扫描键功能程序结束关闭程序键功能程序键值=‘0-9’?键值=‘确定’?键值=‘清除’?键值=‘开锁’?键值=‘设置’?键值=‘解除键盘锁’?键值=‘重置密码’?密码输入程序确定程序清除程序开锁程序修改密码程序解除键盘锁程序重置密码程序返回图5-2键功能流程图图5-3开锁流程图初始化按开锁键输入密码确认程序所输入密码正确?Y开锁成功开锁程序输入次数加1次数3?报警程序返回NYN图5-4密码设置流程图设置程序初始化按下设置键输旧密码确认程序所输入旧密码正确?输新密码确认程序设置成功输入次数加1次数3?报警程序NYNY返回确认程序再次输新密码两次新密码输入相同?NY图5-5重置密码流程图重置密码程序输入管理员密码初始化按下重置密码按键密码是否正确输入数字是否是1,2,3?是否重置密码输出:codeiserror!YY是否重新输入NYN输出:resetcodeok输出:resetcodefail六、核心代码#includereg52.h#includemessage.h#include1602.h#includeKeyscan.h#includeLogin.h#include24c02.hvoidopen();//开锁voidset();//修改密码voidadmin();//使用管理员解除键盘锁voidpassword_recovery();//重置密码//系统管理员密码,系统初始化提示录入//系统初始化,还需要录入用户密码!//ucharadmin_pwd[max_code]=999999;ucharkey_value=0;ucharkey_flage=0;ucharerror_count=0;ucharis_colse_key=1;//1表示打开键盘0表示关闭键盘!/********************开锁********************/voidopen(){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_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;}}/********************修改密码********************/voidset(){clear();dis_arr(message4,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(message8,0x80);//最后一步把数据写进去//这点进行二次判断//判断输入的是那个用户的密码!copy_password(new_pwd,init_pwd[check_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;}}/********************解除键盘锁********************/voidadmin(){//调用管理员的密码开门//添加一个功能,就是恢复被用户的密码//第一步清屏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;}}/********************重置密码********************/voidpassword_recovery(){ucharerror_flage=1;ucharexit_flage=1;ucharselect_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_value10){//显示出输入的数字显示出输入的选项//但是10以后是不对的!send_remand(0xc0);write_data(key_value+0x30);}if((key_value==0||key_value3)&&key_value!=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_user=key_value;dis_arr(message18,0x80);//来检测按键while(exit_flage){key_value=keyscan();if(key_value==key_ensure){//重置密码copy_default_password(default_pwd,init_pwd[select_user-1]);clear();dis_arr(message19,0x80);exit_flage=0;}//退出if(key_value==key_exit){exit_flage=0;}}}//表示输入不合法,重新输入这个时候退出模式怎么弄////什么是否可以退出!按下确定键之后就进行确认是否恢复成为默认密码什么时候可以退出,按下清楚键!//退出if(key_value==key_exit){exit_flage=0;}}}else{dis_arr(message2,0x80);key_flage=0;}}//存储初始化密码voidsave_init_pwd(){save_data(4,init_pwd[0]);save_data(14,init_pwd[1]);save_data(24,init_pwd[2]);save_data(34,init_pwd[3]);}voidread_init_pwd(){read_data(4,init_pwd[0]);read_data(14,init_pwd[1]);read_data(24,init_pwd[2]);read_data(34,init_pwd[3]);}voidmain(){uchari='d',adr=1;clear();init();dis_arr(message9,0x80);//第一步先设计一个输入密码函数,用于接收输入的密码!//输入密码输入完成后按确定键退出//read_init_pwd();//dis_arr(init_pwd[0],0x80);//dis_arr(init_pwd[1],0x87);//dis_arr(init_pwd[2],0xc0);//dis_arr(init_pwd[3],0xc7);while(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芯片没有存进数据,复位开关没有起到复位作用等等。但是在同学的帮助下,终于解决了一个又一个问题,最
本文标题:密码锁设计报告格式
链接地址:https://www.777doc.com/doc-2535050 .html