1、基于单片机的电子密码锁设计摘 要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能,从而使密码锁具有很高的安全性、可靠性,受到了广大用户的亲睐。本系统由AT89C51单片机系统(主要是AT89C51单片机最小系统)、44矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改六
2、位用户密码、超次报警、密码错误报警等功能(本设计由P0口控制LCD显示,密码正确显示password ok! 密码错误显示password error!超过三次输入错误启动报警功能。 经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。关键词: AT89C51,LCD1602,电子密码锁,44矩阵键盘目录前言1第1章 概述21.1 电子密码锁简介21.2 电子密码锁发展趋势21.3 本设计所要实现的目标31.4 电子密码锁设计的具体要求31.5 总体设计方案选定4第2章 硬件设计52.1 单片机AT89C51简介52.1.1 主要特性
3、52.1.2 引脚功能说明62.2 液晶显示LCD1602的介绍92.3 硬件电路的设计112.3.1 硬件设计原理112.3.2 最小系统的设计122.3.3 芯片擦除152.3.4 开锁机构152.3.5 键盘设计162.3.6 显示电路设计182.4 电路设计总图19第3章 系统软件设计203.1 系统软件设计总体流程203.2 主程序模块203.3 键盘扫描及程序流程图213.4 系统密码及开锁程序流程图23第4章 程序调试254.1 系统调试过程254.2 系统调试结果27结论29参考文献30附录32前言随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一
4、。此外电子技术的飞速发展,给传统的机械锁带来了巨大的变革,现代的电子技术与机械技术相结合,产生了一大批智能锁:指纹锁、IC卡辨识、遥控锁、声控锁等先进的锁具。虽然这类产品安全性高,但是这类产品的特点是针对特定指纹或有效卡,只能适用于保密要求高且仅供个人使用的箱、柜、房间等。而且卡片式IC卡还有易丢失等特点,加上其生产成本高,安装使用不方便,一定程度上限制了这类产品的普及和推广。由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子密码锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子密码锁,这样对盗贼而言是“道高一尺、魔高一丈”。组合
5、使用信息也能够使电子密码锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”。本文介绍的是一种基于ST89C51单片机和4*4矩阵键盘的硬件设计和软件实现方法,这种电路设计具有防试探按键输入、智能控制上锁、开锁、报警、修改密码等多种功能。保密性强,灵活性高,外接各种执行机构,可广泛用于车辆、大门、保险柜等各种需上锁的场合。 第1章 概述1.1 电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实
6、现的。其性能和安全性已大大超过了机械锁。其特点如下: (1) 保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。 (2) 密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。 (3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。 (4) 无活动零件,不会磨损,寿命长。 (5) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。 (6) 电子密码锁操作简单易行,一学即会。1.2 电子密码锁发展趋势在日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。目前门锁主要用弹子锁,其钥匙容易丢失;
7、保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。它的出现为人们的生活带来了很大的方便,有很广阔的市场前景。由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解。随着电子元件的
8、进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁。出于安全、方便等方面的需要许多电子密码锁已相继问世。但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信
9、息密码的电子防盗锁,这样对盗贼而言是“道高一尺、魔高一丈”。组合使用信息也能够使电子防盗锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”。可以看出组合使用电子信息是电子密码锁以后发展的趋势。1.3 本设计所要实现的目标本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。密码可以由用户自己修改设定,锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。1.4 电子密码锁设计的具体要求(1)本设计为了防止密
10、码被窃取要求在输入密码时在LCD屏幕上显示*号。(2)设计开锁密码位六位密码的电子密码锁。(3)能够LCD显示在密码正确时显示PASSWORD OK,密码错误时显示PASSWORD ERROR,输入密码时显示INPUT PASSWORD。(4)实现输入密码错误超过限定的三次电子密码锁定。(5)44的矩阵键盘其中包括0-9的数字键和A-F的功能键(6)本产品具备报警功能,当输入密码错误时蜂鸣器响并且LED灯亮。 (7)密码可以由用户自己修改设定(只支持6位密码),修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作 。1.5 总体设计方案选定采用一种是用以AT89C51为核心
11、的单片机控制方案。选用单片机AT89C51 作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。其原理如下图1-1所示: 图1-1 单片机控制密码锁原理框图 第2章 硬件设计2.1 单片机AT89C51简介 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一
12、种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C20与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU51是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 图2-1 AT89C51与AT89C20512.1.1 主要特性 (1)与MCS-51 兼容; (2)4K字节可编程闪烁存储器; (3
13、)寿命:1000写/擦循环; (4)数据保留时间:10年; (5)全静态工作:0Hz-24Hz; (6)三级程序存储器锁定; (7)128*8位内部RAM; (8)32可编程I/O线; (9)两个16位定时器/计数器; (10)5个中断源; (11)可编程串行通道; (12)低功耗的闲置和掉电模式; (13)片内振荡器和时钟电路; 2.1.2 引脚功能说明 图2-2 单片机引脚图Vcc:电源电压 GND
14、:接地 P0口:P0口是一组8位漏极开路型双向I0口,也即地址数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:Pl 是一个带内部上拉电阻的8位双向IO口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被
15、外部信号拉低时会输出一个电流(IIL),Flash编程和程序校验期间,Pl接收低8位地址。 P2 口:P2 是一个带有内部上拉电阻的8 位双向IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL),在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRi 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中
16、P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。 P3 口:P3 口是一组带有内部上拉电阻的8 位双向I0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。P3口除了作为一般的I0口线外,更重要的用途是它的第二功能,如下表所示:P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平
17、打开状态。 ALEPROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的16 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。 EAVPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1
18、被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。 XTALl:振荡器反相放大器及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 89C51相对于89C51增加的新功能包括:(1)ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离,是一个强大易用的功能。(2)最高工作频率为33MHz,89C51的极限工作频率为24MHz,就是说C51具有更高的工作频率,从而具有了更快的计算速度。(3)具有双工UART串行通道。(4)内部集成
19、看门狗计时器,不再需要像C51那样外接看门狗计时器单元电路。(5)双数据指示器。(6)电源关闭标识。(7)全新的加密算法,这使得对于89C51的解密变为不可能,程序的保密性大大加强,这样就可以有效地保护知识产权不被侵犯。(8)兼容性方面:向下完全兼容51全部字系列产品。(9)程序存储器写入方式:二者的写入程序的方式不同,89C51只支持并行写入,同时需要VPP烧写高压。89C51则支持Isp在线编程写入技术。串行写入、速度更快、稳定性更好,烧写电压也仅仅需要45V即可。(10)电源范围:89C51电源范围宽达45.5V,而89C51在低于4.8V和高于5.3V的时候则无法正常工作。(11)烧写
20、寿命更长:89C51标称的1000次,实际最少是100010000次,这样更有利于初学者反复烧写,降低学习成本。综上所述本设计选定AT89C51。2.2 液晶显示LCD1602的介绍1.LM1602字符型模块的性能重量轻:100g;体积小:11mm 厚;功耗低:1015mW;显示内容:192 种字符(57 点字型);32 种字符(510 点字型);可自编8(57)或许(510)种字符;指令功能强:可组合成各种输入、显示、移位方式以满足不同的要求;接口简单方便:可与8 位微处理器或微控制器相联;工作温度宽:050oC可靠性高:寿命为50,000 小时(25oC)2.基本原理(1)液晶体液晶板上排
21、列着若干57 或510 点阵的字符显示位,每个显示位可显示1 个字符,从规格上分为每行8、16、20、24、32、40 位,有一行、两行及四行三类。(2)工作电路它由KS0066、KS0065 及几个电阻电容组成。KS0065 是扩展显示字符用的(例如:16 个字符1 行模块就可不用KS0065,16 个字符2 行模块就要用1 片KS0065)接口方面,有8 条数据,三条控线。可与微处理器或微控制相连,通过送入数据和指令,就可使模块正常工作。(3)LCD 驱动器和控制器A.LCD 驱动器KS0065KS0065 是用低功耗CMOS 技术制造的大规模LCD 驱动IC。它既可当行驱动用,也可以当列
22、驱动用,由202Bin 二进制移位寄存器、202Bin 数据锁存器和202Bin 驱动器组成功能:a.40 通道点阵LCD 驱动;b.可选择当做行驱动或列驱动;c.输入/输出信号:输出,能产生202 个LCD 驱动波型;输入,接受控制器送出的串行数据和控制信号,偏压(V1V6);特性:a.显示驱动偏压低:静态1/5;b.电源电压:+5V+10%;c.显示驱动电源:-5V;d.CMOS 处理;e.60 引脚、塑封;B.LCD 控制器KS0066KS0066 是用低功耗CMOS 技术制造的大规模点阵LCD控制器(兼带驱动器),和4Bin/8Bin 微处理器相连连,它能使点阵LCD 显示大小英文字母
23、、符号。应用KS0066,用户能有少量元件就可组成一个完整点阵LCD 系统。特性:a.容易和Bin/8Bin Mpu 相连;b.可选择57 或510 点字符;c.显示数据RAM 容量:808Bin(80 字符);d.字符发生器ROM 能提供户所需字符库或标准库;字符容量:192 个字符(57 点字符);32 个字符(510 点字符);e.DDRAM 和CGRAM 都能从Mpu 读取数据;f.输出信号:16 个行扫信号(common singnal),40 个列扫信号(sengment singnal)g.电源复位电路;h.显示占空比:1/8duty(1Line,57dots+Cursor);1
24、/11 duty(1Line,510dote+Cuesor);1/16 duty(2Line,57dots+Cuesir);i.振荡电路;j.指令:11 种;k.80 引脚、塑封。 (4)技术参数表2-1极限参数2.3 硬件电路的设计2.3.1 硬件设计原理本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁
25、的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。其原理框图如图2-3所示:图2-3 电子密码锁原理框图 本设计单片机硬件资源的分配: P0.0P0.7用于LCD液晶显示作用。P3.7和P2.7用于蜂鸣器和报警灯的控制。P2.6用于开锁电路的控制。P1.0P1.7用于键盘电
26、路的控制。P2.0P2.2用于LCD显示模块的控制端口的控制。2.3.2 最小系统的设计当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和开关复位。图2-4即为手动(开关)复位电路: 图2-4 手动复位电路复位后的状态a.复位后PC值为0000H,表明复位后的程序从0000H开始执行。b.SP值为07H,表明堆栈底部在07H,一般需要重新设置SP值。c.P0P3口值为FFH。P0P3口用作输入口时,必须先写入“1”。单片机在复位后
27、,已使P0P3口每一端线为“1”,为这些端线用作输入口做好了准备。WDT溢出将使该引脚输出高电平,所以本设计采用图2-5的手动复位电路:图2-5 本设计手动复位电路AT89C51 中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图2-3-4。外接石英晶体(或陶瓷谐振器)及电容Cl、C2 接在放大器的反馈回路中构成并联振荡电路。对外接电容Cl、C2 虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳
28、定性。如果使用石英晶体,我们推荐电容使用30pF10pF,而如使用陶瓷谐振器建议选择40pF10F。用户也可以采用外部时钟。采用外部时钟的电路如图2-5所示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。 图2-6 单片机自激震荡电路由于单片机有内部振荡器,所以本设计采用图2-7的晶振电路:图2-7 晶振电路2.3.3 芯片擦除 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组
29、合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 2.3.4 开锁机构 用户通过LCD提示信息,用键盘输入正确密码,从而达到开锁的目的。当用户输入的密码正确并且是在按下确定键的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到
30、开门的目的。电路驱动和开锁两级组成。由D4、三极管组成驱动电路,其中三极管可以选择普通的小功率三极管如9014、9018都可以满足要求;开锁部分由继电器实现,继电器的选用要视情况而定,但是吸合力要足够且由一定的余量。 D1作为开锁的提示,当输入密码正确时,D1亮;本设计电子锁控制电路主要由继电器、三极管和发光二极管构成。电子锁控制电路图如图2-3-6所示: 图2-8 电磁锁控制电路图继电器线圈的一个引脚接电源正极,另一端接NPN三极管的集电极。三极管的基极通过一个电阻接单片机的引脚。当LOCKCON输出高电平时,三极管导通,继电器线圈得电,触点闭合,相当于电子锁闭锁;当LOCKCON输出低电平
31、时,三极管截止,继电器线圈失电,触点释放,发光二极管D1亮,相当于电子锁开锁。图中普通二极管是继电器线圈的续流二极管,为感应电动势提供回路,以免损坏三极管。2.3.5 键盘设计 本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。 每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。 在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。 (1)44矩阵键盘的工作原理 在键盘中按键数量
32、较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如下图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。(2)扫描原理 把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经
33、过比对之后就可知道是哪个键被按下。 比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设为VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。 由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键。 我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态
34、,再去判读所按下的键,就可以让键盘的输入稳定。图2-9为键盘整体模框图: 图2-9 键盘整体模框图2.3.6 显示电路设计 显示设计采用字符型液晶屏设计,由单片机的P0口控制显示,由P2.0P2.2控制LCD的控制端口。本系统设计的显示电路是为了给使用者以提示而设置的为达到界面友好的目的,显示部分由液晶显示LCD1602取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键09输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“IUPUT RIGHT”,单片机其中P2.6引脚会输出低电
35、平,使三极管导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“IUPUT ERROR”,P2.6输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。电路图如图2-10所示:图2-10 LCD液晶显示电路图2.4 电路设计总图Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真
36、大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。 本密码锁采用proteus进行电路图设计,经过元件选型,用万能实验版进行硬件焊接,以实现硬件部分。图2-11为proteus设计的密码锁电路图整体电路图: 图2-11 设计整体电路图第3章 系统软件设计3.1 系统软件设计总体流程因设计主要是作用汇编语言来开发的51单片机项目程序,所以首先必须有一个可以在Windows XP或Windows vista操作系统下执行的汇编语言编译器,本设计采用Keil编译
37、器进行编程,因为它可以支持一系列的51单片机。图3-1为主程序流程图: 图3-1 主程序的流程图3.2 主程序模块主程序主要是完成系统初始化、设置中断向量、检查有无键按下、以及调用显示等等。主程序部分如下所示: en bit p2.2;将lcd的en管脚连接到单片机的p2.2口 rw bit p2.1;将lcd的rw管脚连接到单片机的p2.1口 rs bit p2.0;将lcd的rs管脚连接到单片机的p2.0口 display equ p0;将lcd的显示端口连接到p0口上 speaker bit p3.7;蜂鸣器连接到p3.7口 led bit p2.7;开锁信号连到p2.7口 open b
38、it p2.6;开锁电路的控制端连接到p2.6口 returnbit bit 20h.1; ORG 0000h;程序开始地址 LJMP start; ORG 000bh; LJMP intermit_t0; ORG 001bh; LJMP intermit_t1; ORG 0030h; start: MOV sp,#60h; lcall sy s_initialization;调用子程序sys_initialization3.3 键盘扫描及程序流程图 键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。(1)矩阵式键
39、盘的按键识别方法:确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法:行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。a.判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。b.判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某
40、列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。(2)下面给出一个具体的例子:单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。a.检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。b.去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。c.若有键被按下
41、,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:P1.7 1 1 1 0P1.6 1 1 0 1P1.5 1 0 1 1P1.4 0 1 1 1在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值其程序流程如图3-2所示:图3-2 键盘扫描程序流程图3.4 系统密码及开锁程序流程图 由于设计是分模块化进行,所以子程序是整体软件系统的组成部分,子程序不但可以使程序化整为零,使其复杂简单化,同时也方便阅读,修改等,每
42、个功能模块都有它自己的子程序,在本设计中是用LCD显示数据,所以就要用到显示子程序,设计中用的是矩阵键盘,所以就用到键盘扫描子程序,例如还有显示初始化子程序、LCD忙检测子程序、关闭状态显示子程序、开锁状态显示子程序、密码输入及修改状态显示子程序、密码输入错误后的提示子程序等。如下图3-3为密码修改子程序流程图,图3-4为开锁程序流程图:图3-3 设置密码子 图3-4 输入密码开锁流程图第4章 程序调试 4.1 系统调试过程在硬件支持的环境下,用proteus设计好的电路,Keil编好的程序编译成芯片可识别的C51文件,利用PC机写进proteus程序图芯片内进行仿真测试,并对其出现的错误进行
43、修改,由图4-1图4-3可看出最终调试成功。 图4-1 keil编译程序成功图4-2 keil生成hex文件图4-3 proteus调用keil的hex文件进行仿真4.2 系统调试结果调试结果共有三种状态,第一种状态为上锁状态,此时若要开锁则需输入正确密码。第二种为输入密码,若密码正确,开锁成功且此时绿灯亮。第三种状态为输入密码错误,需重新输入密码。若输入次数达到三次则报警启动。调试结果如下图所示: 图4-4 初始上锁状态图4-5 密码正确绿灯亮图4-6 密码错误启动报警 结论 本学期的课程设计总算完成了,回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,可以说得是
44、苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次毕业设计使我懂得了理论与实际相结合是很重要的。刚开始时我不知该从何着手,后来参考了一些文献,我便开始设计自己的课程设计。我用的是单片机芯片实现主控,LCD显示,矩阵键盘等部件。我对这些知识掌握的不太好,所以在作设计时遇到一些问题,但通过不断努力,终于把密码锁的思路和模型定了下来,去整理和修改程序。我们去了图书馆借一些参考书,上网找一些相关资料,并且在指导老师翁老师的指导下,我最终都逐个克服了遇到的难题。而且我用的是C语言来实现的控制,这次的应用巩固了我的C语言知识。总之
45、我觉得只有理论知识是远远不够的,必须把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。! 参考文献1杨西明,朱骐主编.单片机编程与应用入门M.北京:机械工业出版社.2004(06) 2先锋工作室编著.单片机程序设计实例J.北京:清华大学出版社.2003 3谢宜仁主编. 单片机实用技术问答J.北京:人民邮电出版社. 2003 4梁丽.电子密码锁的计算机仿真设计J.计算机仿真,2005 5房小翠,王金凤编著.单片机实用系统设计技术M.北京:国防工业出版社.1999(06) 6王宽仁.可靠安全的智能密码锁J.电子技术应用. 2001
46、7李捷,陈典涛,陈建华,等.一种基于单片机的电子密码锁的设计 J.农机化研究,2004 8董继成. 能防止多次试探密码的单片机密码锁J.国外电子元器件.2004 9赵益丹,徐晓林,周振峰编著.电子密码锁的系统原理、设计程序及流程图J.嘉兴学院学报,2003 10张培仁.基于C语言编程 MCS- 51单片机原理与应用M.北京: 清华大学出版社,2002(12) 11李朝清. PC机及单片机数据通信技术M. 北京:北京航空航天大学出版社 , 1999(02) 12路而红.专用集成电路设计与电子设计自动化M.北京:清华大学出版社,2004(08) 13刘文涛.MCS-51单片机培训教程(C51)版M.北京:电子工业出版社,2005(8) 14王为青 程国钢.单片机Keil Cx51 应用开发技术M.北