基于单片机的智能门锁设计doc基于单片机的智能门锁设计 1 绪 论 1.1 智能门锁简介 智能门锁是通过。智能门锁性能安全性超过了机械锁 保密性编码远远大于。随机开锁成功率为零。密码可变可以密码,密码,避免当密码输入错误时,自报警。 使用更加人性化,不必佩带钥匙才能完成开锁。 智能门锁操作,。 1. 1.3 本设计所要实现的目标 本文设计采取AT89C51作为控制芯片,加上外围辅助执行电路,构成智能门锁,具体实现功能如下: 设置6位密码,密码输入正确,按“开锁”键开锁,后按“关锁”键实现关锁。 密码可修改,保存至AT24C02芯片中。 密码中途输入错误时,可整体删除或逐位删除。 密码输入3次错误,蜂鸣器报警,液晶屏提示“ERROR”,同时有声音报警,在接下来的10分钟内系统将不接受密码输入。 为了测试方便系统暂时使用发光二极管模拟开锁。 2 主要元器件 2.1 主控芯片AT89C51 单片机AT89C51功能介绍: AT89C51是单片机中最具代表性的产品。其自身带4K字节可编程可擦除闪存(FPEROM) 与MCS-51 兼容 8K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 程序存储器锁定 128*8位内部RAM 32可编程I/O线个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 管脚说明: 按其引脚功能分为四部分阐述这40条引脚的功能。 图2.1-1 AT24C02引脚图 2.2 存储芯片AT24C02 24C02接术采用的是I2C总线C总线的数据传输速度最高可以3.4Mbit/s,我在这里为了降低系统的负荷选用标准工作方式传输速度已经拥有0.1MByte/s,这已经完全能够满足设计需求。I2C总线能够对整个系统对每个硬件模块进行唯一编码,通过软件寻址就能实现选定,这种独特而高效的设计在拥有I2C总线的单片机中就有体现,这大大方便了开发人员对单片机内部的控制。 CPU通过特定的命令不仅能对功能单元电路进行读写操作,还能监测其的工作情况。24C04的管脚功能如表2.2-1所示。 表2.2-1 24C04的管脚介绍 图2.2-1 AT24C02的芯片引脚图 2.3 LCD1602显示器 1602字符型液晶,能够显示16x0232个字符有1条引脚线-1 1602LCD引脚功能 为了能让用户界面更加的友好本设计中需要使用到字符显示,模块内部的存储器了160字母“A”在单片机字符型常量变量赋值1602识别的是ASCII码1602通过D0~DB7这8根数据数据。显示模式设置: (初始化) 0011 0000 [0x38] 设置16×2显示,5×7点阵,8位数据接口; 显示开关及光标设置: (初始化) 0000 1DCB D显示、C光标显示、B光标闪烁 0000 01NS N=1(读或写一个字符后地址加1 &光标加1), N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移) s=0 当写一个字符后,整屏显示不移动 数据指针设置: 数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置: 01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。表2.3-2 1602的16进制ASCII码表 2.4 晶体振荡器 石英晶体振荡器是利用石英晶体的压电效应制成的一种谐振器件它的基本构成大致是:在石英晶体薄片的两面上涂层作为电极在电极上一根接到管脚上,就89C51的时钟电路的引脚XTAL1和XTAL2 图3.1-1 智能门锁原理框图 3.2 电路总体构成 通过上面的各个部分电路的分析和设计,我们最后选择和了单片机型号为AT89C51;键盘采用4X4的矩阵键盘电路;存储芯片选用AT24C02芯片;蜂鸣器被用在报警电路中;开锁电路则由单片机通过驱动电路驱动吸合线圈完成;显示电路选用LCD1602液晶进行设计其原理图如图3.2-1所示: 图3.2-1 电路总体结构图 3.3 电源供给电路 电源电路时智能门锁可以正常工作的关键的所在,系统所有的元器件的工作都需要电源电路的支持,由于本次使用的电源电压为5V所以先用了3节1.5V电池串联供电,其电路如图3.3-1所示。 图3.3-1 电源供给电路原理图 3.4 键盘输入电路 由于要完成的功能较多,若逐一分配独立按键来完成其功能将浪费大量的系统资源。既然独立按键无法满足本设计要求,我就尝试使用另一种键盘——矩阵式按键键盘。它接法很奇特,通过行线与列线相互垂直交错形成网格,网格上的行线和列线的交点就是安装按键的位置,由此就组成了行列式键盘,采用这种键盘解决方案瞬间释放了很多单片机的系统资源。本设计中使用的4*4键盘,这种方案的采取能够提供4*4=16个按键。完成本设计的全部功能按键绰绰有余。键盘的每个按键功能的大体功能(键盘按键上已标示出)。 引脚接法如图3.4-1所示: 图3.4-1 键盘输入原理图 3.5 密码存储电路 密码存储芯片采用AT24C02。该芯片的容量为2KB,支持电擦写。总线方面采用的是双线脚的DIP封装博鱼官网,使用环境简单。 其电路如图3.5-1所示。 图3.5-1 密码存储电路 根据图3.5-1中标识,我采用的单片机的地址线引线脚上,主要用于获取各个元件的硬件地址。1、2、3脚都接地,第5脚接高电平和第8脚接地。AT24C02中采用了类似指针的技术,其中内置有地址寄存器其中存放存储设备的储存单元地址。每完成一个单位的数据字节的读写操作后,地址就会往后移动一个单位,将指针指向下一存储单元地址,循此往复完成所有存储单元的读写操作。 3.6 复位电路 AT89C51的复位引脚RST在9号引脚上。复位电路的主要的作用是当单片机长时间运行产生死机或者其他异常情况时,无法通过正常的操作来使系统恢复正常时做重启单片机用。重启单片机后程序将从头开始执行。本设计采用的电容值为10μF的电容和电阻采用KΩ的电阻。如图3所示。当按复位按钮RST引脚变为高,,实现上电复位切换操作。 图3 3.7 晶振电路 上文已经介绍了晶振电路的主要作用,其实就是给单片机一个时间表。这是为了单片机执行指令变的有序。为了能让AT89C51能产生自激振荡,我采取了晶振并联两个电容形成谐振电路的方法。接法如图3所示。 图3 显示部分我选用的液晶显示器LCD1602。用户利用矩阵键盘上的数字键输入密码时,数字输入区按键每被触发一次显示器即增加显示一个米字,直到用户输完密码。单片机判断密码若密码正确,显示器显示“OPEN”,单片机发送开门信号给驱动电路,驱动电路驱动继电器,智能门锁被打开。若密码不正确,则显示“WORDS WRONG”,单片机不发送开门信号,智能门锁不做开锁操作。 引脚接法如图3.8-1所示: 图3.8-1 显示电路原理图 3.9 报警电路 当报警电路被启用时SPK引脚输出低电平三极管导通喇叭发出声音;若报警电路没有被启动则SPK引脚输出高电平喇叭保持静默。 如图3.9-1所示: 图3.9-1 报警电路原理图 3.10 开锁电路 开锁电路如图3.10-1所示。 图3.10-1 开锁机构流程示意图 当单片机完成密码比对且正确时,单片机就会发出启用开锁电路指令完成开锁,这就是其主要功能。开锁步骤如下:按下键盘上的开锁按键被按下,开锁程序被启用;用户输入密码被单片机接收,单片机对密码进行分析;若密码比对失败且次数超过3次,则报警程序被启用。只有当密码比对成功,单片机才会发出开锁信号吸合线圈导通,铁芯被吸起,门锁打开。 电路如下图3.10-2所示。 图3.10-2 开锁电路原理图 4 软件程序设计 4.1 主程序流程图 如图4-1 为主程序流程图,单片机接电开机后,主程序首先进行初始化设置环节,初始化完毕后,主程序等待用户按下功能按键对单片机发出相应的指令。用户在键盘上输入密码,且密码正确,开锁程序被启动完成开锁;密码每比对失败一次,密码错误次数存储寄存器内数值加1,当寄存器内数值为3时执行报警程序并且寄存器内数值被置0。需要更改密码时,按下相应的功能键,启用修改密码程序;首先需对用户验明正身即需要出示旧密码,单片机比对密码。只有在密码比对无误时单片机才会启用设置新密码程序。旧密码比对失败且次数超过3次门锁自动运行报警程序,用户将在十分钟内无法对系统进行任何操作。确认修改后,密码修改成功,否则结束返回。 图4.1-1 主程序流程图 4.2 密码设置软件设计 按下设置键进入密码设置程序,密码设置程序设计有保护机制需要首先获取旧密码,旧密码比对无误,系统才会激活密码修改程序修改密码。新密码输入后按下保存密码按键,则密码修改成功。旧密码每比对错误一次,错误密码计数寄存器加一,当寄存器内数值为三时执行报警程序,错误密码计数寄存器置0,系统被锁定十分钟。 如图4.2-1密码设置流程图 图4.2-1 密码设置流程图 4.3 开锁软件设计 按下开锁键进入开锁程序,用户输入密码后。单片机激活密码比对程序。若比对成功,则单片机驱动控制引脚输出低电平,三极管导通执行机构启动做开锁动作。密码比对失败次数超过三次,报警程序将被启动。 如图4.3-1开锁流程图 图4.3-1 开锁流程图 5 调试与实现 5.1 硬件调试 本系统的硬件的基本的调试的具体方法是。先检查原理图上的元件使用,有无无效调用或错误调用。再比对PCB图是否存在走线错误等,自查原理图的连接错误,检查原理图与元器件的引脚是否一致。图纸检查完毕之后,我就开始了实物制作。首先把板子放到制板机中制板,制板过程这段时间里,我先行对元器件在面包板上进行检测,确保元器件处于良好工作状态。完成上序工作后在将元件焊接到板子上。为了能够完美的将板子焊接出来,需要平时多加练习,避免出现虚焊、漏焊的情况。完成焊接工作后万不可直接上电测试。首先通过目测检查相邻的引脚是否可能出现短路情况。之后再用万用表检查时候是否出现断路短路,焊接时也不要急于将多出来的引脚线剪去。这是为了在焊接过程中出现问题时能够及时的纠正,避免浪费元件。 错误排查完后,就可以进行上电测试了。 程序的调试模块程序,测试通过后进行。对于模块程序要程序分别调试 在硬件和软件排除了设计上出现的错误的条件下,利用Proteus进行仿真,做产品设计的最后一道测试程序,完成了这道程序就意味着我的作品已经能完成我的设计需求。通过不停的调试与改正,最终实现了智能门锁的各项设计要求。 Proteus仿线所示 首先连好模块之间的连接电路,反复对照设计电路图检查是否存在误连。检查完毕后,将程序导入,最后运行其仿真电路。 通过相应的功能按键可以开锁、更改密码和其他相关操作。密码输入错误三次门锁自动执行报警程序,完成锁必须输入正确的密码,显示器显示相应的提示信息。若系统出现死机现象或其他异常时,还可以通过复位按键进行复位。 通过多次调试与调整,最终能够成功的完成密码锁的开锁、闭锁、报警等操作的仿真。实现了本设计中需要的功能。 6 结论与展望 以上就是毕业论文---基于单片机的智能门锁设计,的全部内容。它历经数次修改和更正,现已可以基本完成设计的基本要求。输入密码时,拥有防暴力破解机制,即多次输入(项目暂定次数为三)错误,则进行报警并且锁定门锁在一定时间内无法再次进行操作。在输入时,拥有防机制即输入的密码不直接在显示屏上显示,暂定使用“*”作为掩码。在修改密码时,则显示数字。 通过这次毕业设计,让我深刻意识到自己对所学知识深度的不足。我本着技术开发人员的那股迎难而上的韧性,不怕困难。对测试一次又一次的失败毫不气馁。重新拿起书本,反复阅读推敲以前学过的知识。面对陌生的技术表现出强烈的求知。都会对我以后的技术开发道路起到很大的帮助作用,积累了宝贵的实站经验。同时也激发了我的创新精神;提高了实际动手能力;更是提升了我对本科目的兴趣。 工欲善其事必先利其器,单片机的学习充斥了整个大学的学习过程。单片机,单片机,其实就是说只有一片的计算机。 它虽然小而且目前的技术正让它向更小甚至微小方向发展,虽然他的体积变小了但是他的功能确日益强大。目前单片机大有“占领”全人类的趋势。它可能不是很常见到,其实他们都隐藏在一些外表下。比如电视遥控器里,智能电冰箱里,自动洗衣机里或者我们每个人都有的手机里。现在越来越多的电器都在向智能化发展,甚至是某些家具都参与其中。说不定某天你的茶几、衣柜、饭桌、沙发里它们就藏在其中默默的为了人类在工作运行着。在经济高速发展的今天,它也向工业领域发起了“攻击”。有了它们产品会变的“聪明”,变得会帮人类思考。打个比方:假如单片机被装载在汽车上会有什么用,开着车它帮你播放音乐放松心情,天气热了它帮你开空调,不知道去目的地的路它帮你指路,倒车技术不到家它们你看着甚至它帮你倒,这个技术已经出现宝马I3电动汽车已经搭载有自动停车系统就在今年的1月就已经上市。 单片机的出现方便了全人类同时也造就了一批人,他们就是奋战在单片机开发第一线的技术开发人员、科学家和工程师。单片机的广泛应用极大的加快了各个领域技术的更新速度。毫不惭愧的说单片机正在推动着人类文明的发展。而我们这一代的任务呢,就是加快这个单片机的发展速度。 通过这次毕业设计,让我放下了书本动起手来,它不但能巩固以前所学,而且让我学到了实践经验,体会到了为什么那么多老前辈为单片机而疯狂。 同时这次毕业设计也让我经历了放下书之后又拿起书的过程。永远停留在理论里是毫无用处的,只有动起手来才能正在发现问题,再解决问题。在问题中让知识得到升华提升。 7 致谢 四年弹指一挥间就过去了,在这段时光里,有有苦有泪,有酸有甜。在毕业论文撰写过程中,我的老师和同学都无私的帮助我,让我颇为感动。我需要感谢的人太多太多。首先要感谢我的母校,感谢你为我们提供如此良好的学习生活环境,在这四年中让我有许多领悟。领悟到到诚实做人,踏实做事的重要。让我从一个迷茫的高中生变成一个新时代的大学生。再一个我要感谢的是我的导师朱彬彬老师。我的基础比较差他就手把手的教。我遇到问题他总是能不厌其烦的为我解答即使这个问题我可能以前问过。当然,我还要感谢曾经基于过我无私帮助的同学老师们,我一度对自己的专业水平失去信心。甚至怀疑自己能不能毕业,是他们的鼓励和帮助让我重新燃起斗志。感谢上天能赐予我这段美好的回忆。 现在我即将离开学校,投入社会的建设中去。我们会为了自己心中的理想而各奔东西。虽然我们在以后的漫漫人生中可能不会再相见,但是我会记住这里,记住你们。曾经带给我无比丰富多彩大学生活的你们。因为有你们生活似乎又多了一层意义。 附录1:部分源代码 程序清单: 智能门锁.c #includereg51.h #includeat24c02.h #define uchar unsigned char #define uint unsigned int uchar buffer[6]={0}; sbit sda=P3^5; // 24c02通信端口 sbit scl=P3^4; sbit beep=P3^7; //蜂鸣器端口 bit flag=0,aa,keyflag=1; uchar DSY_BUFFER[16]= ;//液晶屏显示数据数组 uchar Userpassword[6]={0}; //用于保存输入密码 sbit rs=P0^0; //单片机与LCM1602通信端口 sbit rd=P0^1; sbit lcden=P0^2; sbit led=P3^6; // 控制密码锁开关端口 uchar code table[]=Your Password...; //初始显示数据数组 void delayms(uint z) //延时函数 { uint x,y; for(x=z;x0;x--) for(y=120;y0;y--);} uchar Keys_Scan()//键盘扫描函数 { uchar temp,keynum; P1=0x0F; //P1付初值 delayms(3); //适当延时 temp=P1^0x0f; //P1值与OXOF进行异或运算 switch(temp) {case 1:keynum=0;break; //当得出值为1时,按键值为0,以下同 case 2:keynum=1;break; case 4:keynum=2;break; case 8:keynum=3;break; break;} P1=0xf0; //P1再次付初值 delayms(3); temp=(P14)^0x0f; //P1值右移4位与OXOF进行异或 switch(temp) { case 1:keynum = keynum + 0;break; //当得出值为1时,按键值加0,以下同 case 2:keynum = keynum + 4;break; case 4:keynum = keynum + 8;break; case 8:keynum = keynum + 12;break; break; } return keynum;} #include reg51.h // 包含头文件 unsigned char uint8; // 无符号8位整型变量 unsigned short uint16; // 无符号16位整型变量 /* 定义器件在I2C总线中的地址 */ #define AT24C02_WriteDeviceAddress 0xa0 #define AT24C02_ReadDeviceAddress 0xa1 /* 定义位变量 */ sbit SCL=P3^6; // I2C总线的时钟信号 sbit SDA=P3^7; // I2C总线的数据信号 #define TRUE 1 #define FALSE 0 #define I2C_DelayTime 60 uint8 co[6]; uint8 cp[6]; /*------------------------------------------------------------------------ * 函数名称:I2C_Delay() * 功 能:总线延时 * 入口参数:count 延时参数 ------------------------------------------------------------------------*/ void I2C_Delay(uint16 count) { while(count!=0) count--;} void init()//12C初始化 { SDA=1; I2C_Delay(I2C_DelayTime); SCL=1; I2C_Delay(I2C_DelayTime);} /*------------------------------------------------------------------------* 函数名称:I2C_Start() * 功 能:启动I2C总线 ------------------------------------------------------------------------*/ void I2C_Start(void) { SDA=1; SCL=1; I2C_Delay(I2C_DelayTime); SDA=0; I2C_Delay(I2C_DelayTime); SCL=0; I2C_Delay(I2C_DelayTime);} /*------------------------------------------------------------------------ * 函数名称:I2C_Stop() * 功 能:终止I2C总线 ------------------------------------------------------------------------*/ void I2C_Stop(void) { SDA=0; SCL=1; I2C_Delay(I2C_DelayTime); SDA=1; I2C_Delay(I2C_DelayTime); SCL=0; I2C_Delay(I2C_DelayTime); } /*------------------------------------------------------------------------ * 函数名称:I2C_Check_Ack() * 功 能:发送完一个字节后检验设备的应答信号 * 出口参数:返回值为1,成功;返回值为0,失败------------------------------------------------------------------------*/ bit I2C_Check_Ack(void) { SDA=1; SCL=1; I2C_Delay(I2C_DelayTime/2); F0=SDA; I2C_Delay(I2C_DelayTime/2); SCL=0; I2C_Delay(I2C_DelayTime); if(F0==1) return 0; return 1;} /*------------------------------------------------------------------------ * 函数名称:I2C_Read8Bit() * 功 能:从I2C总线bit数据 * 出口参数:返回值为从I2C总线bit数据 ------------------------------------------------------------------------*/ uint8 I2C_Read8Bit(void)reentrant { uint8 I2C_data=0,i; for(i=0;i8;i++) { SDA=1; SCL=1; I2C_Delay(10); F0=SDA; I2C_Delay(10); SCL=0; if(F0==1) {I2C_data=I2C_data1; I2C_data=I2C_data0x01; } Else I2C_data=I2C_data1; } return I2C_data;} /*------------------------------------------------------------------------ * 函数名称:AT24C02_Write1Byte() * 功 能:向AT24C02指定地址上写入1字节数据 * 入口参数:AT24C02_Address AT24C02内的地址 * AT24C02_1Byte 写入AT24C02的数据 ------------------------------------------------------------------------*/ void AT24C02_Write1Byte(uint8 AT24C02_Address,uint8 AT24C02_1Byte) { bit AckTemp=1; I2C_Start(); I2C_Write8Bit(AT24C02_WriteDeviceAddress); AckTemp=I2C_Check_Ack(); I2C_Write8Bit(AT24C02_Address); AckTemp=I2C_Check_Ack(); I2C_Write8Bit(AT24C02_1Byte); AckTemp=I2C_Check_Ack(); I2C_Stop();} /*------------------------------------------------------------------------ * 函数名称:AT24C02_Read1Byte() * 功 能:从AT24C02指定地址上读出1字节数据 * 入口参数:AT24C02_Address AT24C02内的地址 * 出口参数:从AT24C02指定地址上读出的1字节 ------------------------------------------------------------------------*/ uint8 AT24C02_Read1Byte(uint8 AT24C02_Address) { bit Ack
原创力文档创建于2008年,本站为文档C2C交易模式,即用户上传的文档直接分享给其他用户(可下载、阅读),本站只是中间服务平台,本站所有文档下载所得的收益归上传人所有。原创力文档是网络服务平台方,若您的权利被侵害,请发链接和相关诉求至 电线) ,上传者
Copyright © 2012-2025 博鱼(中国)官方网站-BOYU SPORTS 版权所有HTML地图 XML地图 赣ICP备17014991号-1
收到你的留言,我们将第一时间与你取得联系