毕业设计(论文)-基于8051单片机的密码锁设计.doc_第1页
毕业设计(论文)-基于8051单片机的密码锁设计.doc_第2页
毕业设计(论文)-基于8051单片机的密码锁设计.doc_第3页
毕业设计(论文)-基于8051单片机的密码锁设计.doc_第4页
毕业设计(论文)-基于8051单片机的密码锁设计.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

烟台大学基于at89c51的密码锁控制password lock control based on at89c51院系:机电汽车工程学院专业:机械设计制造及其自动化姓名:学号:指导老师: 2015年7月4日烟台大学目录概述.21.功能分析及总体设计.32.硬件设计.42.1 键盘扫描电路设计.42.2 lcd液晶显示电路设计.5lcd1602主要技术参数.5清屏指令 clear display.8功能设置指令 function set.9lcd1602电路.112.3发声电路设计.122.4开锁控制电路.122.5晶振电路.132.6 电路连接总图.133.软件设计.143.1系统相关子程序.15 3.1.1按键相关子程序.16 3.1.2显示相关子程序.173.2系统主程序.184.设计小结.255.参考文献.26概述在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高。机械锁的这些弊端为一种新型的锁-电子密码锁,提供了发展的空间。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,ic卡锁,生物锁等。但较实用的还是按键式电子密码锁。随着单片机的问世,出现了带微处理器的智能电子密码锁,它除了具有一般电子密码锁的功能外,还引入了智能化管理,专家分析系统等功能,从而使密码锁具有很高的安全性,可靠性。当今安全信息系统应用越来越广泛,特别在保护机密、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的安全系统是其中的组成部分,因此研究它具有重大的现实意义。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,只适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。目前,在西方发达国家,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子密码锁的成本还很高,应用还不广泛。目前市场上的按键密码锁主要有以下两类,但都存在不同程度的缺陷。固定键盘式电子密码锁:这类密码锁使用固定键盘输入门锁密码。用户密码可以在18位任意设定,密码量极大,尝试法输入密码时,系统会出现保护性自锁,同时具有自动报警功能。这种密码锁成本不高,操作非常简单,常与机械弹子锁配合使用。类密码锁有以下缺陷:需要安装固定键盘,数字按键的位置固定不变,用户在操作时没有隐蔽性,其他人可以通过记住密码输入人员的手势推测出输入的密码,或被他人偷拍输入过程而得到密码。随机键盘式密码锁:为了防止用户在利用固定键盘输入密码的过程被偷窥或偷拍,研制出了随机键盘系统。用这种键盘输入密码时,每输入一个数字,键盘上的数字键的摆放顺序会随机变化,用户利用变化后的键盘输入下一位数字,使得利用偷窥或偷拍的方式记住密码的企图无法奏效。但它的缺点也是显著的:由于随机键盘对硬件要求较高,要采用触摸屏幕,键盘与显示器就必须合二为一,因此成本较高,难于应用到保险柜上。本设计利用8051单片机的控制程序结合lcd,设计一个lcd密码锁,可以用在需要密码输入的应用场合。本设计可以学习8051按键扫描输入、lcd显示、密码比较处理的设计方法。1.功能分析及总体设计本设计的密码锁具备的功能有:(1)使用lcd显示器来显示密码输入的相关信息;(2)可以设置四位数字(09)密码;内定另一组四位数字密码为“1234”;(3)密码输入正确则继电器启动2s,密码输入错误则发出警报声。程序执行后工作指示灯led亮,表示程序开始执行,lcd显示“passward a or b key”,按下操作键a或b动作如下:操作键a:设置新的四位数字密码;操作键b:输入四位数字密码并作检查。2.硬件设计2.1 键盘扫描电路设计本实验使用是的是矩阵式键盘扫描设计。其方式包括三种,程序控制随机扫描方式、定时扫描方式、中断扫描方式。由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多i/o口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清除功能等。键盘的每个按键功能在程序设计中设置。如图所示,本系统采用44矩阵键盘,16个按键分为输入字符和数字键:*、0、#、1、2、3、4、5、6、7、8、9;功能键a、b、c、d。矩阵键盘内部原理图如图3-2所示,外观图如图1所示。图1键盘电路设计对照图1的44键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机i/o口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00h,把全部列线置为低电平,然后将列线的电平状态读入累加器a中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。图2为键盘作用表。k1清零k5#确认k90k13*k2无定义k69k108k147k3bk74k115k156k4ak83k122k161图2 键盘作用表2.2 lcd液晶显示电路设计图3 lcd1602引脚图lcd1602简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,市面上字符液晶绝大多数是基于hd44780液晶芯片,hd44780是带西文字库的液晶显示控制器,用户只需要向hd44780送ascii的字符码,hd44780就按照内置的rom点阵发生器自动在lcd液晶显示器上显示出来。所以,hd44780主要适用于显示西文ascii字符内容的液晶显示。1602字符型lcd能够同时显示16*2即32个字符(16列2行)。其内置192种字符(160个5*7点阵字符和32个5*10点阵字符),具有64个字节的自定义字符ram,可自定义8个5*8点阵字符或4个5*11点阵字符。1602通常有14条引脚线或16条引脚线两种,多出来的2条线是背光电源线和地线,带背光的比不带背光的略厚,控制原理与14脚的lcd完全一样,是否带背光在应用中并无差别。本设计中采用带背光16引脚线的。lcd1602主要技术参数:显示容量:162个字符芯片工作电压:4.55.5v 工作电流:2.0ma(5.0v) 模块最佳工作电压:5.0v 字符尺寸:2.954.35(wh)mm 第1脚:vss为地电源。第2脚:vdd接5v正电源。第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w共同为低电平时可以写入指令或者显示地址,当rs为低电平r/w为高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。 1602模块内部主要由lcd显示屏、控制器、列驱动器和偏压产生电路构成。控制器接受来自mpu的指令和数据,控制着整个模块的工作。主要由显示数据缓冲区ddram,字符发生器cgrom,字符发生器cgram,指令寄存器ir,地址寄存器dr,忙标志bf,地址计数器ac以及时序发生电路组成。模块通过数据总线db0db7和e、r/w、rs三个输入控制端与mpu接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线接受mpu发来的数据和指令,从cgrom中找到欲显示字符的字符码,送入ddram,在lcd显示屏上与ddram存储单元对应的规定位置显示出该字符。控制器还可以根据mpu的指令,实现字符的显示,闪烁和移位等显示效果。cgrom内提供的是内置字符码,cgram则是供用户存储自定义的点阵图形字符。模块字符在lcd显示屏上的显示位置与该字符的字符代码在显示缓冲区ddram内的存储地址一一对应。 lcd1602模块内部具有两个8位寄存器:指令寄存器ir和地址寄存器dr,用户可以通过rs和r/w输入信号的组合选择指定的寄存器,进行相应的操作。1602提供了较为丰富的指令设置,通过选择相应的指令设置,用户可以实现多种字符显示样式。下面仅简要介绍本次设计中需要用到的一些指令设置。l 清屏指令 clear display清显示指令将空位字符码20h送入全部ddram地址中,时ddram中的内容全部清除,显示消失,地址计数器ac=0,自动增一模式。显示归位,光标闪烁回到原点(显示屏左上角),但不改变移位设置模式。清屏指令码见表1。表1 清屏指令码rsr/wdb7db6db5db4db3db2db1db00000000001l 进入模式设置指令 entry mode set见表2,进入模式设置指令用于设定光标移动方向和整体显示是否移动。表2 模式设置指令码rsr/wdb7db6db5db4db3db2db1db000000001i/dsi/d:字符码写入或者读出ddram后ddram地址指针ac变化方向标志。i/d=1,完成一个字符码传送后,ac自动加1。i/d=0,完成一个字符码传送后,ac自动减1。s:显示移位标志。s=1,完成一个字符码传送后显示屏整体向右(i/d=0)或向左(i/d=1)移位。s=0,完成一个字符码传送后显示屏不移动。l 显示开关控制指令 display on/off control指令码见表3,该指令功能为控制整体显示开关,光标显示开关和光标闪烁开关。表3显示开关控制指令码rsr/wdb7db6db5db4db3db2db1db00000001dcbd:显示开/关标志。d=1,开显示;d=0,关显示。关显示后,显示数据仍保持在ddram中,开显示即可再现。c:光标显示控制标志。c=1,光标显示;c=0,光标不显示。不显示光标并不影响模块其他显示功能。显示5*8点阵字体时,光标在第八行显示;显示5*10点阵字符时,光标在第11行显示。b:闪烁显示控制标志。b=1,光标所在位置会交替显示全黑点阵和显示字符,产生闪烁效果;b=0,光标不闪烁。l 功能设置指令 function set功能设置指令用于设置接口数据位数,显示行数以及字形。指令码见表4。表4功能设置指令码rsr/wdb7db6db5db4db3db2db1db000001dlnf*dl:数据接口宽度标志。dl=1,8位数据总线db7db0;dl=0,4位数据总线db7db4,db3db0不使用,此方式传送数据需分两次进行。n:显示行数标志。n=0,显示一行;n=1,显示两行。f:显示字符点阵字体标志。f=0,显示5*7点阵字符;f=1,显示5*10点阵字符。1602模块内部设有上电自动复位电路,当外加电源电压超过+4.5v时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。初始化大约持续10ms左右。初始化进行的指令操作为:l 清显示l 功能显示dl=1:8位数据接口。n=0:显示一行。f=0:显示5*8点阵字符字体。l 显示开/关控制d=0:关显示。c=0:不显示光标。b=0:光标不闪烁。l 输入模式设置i/d=1:ac自动增一。s=0:显示不移位。但是需要特别注意的是,倘若供电电源达不到要求,模块内部复位电路无法正常工作,上电复位初始化就会失败。因此,最好在系统初始化时通过指令设置对模块进行手动初始化。lcd1602电路如图4,80c51的p0口接1602的8位数据线,通过输出数据控制1602显示不同的提示字符。1602本身内置各种字符,还可以自定义显示字符。本设计中根据不同场合1602会显示各种提示字符。图4 lcd1602电路p2.0p2.2接1602控制端,其中p2.2接使能端e,写操作时,使能端下降沿有效。p2.1接读写控制端r/w,r/w=0,读操作;r/w=1,写操作。p2.0接寄存器选择端rs,rs=0,写操作时指向指令寄存器,读操作时指向地址寄存器;rs=1,无论读操作还是写操作都指向数据寄存器。lcd1602的vss为电源地,需接地;vdd为电源电压;v0为lcd驱动电压,接电位器,通过调节电位器控制显示的亮度,使lcd显示清晰而无黑影。背光电源线lcd正负两端分别接电源和地即可。2.3发声电路设计用p3.7口控制一个有源蜂鸣器发声,作为提示音或报警音。程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1s;密码错误时每次停顿0.5s发声1s。蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。由于单片机i/o引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。本设计中使用三极管9012,p3.7口高电平时三极管截至,蜂鸣器不发声;p3.7口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。2.4.开锁控制电路开锁控制电路的功能就是在输入正确的密码后开锁。系统使用单片机p3.6引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。在现代自动控制设备中,都存在电子电路(弱电)与电气电路(强电)的相互连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和工作人员的人身的安全。继电器便能完成这一桥梁作用。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”,在电路中起着自动调节、安全保护、转换电路等作用。在大多数情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个、数个触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。2.5晶振电路单片机本身是一个复杂的同步时序电路,为保证同步工作方式的实现,必须提供时钟信号,以使其系统在时钟信号的控制下按时序协调工作。单片机的时钟电路由振荡电路和分频电路组成,其中振荡电路由反向器以及其并联外接的石英晶体和电容构成,用于产生振荡脉冲。而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。晶振是晶体振荡器的简称,它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十,高级的精度更高。电路中的晶振即石英晶体振荡器,它与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡器。如图5:图5 晶振电路图2.6 电路连接总图图6 设计总图图5主程序流程图3.软件设计系统的软件设计采用汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件keiluvision2编译,如果没有错误,可连接生成.hex格式的文件(需事先在keiluvision2中设置)。生成的hex文件是记录文本行的ascii文本文件,在hex文件中,每一行是一个hex记录,由十六进制数组成的机器码或者数据常量。hex文件经常被用于将程序或数据传输存储到rom、eprom,大多数编程器和模拟器使用hex文件。该过程可由软件protues模拟仿真。3.1系统相关子程序3.1.1 按键识别子程序图6 按键识别流程图本设计中采用的4*4矩阵键盘共有16个键位,4根行线连p1口低四位,3根列线连p1口高四位。在按键未被按下时,每一条行线与线列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线和列线连通。这样在p1口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。具体识别方式和按键功能完全由软件自定义。流程图如图6。系统具体使用的键盘是一体式薄膜键盘,更轻薄更便捷,有印刷字符,无需连接上拉电阻。但键盘内部无电流通过,行扫描之前需给4根行线赋高电平,如果某行和某列相通,则高电平变低,可知该行有按键被按下。然后进行列扫描,同理可识别出按键所在列。确认行和列按键即被识别出来。3.1.2 lcd显示子程序点阵字符型lcd显示模块在正常使用之前,一般需要进行初始化,否则模块无法正常显示。初始化方法有复位电路初始化和软件初始化两种。图7为软件初始化过程流程图。开电源并等待电源写入功能设置指令写入30h指令等待5ms以上检查忙标志位或延时写入控制显示开关指令写入30h指令检查忙标志位或延时等待4ms以上写入清屏指令写入30h指令检查忙标志位或延时等待4ms以上写入输入方式设置指令图7软件初始化的实现过程流程图初始化结束3.2系统主程序/*头文件*/#include #include #define uint unsigned int#define uchar unsigned char#define scan_key_port p1 sbitlcd_rs_port = p20; sbitlcd_rw_port = p21; sbitlcd_en_port = p22; #define lcd_data_port p0 sbit ssr = p36;sbitspeaker_port = p37;uchar password = 1234;ucharinputword4;void delay_1ms(uchar x)uchar j;while(x-) for(j=0;j125;j+); voidspeaker_output()uchari;for(i=0;i100;i+)speaker_port = 0;delay_1ms(3);speaker_port = 1;delay_1ms(1);ucharkey_scan()ucharsccode,recode;scan_key_port=0xf0; if(scan_key_port&0xf0)!=0xf0) delay_1ms(2); if(scan_key_port&0xf0)!=0xf0) sccode=0xfe; while(sccode&0x10)!=0) scan_key_port=sccode; if(scan_key_port&0xf0)!=0xf0) recode=(scan_key_port&0xf0)|0x0f;scan_key_port=0xf0;scan_key_port = 0xff; return(sccode)+(recode); elsesccode=(sccode1)|0x01; scan_key_port = 0xff; return(0); voidlcd_command_write(uchar command) lcd_data_port = command;lcd_rs_port = 0;lcd_rw_port = 0;lcd_en_port = 0;delay_1ms(1);lcd_en_port = 1;lcd_en_port = 0; voidlcd_system_reset() lcd_command_write(0x01);lcd_command_write(0x38);lcd_command_write(0x0c);voidlcd_char_write(ucharx_pos,y_pos,lcd_dat) x_pos&= 0x0f; /* x位置范围 015 */y_pos&= 0x01; /* y位置范围 0 1 */if(y_pos=1) x_pos += 0x40;x_pos += 0x80;lcd_command_write(x_pos);lcd_rs_port = 1;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = lcd_dat;delay_1ms(1);lcd_en_port = 1;lcd_en_port = 0; uchar key_table_1 = password ;uchar key_table_2 = a or b key ;uchar key_table_3 = new password ;ucharkey_pass_table = password ok ;ucharkey_error_table = password error ;ucharkey_modify_table = passwordmodified;void main()ucharkey_value_buff;uchari,n=0, k=6, d=0, j=0, s=1;lcd_system_reset();for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i16;i+) lcd_char_write(i,1,key_table_2i); while(1)key_value_buff = key_scan();if(key_value_buff != 0)switch(key_value_buff) case 0x18:if(n4&s=0) lcd_char_write(k,1,1); inputwordn=1; k+; n+;break;case 0x28:if(n4&s=0) lcd_char_write(k,1,2); inputwordn=2; k+;n+;break;case 0x48:if(n4&s=0) lcd_char_write(k,1,3); inputwordn=3; k+;n+;break;case 0x44:if(n4&s=0) lcd_char_write(k,1,4); inputwordn=4; k+;n+;break;case 0x24:if(n4&s=0) lcd_char_write(k,1,5); inputwordn=5; k+;n+;break;case 0x14:if(n4&s=0) lcd_char_write(k,1,6); inputwordn=6; k+;n+;break;case 0x12:if(n4&s=0) lcd_char_write(k,1,7); inputwordn=7; k+;n+;break;case 0x22:if(n4&s=0) lcd_char_write(k,1,8); inputwordn=8; k+;n+;break;case 0x42:if(n4&s=0) lcd_char_write(k,1,9); inputwordn=9; k+;n+;break;case 0x21:if(n4&s=0) lcd_char_write(k,1,0); inputwordn=0; k+;n+;break;case 0x11:if(n4&s=0) lcd_char_write(k,1,*); inputwordn=*; k+;n+;break;case 0x81:for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i6&n0) lcd_char_write(k-1,1, ); k-; n-; inputwordn= ;break;case 0x41:s=0;if(d!=2) for(j=0,n=0;n4;n+) if(passwordn=inputwordn) j+;if (j!=4) for(i=0;i16;i+) lcd_char_write(i,1,key_error_tablei);speaker_output(); n=0;k=6;s=1; /*d=0if (j=4&d=0) for(i=0;i16;i+) lcd_char_write(i,1,key_pass_tablei); for(i=0;i4;i+) inputwordi= ; ssr=0;for(i=0;i20;i+) delay_1ms(100); ssr=1; n=0;k=6;s=1; if (j=4&d=1)d=2; n=0; k=6;for(i=0;i16;i+) lcd_char_write(i,0,key_table_3i); for(i=6;i1

温馨提示

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

评论

0/150

提交评论