1、盐城工学院课程设计说明书(2013)单片机课程设计说明书 电子密码锁控制系统设计专业电气工程及其自动化学生姓名张海啸班级B电气104学号1010601410指导教师张兰红完成日期2013年 6月 15日摘 要: 锁是指加在门、箱子、抽屉等物体上的封缄器,要用专用的钥匙才能打开。自古以来锁都是人们财产安全乃至生命安全的一种重要保障。伴随着人类历史的发展和人们对自身财产安全和人生安全的重视,各种各样的多功能的锁具也相继出现,人们使用的锁具也由传统的机械式锁逐渐发展为安全性能更好,功能更多的电子密码锁。在现代社会,电子密码锁已是一个被大家所熟识的名词。相信很多人的小区大门上的锁都用的是电子密码锁。本
2、文中将要介绍的电子密码锁是一种通过判断密码输入是否正确来控制电路或是芯片的工作状态,进而控制锁的打开和闭合,从而完成开锁、闭锁任务的电子锁装置。本设计是基于AT89C51单片机为控制核心的密码锁设计方案。在本次基于单片机的电子密码锁设计中,将采用AT89C51单片机作为控制核心,配合相应的电路和软件程序,实现密码的输入和修改、信息的显示、键盘的锁定、系统报警、开锁和闭锁等功能。在设计中,利用识别密码是否正确来开锁或报警,通过串行存储器AT24C02来实现密码的修改和存储关键词:单片机;密码锁;矩阵键盘;掉电存储The Design Of Electronic Code Lock Based O
3、n Single Chip MicrocomputerAbstract:As sealed device, the lock added to such objects like door, box, drawer etc, can be opened with specified key. Since the ancient time, lock is a kind of security, guaranteeing peoples property safety even life safety. With the development of human history and more
4、 attention paid to property safety and life safety, various multi-functional locks can be seen in the world. Traditional mechanical locks people use in life are gradually replaced by electronic combination lock characterized with better safety performance and more functions.In the modern society, el
5、ectronic combination lock is a noun familiar to everyone. Usually, the door of community is equipped with electronic combination lock. This paper will introduce an electronic combination lock. This lock controls the electric circuits and the performance of chips by identifying password. Thus, the op
6、enness and closeness of the lock can be controlled, and the task of electronic lock device can be completed. This design is about combination lock, based on the AT89C51 single-chip microcomputer as the core of controlling goals. This design in which the AT89C51 single-chip microcomputer as the core
7、of the controlling goals cooperated with relevant circuits and software programs can achieve such functions like password input and modification, information display, keyboard locking, warning system, and the openness and closeness of the lock etc. In this design, the openness of lock and alarming a
8、re according to identifying the password, and password revision and storage is achieved by the function of the AT24C02 serial storage. Keywords: Single-chip microcomputer, Combination lock, Electronic lock, Matrix keyboard, Power lost storage目录绪 论4电子密码锁简介5电子密码锁设计的背景及意义5电子密码锁的现状及发展趋势61 课题设计目标62 总体设计方
9、案62.1 设计思路62.2 方案确立73 硬件电路方框图73.1 单片机及其最小系统73.1.1 复位电路的设计83.1.2时钟电路的设计93.2 密码锁电路103.2.1 按键电路的设计103.2.2 LCD显示电路113.2.4 开锁机构123.2.5 报警机构134 程序设计144.1 软件总体设计144.2 键盘扫描子程序154.3显示模块子程序184.4 掉电存储子程序194.4.1 写操作方式194.4.2 读操作方式204.5 定时器中断子程序214.6 密码输入子程序214.7 报警子程序235 课程设计总结236 参考文献257 附 录25附录一 总电路原理图26附录二:电
10、子密码锁的PCB图27附录三:电子密码锁的实物图27附录四:元器件清单30附录五 源程序清单31 绪 论 电子密码锁简介什么是电子密码锁?“一种通过密码输入来控制电路或者是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。”百度百科上是这样解释的。简单来说,电子密码锁就是能够实现密码等信息的设置、存贮、识别和显示,以及报警信号的接收和发送等功能的电子器件。电子密码锁相对传统机械锁有以下几个优势:(1)密码可更改。用户可以随时更改密码,以确保密码锁的安全性和可靠性。可以更改密码这一功能同时也避免了人员的更替而使锁的安全性降低,这是传统钥匙锁所不具备的功能。(2)操作简单。无论是开锁
11、还是更改密码,只要识字的人都能够直接使用,使用方法简单而不繁琐。(3)能够报警。报警功能无疑更增加了锁的安全性。(4)无法“技术”破解。不知道密码就无法打开锁,即使是惯偷也只能望“锁”兴叹。 电子密码锁设计的背景及意义在现代文明社会,虽然人们的道德素质越来越高,“梁上君子”、“三只手”等人群相对旧社会大大减少,但是像“某某小区遭入室行窃,居民损失XXXX”之类的新闻我们还是经常能够在报纸上看到的。随着人们生活水平和自身防范意识的提高,个人财产安全和人身安全的问题也越来越受到人们的重视,拥有一把能够有效保证居民财产安全和人身安全的锁具也越发的重要起来。锁具的起源可以追朔到人类社会财产私有化的出现
12、,锁具从其出现到发展至今天的高科技化、信息化,已经有若干年的历史了。经过若干年的使用和研究,人们对锁具的结构、机理也了解得相当透彻了,因此,不使用钥匙就能将锁打开的方法也层出不穷。特别是传统的机械锁,由于其构造简单,在惯偷面前,甚至能够只用一根铁丝就直接将其打开,使其失去了保障用户个人财产安全的意义。那么,如何才能提高锁具保障用户财产安全的有效性呢?在信息现代化的今天,锁具也应该向高精度、高安全性的智能化、信息化发展。自20世纪70年代第一块单片机芯片TMS-1000于美国德克萨斯仪器公司面世以来,基于其体积小、价格低廉、个性突出等特点,越来越多的电子产品开始采用单片机芯片作为核心控制部件。在
13、这样的大环境下,基于单片机的电子密码锁也应运而生。这种电子密码锁是以单片机为核心,配以相应的硬件电路和软件程序,实现密码的设置、存贮、识别和显示,以及报警信号的接收和发送等功能,具有操作快、修改密码简单、安全性高、功耗低等优点。基于单片机的电子密码锁的面世使人们的自身财产安全有了更多的保障,同时也促进了安全信息系统的发展,是安全信息系统的一大进步。基于单片机的电子密码锁的出现,在一定程度上解决了用户私人财产安全的问题。但是,时代在发展,社会在进步,任何事物只有不断地进步才能适应时代发展的需求。电子密码锁虽然有安全性高、操作简单等优点,但是却不如机械锁价格低廉,因此,在市场上的主流产品还是机械锁
14、。电子密码锁要想取代机械锁成为市场上的主流,就必须不断改进,在具有更多功能的同时向更智能化和更低成本化发展。这就需要我们不断研究电子密码锁的设计方法和实现原理。因此,研究基于单片机的电子密码锁的设计是很有必要且具有现实意义的。电子密码锁的现状及发展趋势目前,和西方发达国家相比,我国的电子密码锁技术还相对落后。在西方发达国家,电子密码锁的种类已经很齐全,技术也比较先进,且在各个领域得到了广泛应用。在我国,电子密码锁技术却才相当于国际上七十年代的水平,相对来说还很落后。20世纪80年代以来,随着各种电子集成电路的出现,特别是单片机的面世,电子密码锁得到了很大的发展。相对于笨重而构造简单的传统机械锁
15、来说,电子密码锁具有体积小,可靠性高的优势。但是就目前而言,电子密码锁的价格相对较高且需要有电源提供能量,使得其使用还局限在一定范围,特别是在国内,各种条件的制约使得电子密码锁暂时难以普及。 尽管电子密码锁还存在着一些缺陷,但是其安全性高、方便易用、能够智能报警的优势却是传统钥匙锁取代不了的,而且随着电子信息技术的发展和各种电子器件的价格的不断降低,电子密码锁也将往低成本、多功能的方向发展。1 课题设计目标本设计采用MCS-51系列单片机AT89S52作为主控芯片,结合外围电路,设计密码锁控制系统,能够实现。2 总体设计方案2.1 设计思路该电路是一种采用以AT89S52为核心的单片机控制方案
16、。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能根据实际需要添加调电存储、声光提示功能。2.2 方案确立(1)为了实现密码的保密性,采用一个44的矩阵式键盘可以任意设置用户密码,从而提高了密码的保密性。(2)采用LCD显示单元,提高了可读性 ,提供良好的人机界面。3 硬件电路方框图电路由两大部分组成:AT89S51单片机及其外围电路和密码锁电路。密码锁电路包含:矩阵键盘输入、LCD指示电路、报警控制电路、AT24C02掉电存储电路。其原理方框图如图3-1所示。图3-1 原理图框图3.1 单片机及其最小系统 单片机最小系统是单片机正常工作的基础,任何
17、一个单片机系统设计都是基于单片机最小系统的基础上来完成的,而在单片机系统实物设计中,最应该首先解决的也应该是单片机最小系统问题,只有保证了单片机最小系统的正确性,才能保证接下来的其他模块的正确设计。图3-2是单片机最小系统的完整仿真图。图3-2单片机最小系统的完整仿真图3.1.1 复位电路的设计复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。该复位电路采用按键电平复位式复位电路。当单片机已在运行当中时,按下复
18、位键S后松开,在复位引脚RET(9脚)脚持续出现24个振荡器脉冲周期(即2个机器周期)的高电平信号将使单片机复位。也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。如图3-3所示。图3-3 复位电路3.1.2时钟电路的设计时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的,如果单片机的时钟电路停止工作(晶振停振),那么单片机也就停止运行了。当采用内部时钟时,连接方法如下图所示,在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个11.0592MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十
19、皮法,如20PF。如图3-4所示。图3-4 时钟电路3.2 密码锁电路3.2.1 按键电路的设计 为了加强密码的保密性,采用一个44的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,通常采用这种方法。其原理图如图3-5所示。图3-5 矩阵键盘电路每一行与每一列的交叉处不相同,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根列线,即可组成具有N M 个按键的矩阵键盘。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序
20、段。当确认有按键按下后,下一步就是要识别哪一个按键被按下。对键的识别方法通常有两种:一种是通用的组行扫描查询法;另一种是速度较快的线反转法。此系统中,我们采用线反转法。首先辨别键盘中有无按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。具体方法是:向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。判断键盘中哪一个按键被按下通常是通过将列线逐列至低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;如果不全为1
21、,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。实现功能如图 3-53.2.2 LCD显示电路本系统设计的显示电路是为了给使用者以提示而设置的。因为系统具有账户管理系统,使用LCD可以为用户提供更友好的人机界面,故选用LCD1602作为显示器件。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键09输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会
22、显示“you are thief!”,P3.0输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。图3-6 显示器电路使用 LCD1602可以轻松的实现所有字母和符号显示,显示功能丰富,驱动程序简单。能提高系统的安全行,使系统更人性化,更有可扩展性。下面几幅图是本课题用到的显示和提示语: 图3-7.1. 初始化 图3-7.2 密码输入正确 图3-7.3 密码输入错误第一次 图3-7.4 密码输入错误第二次 图3-7.5 密码输入错误第三次 图3-7.6 修改密码 图3-7.7 输入新密码 图3-7.8 清屏3.2.3 AT24C04 存储电路 AT24C02
23、是Atmel公司生产的AT24CXX系列串行E2PROM中的一种,是具有I2C总线接口功能的电可擦除串行存储器。AT24C02内部含有256个字节,通过I2C总线接口进行操作,有一个专门的写保护功能(WP=1时即为写保护)。电路如下图3-8 图3-8 AT24C04 存储电路3.2.4 开锁机构在基于单片机的电子密码锁设计中,用户需要输入密码,密码正确则发出开锁信号开锁。因为在设计中是以发光二极管代替电磁锁,二极管亮代表锁开,因此可以设计一个简单的可以点亮二极管的电路系统代替电磁锁开锁机构。如图3-9所示。图3-9 开锁显示电路由于单片机I/O口默认为高电平,故初始时二极管不亮,代表锁是闭着的
24、。当用户输入密码并验证正确时,发出开锁信号(使P2.4=0)。3.2.5 报警机构在这次基于单片机的电子密码锁设计中,通过控制蜂鸣器的发音来实现系统的报警功能。蜂鸣器是一种采用直流电压供电的电子讯响器。图3-10是用蜂鸣器模拟的报警机构仿真图。图3-10 报警机构模拟仿真图当P3.7口有脉冲信号输入时,蜂鸣器SPEAKER即会发音。通过控制输入脉冲的频率还能控制蜂鸣器的发音频率。当用户输入密码错误次数达到预设警告次数时,系统调用报警子程序,使蜂鸣器发出报警音,同时禁止键盘输入。3.2.6密码初始化电路 密码初始化是有个相当于超级用户的功能电路当用户密码忘记时可以点击按键实现密码的初始化:123
25、456。当然要有一定的权限的啦 仿真图如下图 3-11 图3-11 密码初始化电仿真图4 程序设计4.1 软件总体设计根据电子密码锁的实际应用要求和其应该具有的功能,本次设计的主程序流程图如图4-1所示。初始化显示输入密码界面输入密码密码正确?开锁扫描功能键有键输入?是改密键?进行改密操作 显示界面是闭锁键?进行闭锁操作YNYNNY开启定时中断次数3?调用报警子程序YN图4-1 主程序流程图此次基于单片机的电子密码锁设计的软件设计方面的主要问题是如何实现键盘输入、信息显示、密码的掉电存储以及密码的比较和处理。本设计接下来将分步解决这几个问题。4.2 键盘扫描子程序矩阵键盘扫描子程序应该具有以下
26、2个基本的功能:(1)能判断是否有键按下;(2)能确定是哪个键被按下。其软件管理主要分为以下三步来完成:(1) 判断整个键盘是否有键按下。让所有的行为0,然后读列的数值。如果列的数值全部为1,说明没有键被按下,否则说明有键被按下。(2) 识别被按下的键的位置。采用一行一行的扫描方法,逐行输出0,然后读列的值。如果列的数值全部为1,说明不是这一行的按键被按下,扫描下一行,如果列的数值不全为1,则说明被按下的按键时在这一行。(3) 查键值表,返回键值对应信息,以便确定各按键应该完成的功能。采用某种算法,将被按下的键所在的行和列的信息合并成为一个信息,该信息即为此键的键值。用相同的方法给每一个键确定
27、键值。在给按键确定键值时必须采用同一种算法,并且计算出来的键值应该是互不相同的。本设计中各按键对应键值如表4-1所示。表4-1 按键键值表按键名称键值按键名称键值 1 0x7e 9 0x7d 2 0xbe 0 0xbb 3 0xde A 0xdb 4 0xee B 0xeb 5 0x7d C 0x77 6 0xbd D 0xb7 7 0xdd E 0xd7 8 0xed F 0xe7键盘扫描子程序的流程图如图4-2所示:YN确定被按下的键在第二行?YN确定被按下的键在第三行?YN确定被按下的键在第四行中确定被按下的键返回对应的按键号在第一行?开始扫描键盘有键按下?YN图4-2 键盘扫描程序流程
28、图从流程图可以看出,此键盘识别程序是通过逐行扫描来确定是否有键按下,当确定某一行有键按下时,再在该行中确定被按下的是哪一个按键。在本设计中,P1.0P1.3为行输出口,P1.4P1.7为列输出口。初始时将P1.0P1.3值赋为0,P1.4P1.7赋为1,CPU始终扫描P1端口,当P1值不为0xf0时,有按键被按下,否责没有按键被按下。在实际应用中,为了防止因为按键的抖动而使得一次按键按下被当做2次或者2次以上处理,应该进行按键消抖程序设计,只要方法是当有键闭合时,延时一段时间再确定是否还有键闭合,若有,则为键有效闭合,若无则为键无效闭合,返回重新扫描。图4-3为CPU扫描第一行键盘的程序流程图
29、。单行键盘扫描能够准确确定被按下键所在的位置。开始扫描端口YN有键闭合?延时有键闭合?查表确定按键YNI/O口初始化返回按键值结束图4-3 单行键盘扫描流程图在本设计中,各按键的功能与图3-5 一样 详见图4.3显示模块子程序由于设计中要求能够显示密码输入界面、密码输入信息、密码正确后提示界面、密码错误后提示界面和修改密码相关界面等信息,故要用到很多个显示子程序来显示不同的内容。虽然显示子程序很多,但是由于其显示原理都一样,所以我就不一一介绍各个子程序了,只要能够熟练使用LCD1602各个指令,这些大同小异的子程序也就不在话下了。以下是LCD1602从第一行第一列开始显示N(0N16)个字符的
30、程序流程图。开始调用写数据函数YN显示N个字符了吗?LCD初始化结束图4-4 显示字符程序流程图显示模块子程序主要指根据LCD1602的命令和引脚功能来编写,程序逻辑相当简单。4.4 掉电存储子程序 掉电存储子程序就是将初始密码写进AT24C04,单片机每次复位后从AT24C04中读取密码用来和输入的密码进行比较,以判断输入的密码的正确性。当密码修改成功后,将新密码写入AT24C04,以便单片机下次复位后使用。掉电存储模块子程序主要涉及AT24C04的写操作方式和读操作方式。AT24C04有2种不同的写操作形式和3种不同的读操作方式。 4.4.1 写操作方式 两种写操作方式为:字节写和页写。(
31、1)字节写。字节写模式下,主机发送(R/W()位置为0)起始命令和器件地址信息,主机在收到AT24C04的应答信号后,发送18位字节地址,写入AT24C04的地址指针中。对于高于8位的地址,主机连续发送两个8位字节地址写入AT24C04中,主机在收到AT24C04的另外一个应答信号后再发送数据到被寻址的存储单元,AT24C04再次应答,并在主机发出停止信号后开始内部数据的擦写。AT24C04在内部擦写过程中不响应主机的任何请求,因此在两次写操作之间应该留有足够的反应时间。字节写的时序是这样的:地址只有8位:开始器件地址响应8位字节地址响应数据响应停止地址高于8位:开始器件地址响应高8位字节地址
32、响应低8位字节地址响应数据响应停止(2)页写。页写和字节写所不同的是:字节写一次只能写入一个字节数据,页写一次可以写入8个或16个字节数据。页写的时序是这样的:地址只有8位:开始器件地址响应8位字节地址响应数据1响应数据N响应停止。地址高于8位:开始器件地址响应高8位字节地址响应低8位字节地址响应数据1响应数据N响应停止。三种不同的读操作方式为:读当前地址内容(立即地址读取)、读随机地址内容(随机地址读取)和读顺序地址内容(顺序地址读取)。4.4.2 读操作方式 (1)读当前地址内容。AT24C04的地址计数器内容为最后操作字节的地址加1,所有如果上次读写操作的地址为N,采用读当前地址内容方式
33、读地址应该从N+1地址处开始。AT24C04接收到器件地址信号并且I2C总线允许接收数据(R/W()=1),则首先发送一个应答信号然后输出数据。数据输出完毕后,主机发送停止信号,读操作完毕。(2)读随机地址内容。这种读操作方式允许主机读出AT24C04的任意字节。主机置通过R/W()位为0,发送开始信号、AT24C04地址和欲读取的字节数据地址来执行一次伪操作,在AT24C04应答后,主机再一次发送开始信号和AT24C04的地址,此时R/W()位置1,AT24C04响应并应答信号,然后输出字节数据,最后主机以一个停止信号结束数据的读取。(3)读顺序地址内容。读顺序地址内容操作方式通过立即读或随
34、机地址读操作来启动,主机在AT24C04发送完一个8位数据后产生一个应答信号,告知AT24C04主机要求更多数据。AT24C04收到主机的应答信号后继续发送数据,直到主机不发送应答信号响应而发送停止信号后操作结束。下面是三种不同的读操作方式时序对比:读当前地址内容:开始读器件地址响应数据无响应停止。读随机地址内容:开始写器件地址响应要读的字节地址响应开始读器件地址响应数据无响应停止。读顺序地址内容:开始写器件地址响应要读的字节地址响应开始读器件地址响应数据1响应数据N无响应停止。本次设计中采用的是读随机地址内容操作方式。4.5 定时器中断子程序 为了防止户主以外的“借用”户主的密码,当没有任何
35、按键被按下的状态持续一段时间后(比如20S内),应该马上关闭显示器屏幕,同时禁止按键的输入。这样做可以避免因为户主忘记退出系统而使他人有机可乘。程序中,使定时器0每50毫秒产生一次中断,因此中断每产生20次为1秒,当秒数为20时(每次有键输入时都执行50毫秒数和秒数清0操作),关闭屏幕,并禁止键盘输入。当定时/计数器工作在定时方式时,定时时间的计算公式为:定时时间=(216 计数初值)定时周期晶振频率为12MHz时,定时/计数器的定时周期为1s,所以定时50ms的定时/计数器初值为:计数初值=216 500004.6 密码输入子程序 当从键盘输入密码时,应当将输入的密码存放,以便用做密码的相关
36、操作(判断,修改和保存等),同时每输入一位密码应相应地在显示器上显示一个“*”号。图4-8是密码输入子程序的流程图。开始N有键输入?扫描键盘Y是数字键?输入的密码长度小于6?将输入的数放入数组在显示器上显示“*”是取消键?输入的密长度大于0?清除数组中的最后一位数清除显示器上的最后一个“*”是确认键?结束YNNNNYYYNY图4-5 密码输入程序流程图输入密码时,当输入的密码位数小于6位的时候,每按下一次数字键,就将此数字存入数组。当输入的密码位数不小于6位时,再次按下数字键,程序就不进行任何处理,继续扫描键盘,此时只有按下确定键或者取消键程序才做出相应反应。取消键的功能是退格。当不小心输错密
37、码时,可以退格将输错的位清除,退格一次密码的位数减一位,同时显示器上的“*”个数也减1。当输入的密码位数变为0时,取消键不再起作用。4.7 报警子程序 报警子程序的原理很简单,即当输入密码错误次数超过规定的最高允许次数时,不断给蜂鸣器脉冲,使其不断发音。同时,由于CPU一直在给蜂鸣器提供脉冲,故无暇处理诸如密码扫描等事件,也就是说,在蜂鸣器报警的同时也屏蔽了键盘的输入。 图4-6学校 报警子程序流程图本次设计中,密码输入错误次数不得高于3次。5 课程设计总结本系统由单片机系统、矩阵键盘、LCD显示和报警系统组成。系统能完成开锁、错误报警,超次锁定、修改用户密码,恢复初始密码基本的密码锁的功能。
38、除上述基本的密码锁功能外,还有声音提示等功能,依据实际的情况还可以添加遥控功能。本系统利用单片机控制,LCD显示,配合蜂鸣器提示,系统成本低廉,功能强大实用。但是在系统调试过程中,还是发现一些问题,系统不稳定情况时有发生,经过反复调试发现下列问题: 按键效果不好,产生较大状况的抖动,使软件消抖不完全;另外一个就是单片机本身不问题,引起系统跑飞或者卡死;还有就是由于电路板制作的原因,线路之间产生干扰,系统发生错误,比如液晶显示错误等等。经过反复调试和修改,最好终于达到一个比较满意的水平。本系统设计还做的不是太人性化,比如说能够加上语音提示和遥控开锁功能,将可能会更加有生命力!6 参考文献1 张天
39、凡. 完全手册-51单片机C语言开发详解M.电子工业出版社,20082 李群芳. 单片微型计算机与接口技术M.北京:电子工业出版社,20083 彭伟 单片机C语言程序设计实训100例基于8051+Proteus仿真M 北京:电子工业出版社 2010.64 张大明. 单片机控制实训指导及综合应用实例M.北京:清华大学出版社, 20045 张齐,朱宁西. 单片机应用系统设计技术基于C51的Proteus仿真 M.北京:化学工业出版社,2004.6 沈光斌,刘冬,姚志成.单片机系统实用抗干扰设计.M.北京:人民邮电出版社,20047 冯育长 .单片机系统设计与实例分析.M.西安:西安电子科技大学出版
40、社,2007 8 晁阳. 单片机MCS-51原理及应用开发教程M.北京:清华大学出版社,2009.9 黄惟公, 邓成中, 王燕. 单片机原理与应用技术M. 西安:西安电子科技大学出版社,200910 张萌, 和湘, 姜斌. 单片机应用系统开发综合实例M. 北京:清华大学出版社,20097 附 录附录一 总电路原理图附录二:电子密码锁的PCB图附录三:电子密码锁的实物图附录四:元器件清单名称型号数量备注单片机AT89S521含双列直插插座电阻10K6电阻2202排阻9x10k1液晶显示器LM16021瓷片电容33pF2电解电容10uF1按键轻触按键18晶振11.0592MHz1单排插针1x84发
41、光二极管2红 绿各一个直流插座1下载口1存储器At24c021三极管1附录五 源程序清单#include#include#include#define uchar unsigned char#define uint unsigned int#define LCDIO P0#define delay4us() _nop_();_nop_();_nop_();_nop_();uchar buffer6=0; sbit sda=P34;sbit scl=P33;sbit beep=P37;sbit relay=P23;sbit huifu=P26;bit flag=0,aa;/用户zi定时溢出标志位
42、uchar DSY_BUFFER16= ;uchar DSY_BUFFER116= ;uchar Userpassword6=0;uchar Mem6=0;sbit rs=P20; sbit rd=P21;sbit lcden=P22;sbit led=P24;sbit led1=P27;uchar code table2=123456;uchar code table=Input your code:;void delayms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay()/短延时,两个机器周期,做总线的延时用;void write_com(uchar com)rs=0;rd=0;lcden=0;P0=com;delayms(3);lcden=1;delayms(3);lcden=0;void write_date(uchar date)rs=1;rd=0;lcden=0;P0=date; delayms(3);lcden=1;delayms(3);lcden=0;void Display_String(uchar *p,uchar com)