宜宾职业技术学院
毕业设计
基于STC89C52的电子密码锁设计
系部电子信息工程系
专业名称班姓学级名号
指导教师
2012年01月05日
基于STC89C52的电子密码锁设计
摘要
该设计是基于STC89C52单片机的电子密码锁,以STC89C52单片机为硬件核心,结合4×4矩阵键盘电路,LCD 显示电路,密码存储电路,开锁电路和声音报警电路等外围电路。利用单片机灵活的编程方法和丰富的I/O端口,该系统能实现密码的输入,清除,密码正确开锁,密码错误报警,用户修改密码等功能。本系统成本低廉,功能实用。
关键词:密码锁;单片机;液晶显示;声音报警
Password motorcycle alarm
Abstract
This paper introduces a design of electronic passward lock which is backed on the SCM of STC89C52. This design uses the SCM of STC89C52as hardware core , combining with other peripheral circuits such as 4×4matrix keyboard interface circuit, passward storage circuit, LCD display circuit, unlock circuit and voice alarm circuit. Using the flexible programming and the rich I/Oport of the SCM, the system can accomplish the following functions:input,clear or compare the password, unclock when the password is correct, alarm when the wrong enter password times is over and the user can change the password. The system cost-effective, functional and practical.
Keywords :Single-Chip Microcomputer; electronic password lock; voice alarm; LCD display
目
1引录言.....................................................................................................................................12总体方案设计........................................................................................................................ 2
2.1方案论证..........................................................................................................................22.2方案选择..........................................................................................................................33硬件设计................................................................................................................................ 4
3.1单片机部分......................................................................................................................43.24×4行列式键盘部分...................................................................................................... 43.3开锁电路..........................................................................................................................53.4AT24C02密码储存电路.................................................................................................53.5声音报警电路..................................................................................................................63.6显示模块部分..................................................................................................................63.6.1显示模块选择.............................................................................................................63.6.2液晶引脚功能说明.....................................................................................................73.7总体设计..........................................................................................................................9
4软件设计...............................................................................................................................11
4.1软件总框图设计............................................................................................................ 114.2蜂鸣器声音提示部分....................................................................................................124.3液晶显示部分................................................................................................................124.4键盘输入部分................................................................................................................124.4.1程序设计内容..........................................................................................................124.4.2按键程序框图..........................................................................................................12
5电路板设计.......................................................................................................................... 14
5.1原理图的绘制................................................................................................................145.2电路板的生成制作........................................................................................................145.2.1电路原理图的设计...................................................................................................145.2.2产生网络表...............................................................................................................155.2.3印制电路板的设计...................................................................................................155.2.4安装...........................................................................................................................15
6安装与调试.......................................................................................................................... 16
6.1系统软件调试................................................................................................................166.2元器件的检测................................................................................................................166.3系统硬件的安装与调试................................................................................................16
设计结论.................................................................................................................................. 18总结与体会.............................................................................................................................. 19
致谢.......................................................................................................................................20参考文献.................................................................................................................................. 21
附录
附录1
附录2
附录3
附录4电路原理图元件清单实物图程序
基于STC89C52的电子密码锁
1引言
随着人们生活水平的提高,电子密码防盗作为防盗卫士的作用日趋重要。电子密码锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。如果采用6位密码,则密码组合可达到10,每增加1位,密码组合就增加10倍。从而提高了密码锁的安全系数。密码锁被广泛应用于生活中。目前市场上普遍所见的电子密码锁的密码很容易被窥探和多次试探,而丢失密码,使密码锁失去其安全性。该电子密码锁利用单片机作为主控核心,单片机(STC89C52)所具有的特殊功能使得电子密码锁的保密性能大大加强,这样就可以有效的防止多次试探密码的可能性。随着单片机和其它智能芯片的进一步开发防盗锁将实现智能化,这将使锁的安全性能大大提高。本系统实现密码一次输入的提示功能,若密码输入不正确将发出“嘀嘀”的报警声,引起他人警觉。若密码输入正确将在LCD 上显示所有密码以及彩灯发光。本系统使用的单片机所具有强大的功能能够实现智能控制用来完成密码的输入、判断和比较从而执行相应的开锁显示或报警等功能。6
2总体方案设计
2.1方案论证
方案一:采用数字电路控制。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS 电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。其原理方框图如图2.1所示。密码修改电路
电源
限
时
报
警键盘输入密码效验开锁电路执行电路报警次数检
验锁定5分钟
电源
VCC
市电供电
路电子切换开关蓄电
池
断电检测
充电电路
图2.1数字密码锁电路方框图
采用数字密码锁电路的好处就是设计简单。用以74LS112双JK 触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
方案二:采用一种是用以STC89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO 端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图2.2所示。
矩阵
键盘
控制输入错误提示电路STC89C52
单片机报警控制电路
AT89S ISP 控制开锁控制电路
串口显示电路指示电路
图2.2单片机控制方案
2.2方案选择
通过比较以上两种方案,方案一的成本高,电路复杂且使用价值很低,产品做成功的概率不高,且不易进行更新升级而被淘汰。方案二与方案一在成本上相差不大,但在功能及其使用价值上相差很大,它结构相对简单易懂,做起相对容易,显然优于方案一。
单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以采用第二种方案。
3硬件设计
3.1单片机部分
主控器件是单片机,STC89C52是一个低功耗、高性能CMOS 8位单片机,片内含4k 字节的可系统编程的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash 程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。
3.24×4行列式键盘部分
采用的4×4的矩阵式键盘,矩阵式键盘是用N 条I/O线作为行线,M 条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M×N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,行列适用于按键输入多的情况。其原理如图3.1所示。
图3.1按键电路图
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要4条行线和4条列线,即可组成具有4×4个按键的键盘。
共计使用按键13个,用4×4组成0-9数字键、ENTER 、BACK 、SET 。当输入密码正确后按下ENTER 按键,进入开锁状态。每一位数字编码采用循环扫描方法,极少出现
乱码现象。
3.3开锁电路
当用户输入的密码正确,单片机输出开锁信号,送到继电器模块,通过继电器的通
断来控制电磁锁的开锁。
图3.2继电器电路图
3.4AT24C02密码储存电路
由于储存器与单片机之间的要传输的数据很少,不存在总线的竞争,因此密码存储器采用AT24C02,他能在掉电的情况下存储数据。AT24C02是一个2K 位串行CMOS E2PROM, 内部含有256个8位字节。该器件通过IIC 总线接口进行操作,有一个专门的写保护功能。AT24C02支持总线数据传送协议IIC ,通过器件地址输入端A0,A1和A2可以实现将最多8个AT24C02器件连接到总线上,串行时钟输入管脚SCL 用于器件所有数据的发送和接收的时钟,双向串行数据/地址管脚SDA 用于器件所有数据的发送或接收。其电路图如图3.3所示:
.
.
. .
图3.3密码存储电路图
3.5声音报警电路
声音报警电路采用蜂鸣器报警。用户输入密码错误,进行报警。报警是通过单片机
的I/O口输出脉冲信号经三极管放大后,控制蜂鸣器发出报警声。其电路图如图3.4所示:
.
.
R
.
图3.4蜂鸣器电路图
3.6显示模块部分3.6.1显示模块选择
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LCD 液晶、液晶显示器。发光管和LCD 液晶比较常用,软硬件都比较简单。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光。因此,液晶显示器画质高且不会闪烁。
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。体积小、重量轻,液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低,主要消耗在其内部的电极和驱动IC 上,耗电量比其它显示器要少得多。LCD1602显示器与单片机连接简单易懂。其连接方式十分简单,只需要10K 滑动变阻器,三极管也可用一般电阻代替,基本上可以满足现在电子设计的亮度要求。3.6.2液晶引脚功能说明
1602LCD 采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示:
表3.11602引脚表
编号12345678
符号VSS VDD VL RS R/WE D0D1
引脚说明电源接地电源正极液晶显示偏
压
数据/命令选
择读/写选择使能信号数据数据
编号[**************]
符号D2D3D4D5D6D7BLA BLK
引脚说明数据数据数据数据数据数据背光源正极背光源负极
第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 端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。
1602液晶模块内部的控制器共有11条控制指令,如表3.2所示:
表3.2控制命令表
序号[1**********]
指令清显示光标返回置输入模式显示开/关控制光标或字符移位置功能置字符发生存贮器地址置数据存贮器地址读忙标志或地址写数CGRAM 或DDRAM )从CGRAM 或DDRAM 读数
RS 0000000001
R/W0000000010
D700000001BF
D60000001
D5000001
D400001DL
D30001S/CN
D2001D R/LF
D101I/DC **
D01*S B **
字符发生存贮器地址显示数据存贮器地址
计数器地址要写的数据内容
1111读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H, 光标复位到地址00H 位置。指令2:光标复位,光标返回到地址00H 。
指令3:光标和显示模式设置。I/D:光标移动方向,高电平右移,低电平左移;S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。D :控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C :控制光标的开与关,高电平表示有光标,低电平表示无光标;B :控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位。S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令。DL :高电平时为4位总线,低电平时为8位总线;N :低电平时为单行显示,高电平时双行显示;F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM 地址设置。指令8:DDRAM 地址设置。
指令9:读忙信号和光标地址。BF :为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。指令11:读数据。3.7总体设计
结合以上各模块,系统硬件设计由单片机(STC89C52)部分、4×4行列式键盘部分、液晶部分、报警器部分、开锁部分、存储部分6个部分所组成。通过对按键的输入,完成产品的工作过程。总体结构模块如图3.5所示。
显示模块
按键模块单片机主控模块
报警模块
开锁模块
存储模块
图3.5总体结构模块
本次设计结构连线简单方便,各大模块连线可以由图3.6电路可看出,单片机小系统工作的条件有时钟电路、复位电路,密码重设电路也仅仅是外部中断(因P3.2INT0为电平的下降沿有效)直连接上拉电阻470欧,既简单又稳定。开锁电路在图中是继电器电路开锁,报警电路是喇叭状的蜂鸣器,密码储存电路是AT24C02电路。
图3.6电路仿真连线图
4软件设计
4.1软件总框图设计
本系统是以STC89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,能实现基本的密码锁功能。本系统程序设计的内容为:①密码的设定,在此程序中密码是固定在程序存储器ROM 中,初始密码为4位。②密码的输入问题:根据事先设计好的密码输入,输入完成后按确认键将会执行相应的功能。
根据设定好的密码,采用4×4行列式键盘实现密码的输入功能,密码输入时显示管显示当前密码数值,当输入密码正确时执行模块彩灯发光,若密码输入不正确则蜂鸣器发出“嘀、嘀”报警声。本系统程序设计由键盘输入部分、液晶显示部分、蜂鸣器报警部分和模拟执行电路组成。如下框图4.1所示。
开始
系统初始化、密码设置
清除密码
输入密码、按键识别
密码比较
正确Y
开锁、液晶显示、铃音提示
液晶显示、报警
终止
图4.1系统流程总框图
4.2蜂鸣器声音提示部分
本系统把P2.4用作蜂鸣器报警的接口,对输入的密码与设定的密码进行比较,若密码正确,单片机直接进入下一个密码输入状态。若密码不正确,蜂鸣器发出“嘀、嘀”报警声,而且显示密码位数停留于原点,以等待密码输入正确。若三次按下仍未正确,则进入报警状态。4.3液晶显示部分
每次单片机在开机时候自动复位,显示在液晶显示器上为“Input password ”。按下“SET ”键可接着进入密码重设状态。单片机里的初始密码为“8888”,按下设置密码按键后,需先输入旧密码,确认后输入两次新密码,密码设置就完成了。
当我们完成密码设置后,系统会自动进入运行状态,其显示为“Input password ”。此时可以进行密码输入,而且输入过程中每位显示都可以清晰可见,按键人员可以清晰地查出当前按至第几位密码,直至密码输入完全正确。4.4键盘输入部分4.4.1程序设计内容
本系统中键盘采用4×4行列式键盘,按键电路如图3.1所示。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU 通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC ,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
4.4.2按键程序框图
在执行密码设置、开锁等功能是使用按键对应的功能。本系统采用矩阵键盘,其程序流程图如图4.2所示。
P1=0xfeP1=0xfb
Y
有键按下吗?
N
延时10ms
Y
Y
真得有键按下吗?
有键按下吗?
N
延时10ms
Y
真得有键按下吗?
N
根据当前状态识别按键
N
根据当前状态识别按键
P1=0xfd
Y
P1=0xf7
Y
有键按下吗
N
延时10ms
Y
真得有键按下吗?
N
根据当前状态识别按键
有键按下吗?
N
延时10ms
Y
真得有键按下吗?
根据当前状态识别按键
回至初始继续扫描
图4.2键盘输入程序框图
5电路板设计
5.1原理图的绘制
在空间足够的情况下,电容都放在底层,电阻都放在表层。原因:既减少了焊接时搞混的可能性,又有利于调试(因为可以将示波器的探头点在电阻的焊盘上,直接点芯片管脚是很危险的(探头容易短接芯片!!!)。
电源要有指示灯:“电阻+LED”关键信号要加测试点。线宽如果没有空间限制即为8~10mils。如果空间紧张,最小线宽要与制版商连系确认。建立PCB 封装时,单位一定要用公制的,即mm ,不能用mils (1/1000英寸)。注意使用泪滴功能。而且,泪滴还可以帮助检查走线是否标准。一定要灵活运用栅格(grid )的设置(同一块板不通的地方可以用不同栅格设置)。
注意事项:(1)电源线和地线尽量加粗; (2)去耦电容尽量与VCC 直接连接设置Specctra 的DO 文件时,首先添加Protect all wires 命令,保护手工布的线不被自动布线器重布。
如果有混合电源层,应该将该层定义为Split/mixedPlane ,在布线之前将其分割,布完线之后,使用Pour Manager 的Plane Connect 进行覆铜将所有的器件管脚设置为热焊盘方式,做法是将Filter 设为Pins ,选中所有的管脚,修改属性,在Thermal 选项前打勾手动布线时把DRC 选项打开,使用动态布线(Dynamic Route )。5.2电路板的生成制作
一般而言,设计电路板最基本的过程可以分为四大步骤:电路原理图的设计、产生网络表、印制电路板的设计、安装。5.2.1电路原理图的设计
电路原理图的设计主要是Protel 99的原理图设计系统(Advanced Schematic )来绘制一张电路原理图。在这一过程中,要充分利用Protel 99所提供的各种原理图绘制工具、各种编译功能,来实现我门的目的,即得到一张正确、精美的电路原理图,电路原理图见附录三。
5.2.2产生网络表
网络表是电路原理图设计(SCH )与印制电路板设计(万用)之间的一座桥梁,它是电路板自动的灵魂。网络表可以从电路原理图中获得,也可以印制电路板中提取出来。5.2.3印制电路板的设计
印制电路板的设计主要是针对Protel 99的另外一个重要部分万用而言的,在这个过程中,我们借助Protel 99提供的强大功能实现电路板的版面设计,完成高难度等工作。5.2.4安装
(1)根据元件清单购买元件。(2)检测元件是否完好可用。
(3)根据功能的大小,结合元器件的安装要求进行放置元器件。
(4)安装焊接步骤可按:电阻-电容-电位器-集成块-外围元件-其他元器件的顺序进行。装配焊接时,按照印制电路图中的元件编号,查对原理图中其规格,型号,审核实物的规格,型号相符合后,将元器件引脚插入印制板的元件孔中,认真焊接。
(5)焊接:首先练习焊接技术以求焊接效果,在焊接过程中,对其元器件进行分析,考虑焊接的时间长短,以免损害元器件。
(6)安装完毕后,应该仔细检查有无错误,或漏焊,以及焊接时造成的短路。若有以上问题应予即时排除。
6安装与调试
6.1系统软件调试
打开“UV4”C语言编程软件,对相应的程序进行保存(必须以.c 为后缀进行保存) 、编译、跟踪执行,检查程序。检查无误后用PROTEUS 仿真软件进行仿真。在编译调试完成后,通过编程器将所编译的正确程序写入到STC89C52单片机中。6.2元器件的检测
将元器件安装(焊接)在万用板上之前,要仔细检查元器件。通过栓查一方面可熟悉器件的规格,型号及结构特点,另一方面应确认元器件质量均完好,以避免人为故障的发生。主要元器件的检查如下。
电阻器:用万用表电阻挡测量电阻器的实际阻值,并与标称值比较是否基本相符。固定电容器:用万用表挡检查小容量有无漏电(用阻挡进行),电解电容器的容量双方正常(用低电阻挡,依据充、放电的情况进行估计)。由于本次采用个人自主设计,对于电容的使用并不是非常多,仅仅是复位电路的小电容,所以在盘查是只需要用万用表检查该电容是否短路,从而可基本上判定该电容的好与坏。
电路板:检查电路板上的铜箔有无毛刺、缺损以及碰线(有些电路版具有边角全部连通的布局,特别是在连线时候要注意这一点,以防止短路)等情况,在焊接时候常常要注意走线的规范化,避免线路跳线过多。由于本次采用的电路版制作,布局需要提前对所有的走线分批量管理,此时的引脚之间不能有走线。若有未腐蚀掉的残余铜箔可用小刀将其刮去。若有断裂处,应用细铜线焊接接通。若地线的铜箔太细,也可用细铜线焊接加粗。而且要注意每次的连接线路要小心检查,以确保步步稳扎稳打,从而大大减少最后的问题出现,避免完成连接后再次重头检查。6.3系统硬件的安装与调试
硬件的安装与调试需要通过焊(焊接); 选(元器件识别,性能测试); 装(硬件的装配); 调(产品的调试); 测(电子仪器测量参数); 校(产品质量检测能力)等方面的工作最终完成产品。
安装:单片机安装要注意引脚顺序及正反问题,一般情况下可以由元件型号位置看出,也可以由单片机和外围电路的连接方式看出(如时钟电路的连接位置能很明显地判
断出单片机的位置摆放)。液晶显示器的顺序也是需要注意的,要理清楚引脚的连接顺序,一般情况下液晶引脚皆有标注,一一对应连接就不容易出错。将每个元件安装到对应的万用板上的位置,安装过程中注意元件的极性、大小及型号。
调试:因为本次设计采用了STC89C52单片机,调式时可以在单片机小系统完成时候简单烧入一个端口赋值程序,然后用万用表检测是否为高(或者低)电平。检测引脚电压是否正常是产品是否成功的关键步骤,一般情况下单片机高电平输出是不能达到预期效果的,但是低电平基本上能满足。电路中有无短路,虚焊。在硬件电路无误情况下,接上+5V电源,小系统就可以正常工作了。
只要单片机小系统正常工作后,就可以从液晶显示器进行调试了。液晶显示器连接简单,只要线路无短路就可以工作了,至于显示的效果,例如明亮程度,对比度等都可以通过电位器调整。
按键部分属于单独模块,可以单独通过检测相互两个引脚是否短路从而排除故障。模拟执行模块拥有彩灯以及蜂鸣器,且执行元器件正极都接高电平,要确保彩灯连接正负是否正确。一般彩灯的长引脚为正极,或者可以通过万用表检测出正负极。对于蜂鸣器是否工作是非常容易查出的,有电流通过就会鸣叫,电流大小会直接影响其鸣叫音量。当然,若无电流通过就不会鸣叫。
设计结论
本系统充分利用了STC89C52系统单片机软、硬件资源,引入了智能化分析功能,提高了系统的可靠性和安全性。该系统主要有以下几点优点:①利用单片机去控制硬件电路,打破传统的专用硬件的形式,使电路更加灵活,更加快捷。②其重复概率仅为十万分之一,有着很高的安全性。③电子密码锁采用单片机作为核心的控制元件具有功能强、性能可靠、电路简单、成本低等特点。④智能密码锁它成功的实现了密码的输入识别和修改、报警、信息显示等功能。但是电子密码锁还具有自身的缺点:①电子锁必须完成机械动作(操作)——电子识别转换和电子控制——机械执行这一系列过程,显然是复杂一些。②执行电路故障概率相对较高,电子器件多,复杂化,必然增加故障机率,加上电子器件怕潮湿,怕强磁电,怕强震动,使它对使用环境有一定要求。③由于采用键盘式密码输入很可能被他人窥探、盗用。所以在设计键盘时必须防他人窥探和试探等外围设本。
尽管电子锁有以上还待解决问题,但它的大密码量和不用钥匙的优点以及众多的识别方式却有极大的诱惑力。它将在以后的发展中被广泛应用。
总结与体会
通过本次毕业设计,我充分认识到了要想成为电子专业的合格的学生,就应该具备良好的心理素质,对待事情要有一丝不苟的态度,要学会充分利用自己所学的知识,遇到自己不懂的要积极地查询各种资料,耐心的翻阅。所谓“行千里路半百里”,自己千万不要半途而废。当自己遇到相当困难的事情,要想方设法地找比自己更懂得人并谦逊请教。现在的社会,需要我们的团结合作,要积极地配合好同学,没有一个人是完人,要学会在别人身上找到优点,遇到他人不对的地方要及时地更正。
在本次设计之中,我看到了当今社会电子产品发展的日新月异,没有一个产品是完美的,要想在电子行业发展下去就要不断学习,不断更新自己的大脑,不断地完善自己的设计。当然,一个设计要符合当时的市场,要有可用性,没有经济效益的产品是没法成活的。
由于个人能力有限,产品元件不可能尽善尽美(其间有焊接技术、元件参数不精准、万用版整体大小的局限性),由于时间等原因致使密码存储电路未能完成等问题,都需要有专业的技术与环境的支持。所以要想在电子行业发展还需要有正规的公司大力支柱。我们作为一个电子专业的学生就要以自己能进入一个理想的公司作为自己的近期目标。
致谢
非常感谢陈世军在我大学的最重要的学习阶段——毕业设计阶段给自己的指导,从最初的定题,到资料收集,到写作、修改,到论文定稿,他给了我耐心的指导和无私的帮助。设计在陈世军老师的精心执导下,顺利完成。在毕业设计这段时间里,由于自己在知识方面的不足,遇到了不少的困难。但在这期间有很多老师帮助了我,我才能继续地进行下去,他们不辞辛苦地用专业的知识指导我们,纠正我们,他们用了休息的时间为我们做更改,帮助我们。我由衷的感谢各位老师。
在此,也要感谢给予我帮助的各位同学,他们一直是我学习追赶的榜样,没有他们在研究课题上开诚布公的讨论和各方面的热情帮助,我也不会得到这么快的进步。
正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,所有的同学都有一个美好的前程!
参考文献
[1]朱月秀. 单片机基础[M].北京:北京航空航天大学出版社,2001.7[2]张伟. 单片机原理及应用[M].北京:机械工业出版社,2002.1
[3]陈光东. 单片微型计算机原理与接口技术[M].武汉:华中理工大学出版社,1999.4[4]徐惠民. 单片微型计算机原理、接口及应用[M].北京:北京邮电大学出版社,2000.10[5]何立民. 单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.7[6]刘卫. 单片微型计算机原理、接口及应用[M].北京:北京邮电大学出版社,2000.3[7]曾鹏超. 单片机原理及应用[M].北京:杭州电子科技大学出版社,1995.10[8]刘静思. 单片机控制原理及应用[M].北京:北京邮电大学出版社,1999.6
[9]韩志军,沈晋源,王振波. 单片机应用系统设计—入门向导与设计实例[M].北京:机械出版社,2005.1
[10]周坚. 单片机C 语言轻松入门[M].北京:北京航空航天大学出版社,2006.7
附录
附录1
电路原理图
附录2元件清单
元件名按键排阻排阻电阻单片机单片机插座LCD 液晶电源插座无极电容喇叭成品杜邦线单排针单排座晶振变压器万用版焊锡丝继电器蜂鸣器电磁锁
规格
12×12×6;4脚RESPACK-8RESPACK-8STC89C5240P 活座1602DC 0.5W 10P;20cm 1×40PIN1×40PINDC 5V 15×30CM
普通DC 6V
单位只1k 10k 4.7k 只只只只30PF 8欧条条条12M 3W 张圈个只把数量[***********]1121
附录3
实物图
附录4程序
#include#include#include#defineuint unsigned int #defineuchar unsigned char #defineEnter 11#defineBack 12#defineSet 16uchar key=17;uchar bs; sbit lcden=P2^2;sbit rw=P2^1;sbit rs=P2^0;sbit open=P2^7;sbit baoj=P2^5;sbit deng=P2^6;char shu=0;long int temp=0;char password_long=4;long int password=8888;char wei; long int input; char wei_1;long int input_1;char wei_2;long int input_2;char set_flag;char Judge;
void delay(uintz) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_dat(uchardat) {
rs=1;rw=0;P0=dat;lcden=0;delay(5);lcden=1;delay(5);lcden=0;delay(5);
}
void {write_com(ucharcom)
rs=0;rw=0;P0=com;lcden=0;delay(5);lcden=1;delay(5);lcden=0;
}delay(5);
void {Input_password()
uchar uchar m;
write_com(0x01);a[]="Inputpassword
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
{void LCD1602_init()
write_com(0x38);delay(5);write_com(0x0c);
}delay(5);
void {Open()
uchar uchar m;
write_com(0x01);a[]="Openthe lock
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Error()
uchar uchar m;
write_com(0x01);a[]="Error
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}"; "; ";
void {Set_password()
uchar uchar m;
write_com(0x01);a[]="Setpassword
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Success()
uchar uchar m; a[]="SetSuccess
write_com(0x01);open=0;
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Original()
uchar uchar m;
write_com(0x01);a[]="InputOriginal
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Right()
uchar uchar m;
write_com(0x01);a[]="Right
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Input_again()
uchar uchar m;
write_com(0x01);a[]="Inputagain
write_com(0x80);for(m=0;m
write_dat(a[m]);write_com(0x80+0x40);
}
void Failure(){uchar m; uchar a[]="SetFailure write_com(0x01);write_com(0x80);for(m=0;m
}
void keyscan(){P1=0xfe;if(P1==0xee){delay(20);if(P1==0xee){while(P1==0xee);key=1;}}if(P1==0xde){delay(20);if(P1==0xde){while(P1==0xde);key=4;
}if(P1==0xbe){delay(20);if(P1==0xbe){while(P1==0xbe);key=7;
}if(P1==0x7e){delay(20);if(P1==0x7e){while(P1==0x7e);}}";
key=0;
}}
P1=0xfd;if(P1==0xed){delay(20);if(P1==0xed){while(P1==0xed);key=2;
}if(P1==0xdd){delay(20);if(P1==0xdd){while(P1==0xdd);key=5;
}if(P1==0xbd){delay(20);if(P1==0xbd){while(P1==0xbd);key=8;
}if(P1==0x7d){delay(20);if(P1==0x7d){while(P1==0x7d);key=Enter;
}}}}}
P1=0xfb;if(P1==0xeb){delay(20);if(P1==0xeb){while(P1==0xeb);
key=3;
}if(P1==0xdb){delay(20);if(P1==0xdb){while(P1==0xdb);key=6;
}if(P1==0xbb){delay(20);if(P1==0xbb){while(P1==0xbb);key=9;
}if(P1==0x7b){delay(20);if(P1==0x7b){while(P1==0x7b);key=Back;}}
P1=0xf7;if(P1==0xe7){delay(20);if(P1==0xe7){while(P1==0xe7);}}if(P1==0xd7){delay(20);if(P1==0xd7){while(P1==0xd7);}}if(P1==0xb7){delay(20);if(P1==0xb7){}}}
}}if(P1==0x77){delay(20);if(P1==0x77){while(P1==0x77);key=16;}}}while(P1==0xb7);
void keyboard(){if(key==1){write_dat('*');temp=temp*10+key;shu++;
}if(key==2){write_dat('*');temp=temp*10+key;shu++;
}if(key==3){write_dat('*');temp=temp*10+key;shu++;
}if(key==4){write_dat('*');temp=temp*10+key;shu++;
}if(key==5){write_dat('*');temp=temp*10+key;shu++;
}key=17;key=17;key=17;key=17;key=17;
if(key==6){write_dat('*');temp=temp*10+key;shu++;
}if(key==7){write_dat('*');temp=temp*10+key;shu++;
}if(key==8){write_dat('*');temp=temp*10+key;shu++;
}if(key==9){write_dat('*');temp=temp*10+key;shu++;
}if(key==0){write_dat('*');temp=temp*10+key;shu++;
}if(key==Enter){if(set_flag==3){input_2=temp; wei_2=shu; if(input_1==input_2&&wei_1==wei_2) {Success();delay(1000);password=input_1;password_long=wei_1;}else {Failure();key=17;key=17;key=17;key=17;key=17;
}else if(set_flag==2){input_1=temp; wei_1=shu; Input_again();set_flag=3;}else if(set_flag==1){input =temp; wei =shu; if(input==password &&wei ==password_long){Right();delay(1000);Set_password();set_flag=2;}else {Error();delay(1000);Original();}}else {input =temp; wei =shu; Judge=1;}temp=0;shu=0;
}if(key==Back){if(shu-1
}write_com(0x80+0x40+shu-1);shu--;
temp=temp/10;
}if(key==Set){set_flag=1;Original();write_com(0x80+0x40);
}key=17;key=17;
}/****************主函数**************/void main(){LCD1602_init();Input_password();write_com(0x80+0x40);open=0;baoj=0;while(1){keyboard();keyscan();if(Judge){if(input==password&&wei==password_long) {Open();open=1;deng=0;delay(1000);delay(1000);open=0;deng=1;Input_password();}else {Error();baoj=1;delay(1000);delay(1000);baoj=0;Input_password();}Judge=0;}}}
宜宾职业技术学院
毕业设计
基于STC89C52的电子密码锁设计
系部电子信息工程系
专业名称班姓学级名号
指导教师
2012年01月05日
基于STC89C52的电子密码锁设计
摘要
该设计是基于STC89C52单片机的电子密码锁,以STC89C52单片机为硬件核心,结合4×4矩阵键盘电路,LCD 显示电路,密码存储电路,开锁电路和声音报警电路等外围电路。利用单片机灵活的编程方法和丰富的I/O端口,该系统能实现密码的输入,清除,密码正确开锁,密码错误报警,用户修改密码等功能。本系统成本低廉,功能实用。
关键词:密码锁;单片机;液晶显示;声音报警
Password motorcycle alarm
Abstract
This paper introduces a design of electronic passward lock which is backed on the SCM of STC89C52. This design uses the SCM of STC89C52as hardware core , combining with other peripheral circuits such as 4×4matrix keyboard interface circuit, passward storage circuit, LCD display circuit, unlock circuit and voice alarm circuit. Using the flexible programming and the rich I/Oport of the SCM, the system can accomplish the following functions:input,clear or compare the password, unclock when the password is correct, alarm when the wrong enter password times is over and the user can change the password. The system cost-effective, functional and practical.
Keywords :Single-Chip Microcomputer; electronic password lock; voice alarm; LCD display
目
1引录言.....................................................................................................................................12总体方案设计........................................................................................................................ 2
2.1方案论证..........................................................................................................................22.2方案选择..........................................................................................................................33硬件设计................................................................................................................................ 4
3.1单片机部分......................................................................................................................43.24×4行列式键盘部分...................................................................................................... 43.3开锁电路..........................................................................................................................53.4AT24C02密码储存电路.................................................................................................53.5声音报警电路..................................................................................................................63.6显示模块部分..................................................................................................................63.6.1显示模块选择.............................................................................................................63.6.2液晶引脚功能说明.....................................................................................................73.7总体设计..........................................................................................................................9
4软件设计...............................................................................................................................11
4.1软件总框图设计............................................................................................................ 114.2蜂鸣器声音提示部分....................................................................................................124.3液晶显示部分................................................................................................................124.4键盘输入部分................................................................................................................124.4.1程序设计内容..........................................................................................................124.4.2按键程序框图..........................................................................................................12
5电路板设计.......................................................................................................................... 14
5.1原理图的绘制................................................................................................................145.2电路板的生成制作........................................................................................................145.2.1电路原理图的设计...................................................................................................145.2.2产生网络表...............................................................................................................155.2.3印制电路板的设计...................................................................................................155.2.4安装...........................................................................................................................15
6安装与调试.......................................................................................................................... 16
6.1系统软件调试................................................................................................................166.2元器件的检测................................................................................................................166.3系统硬件的安装与调试................................................................................................16
设计结论.................................................................................................................................. 18总结与体会.............................................................................................................................. 19
致谢.......................................................................................................................................20参考文献.................................................................................................................................. 21
附录
附录1
附录2
附录3
附录4电路原理图元件清单实物图程序
基于STC89C52的电子密码锁
1引言
随着人们生活水平的提高,电子密码防盗作为防盗卫士的作用日趋重要。电子密码锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。如果采用6位密码,则密码组合可达到10,每增加1位,密码组合就增加10倍。从而提高了密码锁的安全系数。密码锁被广泛应用于生活中。目前市场上普遍所见的电子密码锁的密码很容易被窥探和多次试探,而丢失密码,使密码锁失去其安全性。该电子密码锁利用单片机作为主控核心,单片机(STC89C52)所具有的特殊功能使得电子密码锁的保密性能大大加强,这样就可以有效的防止多次试探密码的可能性。随着单片机和其它智能芯片的进一步开发防盗锁将实现智能化,这将使锁的安全性能大大提高。本系统实现密码一次输入的提示功能,若密码输入不正确将发出“嘀嘀”的报警声,引起他人警觉。若密码输入正确将在LCD 上显示所有密码以及彩灯发光。本系统使用的单片机所具有强大的功能能够实现智能控制用来完成密码的输入、判断和比较从而执行相应的开锁显示或报警等功能。6
2总体方案设计
2.1方案论证
方案一:采用数字电路控制。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS 电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。其原理方框图如图2.1所示。密码修改电路
电源
限
时
报
警键盘输入密码效验开锁电路执行电路报警次数检
验锁定5分钟
电源
VCC
市电供电
路电子切换开关蓄电
池
断电检测
充电电路
图2.1数字密码锁电路方框图
采用数字密码锁电路的好处就是设计简单。用以74LS112双JK 触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
方案二:采用一种是用以STC89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO 端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图2.2所示。
矩阵
键盘
控制输入错误提示电路STC89C52
单片机报警控制电路
AT89S ISP 控制开锁控制电路
串口显示电路指示电路
图2.2单片机控制方案
2.2方案选择
通过比较以上两种方案,方案一的成本高,电路复杂且使用价值很低,产品做成功的概率不高,且不易进行更新升级而被淘汰。方案二与方案一在成本上相差不大,但在功能及其使用价值上相差很大,它结构相对简单易懂,做起相对容易,显然优于方案一。
单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以采用第二种方案。
3硬件设计
3.1单片机部分
主控器件是单片机,STC89C52是一个低功耗、高性能CMOS 8位单片机,片内含4k 字节的可系统编程的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash 程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。
3.24×4行列式键盘部分
采用的4×4的矩阵式键盘,矩阵式键盘是用N 条I/O线作为行线,M 条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M×N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,行列适用于按键输入多的情况。其原理如图3.1所示。
图3.1按键电路图
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要4条行线和4条列线,即可组成具有4×4个按键的键盘。
共计使用按键13个,用4×4组成0-9数字键、ENTER 、BACK 、SET 。当输入密码正确后按下ENTER 按键,进入开锁状态。每一位数字编码采用循环扫描方法,极少出现
乱码现象。
3.3开锁电路
当用户输入的密码正确,单片机输出开锁信号,送到继电器模块,通过继电器的通
断来控制电磁锁的开锁。
图3.2继电器电路图
3.4AT24C02密码储存电路
由于储存器与单片机之间的要传输的数据很少,不存在总线的竞争,因此密码存储器采用AT24C02,他能在掉电的情况下存储数据。AT24C02是一个2K 位串行CMOS E2PROM, 内部含有256个8位字节。该器件通过IIC 总线接口进行操作,有一个专门的写保护功能。AT24C02支持总线数据传送协议IIC ,通过器件地址输入端A0,A1和A2可以实现将最多8个AT24C02器件连接到总线上,串行时钟输入管脚SCL 用于器件所有数据的发送和接收的时钟,双向串行数据/地址管脚SDA 用于器件所有数据的发送或接收。其电路图如图3.3所示:
.
.
. .
图3.3密码存储电路图
3.5声音报警电路
声音报警电路采用蜂鸣器报警。用户输入密码错误,进行报警。报警是通过单片机
的I/O口输出脉冲信号经三极管放大后,控制蜂鸣器发出报警声。其电路图如图3.4所示:
.
.
R
.
图3.4蜂鸣器电路图
3.6显示模块部分3.6.1显示模块选择
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LCD 液晶、液晶显示器。发光管和LCD 液晶比较常用,软硬件都比较简单。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光。因此,液晶显示器画质高且不会闪烁。
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。体积小、重量轻,液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低,主要消耗在其内部的电极和驱动IC 上,耗电量比其它显示器要少得多。LCD1602显示器与单片机连接简单易懂。其连接方式十分简单,只需要10K 滑动变阻器,三极管也可用一般电阻代替,基本上可以满足现在电子设计的亮度要求。3.6.2液晶引脚功能说明
1602LCD 采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示:
表3.11602引脚表
编号12345678
符号VSS VDD VL RS R/WE D0D1
引脚说明电源接地电源正极液晶显示偏
压
数据/命令选
择读/写选择使能信号数据数据
编号[**************]
符号D2D3D4D5D6D7BLA BLK
引脚说明数据数据数据数据数据数据背光源正极背光源负极
第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 端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。
1602液晶模块内部的控制器共有11条控制指令,如表3.2所示:
表3.2控制命令表
序号[1**********]
指令清显示光标返回置输入模式显示开/关控制光标或字符移位置功能置字符发生存贮器地址置数据存贮器地址读忙标志或地址写数CGRAM 或DDRAM )从CGRAM 或DDRAM 读数
RS 0000000001
R/W0000000010
D700000001BF
D60000001
D5000001
D400001DL
D30001S/CN
D2001D R/LF
D101I/DC **
D01*S B **
字符发生存贮器地址显示数据存贮器地址
计数器地址要写的数据内容
1111读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H, 光标复位到地址00H 位置。指令2:光标复位,光标返回到地址00H 。
指令3:光标和显示模式设置。I/D:光标移动方向,高电平右移,低电平左移;S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。D :控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C :控制光标的开与关,高电平表示有光标,低电平表示无光标;B :控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位。S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令。DL :高电平时为4位总线,低电平时为8位总线;N :低电平时为单行显示,高电平时双行显示;F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM 地址设置。指令8:DDRAM 地址设置。
指令9:读忙信号和光标地址。BF :为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。指令11:读数据。3.7总体设计
结合以上各模块,系统硬件设计由单片机(STC89C52)部分、4×4行列式键盘部分、液晶部分、报警器部分、开锁部分、存储部分6个部分所组成。通过对按键的输入,完成产品的工作过程。总体结构模块如图3.5所示。
显示模块
按键模块单片机主控模块
报警模块
开锁模块
存储模块
图3.5总体结构模块
本次设计结构连线简单方便,各大模块连线可以由图3.6电路可看出,单片机小系统工作的条件有时钟电路、复位电路,密码重设电路也仅仅是外部中断(因P3.2INT0为电平的下降沿有效)直连接上拉电阻470欧,既简单又稳定。开锁电路在图中是继电器电路开锁,报警电路是喇叭状的蜂鸣器,密码储存电路是AT24C02电路。
图3.6电路仿真连线图
4软件设计
4.1软件总框图设计
本系统是以STC89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,能实现基本的密码锁功能。本系统程序设计的内容为:①密码的设定,在此程序中密码是固定在程序存储器ROM 中,初始密码为4位。②密码的输入问题:根据事先设计好的密码输入,输入完成后按确认键将会执行相应的功能。
根据设定好的密码,采用4×4行列式键盘实现密码的输入功能,密码输入时显示管显示当前密码数值,当输入密码正确时执行模块彩灯发光,若密码输入不正确则蜂鸣器发出“嘀、嘀”报警声。本系统程序设计由键盘输入部分、液晶显示部分、蜂鸣器报警部分和模拟执行电路组成。如下框图4.1所示。
开始
系统初始化、密码设置
清除密码
输入密码、按键识别
密码比较
正确Y
开锁、液晶显示、铃音提示
液晶显示、报警
终止
图4.1系统流程总框图
4.2蜂鸣器声音提示部分
本系统把P2.4用作蜂鸣器报警的接口,对输入的密码与设定的密码进行比较,若密码正确,单片机直接进入下一个密码输入状态。若密码不正确,蜂鸣器发出“嘀、嘀”报警声,而且显示密码位数停留于原点,以等待密码输入正确。若三次按下仍未正确,则进入报警状态。4.3液晶显示部分
每次单片机在开机时候自动复位,显示在液晶显示器上为“Input password ”。按下“SET ”键可接着进入密码重设状态。单片机里的初始密码为“8888”,按下设置密码按键后,需先输入旧密码,确认后输入两次新密码,密码设置就完成了。
当我们完成密码设置后,系统会自动进入运行状态,其显示为“Input password ”。此时可以进行密码输入,而且输入过程中每位显示都可以清晰可见,按键人员可以清晰地查出当前按至第几位密码,直至密码输入完全正确。4.4键盘输入部分4.4.1程序设计内容
本系统中键盘采用4×4行列式键盘,按键电路如图3.1所示。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU 通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC ,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
4.4.2按键程序框图
在执行密码设置、开锁等功能是使用按键对应的功能。本系统采用矩阵键盘,其程序流程图如图4.2所示。
P1=0xfeP1=0xfb
Y
有键按下吗?
N
延时10ms
Y
Y
真得有键按下吗?
有键按下吗?
N
延时10ms
Y
真得有键按下吗?
N
根据当前状态识别按键
N
根据当前状态识别按键
P1=0xfd
Y
P1=0xf7
Y
有键按下吗
N
延时10ms
Y
真得有键按下吗?
N
根据当前状态识别按键
有键按下吗?
N
延时10ms
Y
真得有键按下吗?
根据当前状态识别按键
回至初始继续扫描
图4.2键盘输入程序框图
5电路板设计
5.1原理图的绘制
在空间足够的情况下,电容都放在底层,电阻都放在表层。原因:既减少了焊接时搞混的可能性,又有利于调试(因为可以将示波器的探头点在电阻的焊盘上,直接点芯片管脚是很危险的(探头容易短接芯片!!!)。
电源要有指示灯:“电阻+LED”关键信号要加测试点。线宽如果没有空间限制即为8~10mils。如果空间紧张,最小线宽要与制版商连系确认。建立PCB 封装时,单位一定要用公制的,即mm ,不能用mils (1/1000英寸)。注意使用泪滴功能。而且,泪滴还可以帮助检查走线是否标准。一定要灵活运用栅格(grid )的设置(同一块板不通的地方可以用不同栅格设置)。
注意事项:(1)电源线和地线尽量加粗; (2)去耦电容尽量与VCC 直接连接设置Specctra 的DO 文件时,首先添加Protect all wires 命令,保护手工布的线不被自动布线器重布。
如果有混合电源层,应该将该层定义为Split/mixedPlane ,在布线之前将其分割,布完线之后,使用Pour Manager 的Plane Connect 进行覆铜将所有的器件管脚设置为热焊盘方式,做法是将Filter 设为Pins ,选中所有的管脚,修改属性,在Thermal 选项前打勾手动布线时把DRC 选项打开,使用动态布线(Dynamic Route )。5.2电路板的生成制作
一般而言,设计电路板最基本的过程可以分为四大步骤:电路原理图的设计、产生网络表、印制电路板的设计、安装。5.2.1电路原理图的设计
电路原理图的设计主要是Protel 99的原理图设计系统(Advanced Schematic )来绘制一张电路原理图。在这一过程中,要充分利用Protel 99所提供的各种原理图绘制工具、各种编译功能,来实现我门的目的,即得到一张正确、精美的电路原理图,电路原理图见附录三。
5.2.2产生网络表
网络表是电路原理图设计(SCH )与印制电路板设计(万用)之间的一座桥梁,它是电路板自动的灵魂。网络表可以从电路原理图中获得,也可以印制电路板中提取出来。5.2.3印制电路板的设计
印制电路板的设计主要是针对Protel 99的另外一个重要部分万用而言的,在这个过程中,我们借助Protel 99提供的强大功能实现电路板的版面设计,完成高难度等工作。5.2.4安装
(1)根据元件清单购买元件。(2)检测元件是否完好可用。
(3)根据功能的大小,结合元器件的安装要求进行放置元器件。
(4)安装焊接步骤可按:电阻-电容-电位器-集成块-外围元件-其他元器件的顺序进行。装配焊接时,按照印制电路图中的元件编号,查对原理图中其规格,型号,审核实物的规格,型号相符合后,将元器件引脚插入印制板的元件孔中,认真焊接。
(5)焊接:首先练习焊接技术以求焊接效果,在焊接过程中,对其元器件进行分析,考虑焊接的时间长短,以免损害元器件。
(6)安装完毕后,应该仔细检查有无错误,或漏焊,以及焊接时造成的短路。若有以上问题应予即时排除。
6安装与调试
6.1系统软件调试
打开“UV4”C语言编程软件,对相应的程序进行保存(必须以.c 为后缀进行保存) 、编译、跟踪执行,检查程序。检查无误后用PROTEUS 仿真软件进行仿真。在编译调试完成后,通过编程器将所编译的正确程序写入到STC89C52单片机中。6.2元器件的检测
将元器件安装(焊接)在万用板上之前,要仔细检查元器件。通过栓查一方面可熟悉器件的规格,型号及结构特点,另一方面应确认元器件质量均完好,以避免人为故障的发生。主要元器件的检查如下。
电阻器:用万用表电阻挡测量电阻器的实际阻值,并与标称值比较是否基本相符。固定电容器:用万用表挡检查小容量有无漏电(用阻挡进行),电解电容器的容量双方正常(用低电阻挡,依据充、放电的情况进行估计)。由于本次采用个人自主设计,对于电容的使用并不是非常多,仅仅是复位电路的小电容,所以在盘查是只需要用万用表检查该电容是否短路,从而可基本上判定该电容的好与坏。
电路板:检查电路板上的铜箔有无毛刺、缺损以及碰线(有些电路版具有边角全部连通的布局,特别是在连线时候要注意这一点,以防止短路)等情况,在焊接时候常常要注意走线的规范化,避免线路跳线过多。由于本次采用的电路版制作,布局需要提前对所有的走线分批量管理,此时的引脚之间不能有走线。若有未腐蚀掉的残余铜箔可用小刀将其刮去。若有断裂处,应用细铜线焊接接通。若地线的铜箔太细,也可用细铜线焊接加粗。而且要注意每次的连接线路要小心检查,以确保步步稳扎稳打,从而大大减少最后的问题出现,避免完成连接后再次重头检查。6.3系统硬件的安装与调试
硬件的安装与调试需要通过焊(焊接); 选(元器件识别,性能测试); 装(硬件的装配); 调(产品的调试); 测(电子仪器测量参数); 校(产品质量检测能力)等方面的工作最终完成产品。
安装:单片机安装要注意引脚顺序及正反问题,一般情况下可以由元件型号位置看出,也可以由单片机和外围电路的连接方式看出(如时钟电路的连接位置能很明显地判
断出单片机的位置摆放)。液晶显示器的顺序也是需要注意的,要理清楚引脚的连接顺序,一般情况下液晶引脚皆有标注,一一对应连接就不容易出错。将每个元件安装到对应的万用板上的位置,安装过程中注意元件的极性、大小及型号。
调试:因为本次设计采用了STC89C52单片机,调式时可以在单片机小系统完成时候简单烧入一个端口赋值程序,然后用万用表检测是否为高(或者低)电平。检测引脚电压是否正常是产品是否成功的关键步骤,一般情况下单片机高电平输出是不能达到预期效果的,但是低电平基本上能满足。电路中有无短路,虚焊。在硬件电路无误情况下,接上+5V电源,小系统就可以正常工作了。
只要单片机小系统正常工作后,就可以从液晶显示器进行调试了。液晶显示器连接简单,只要线路无短路就可以工作了,至于显示的效果,例如明亮程度,对比度等都可以通过电位器调整。
按键部分属于单独模块,可以单独通过检测相互两个引脚是否短路从而排除故障。模拟执行模块拥有彩灯以及蜂鸣器,且执行元器件正极都接高电平,要确保彩灯连接正负是否正确。一般彩灯的长引脚为正极,或者可以通过万用表检测出正负极。对于蜂鸣器是否工作是非常容易查出的,有电流通过就会鸣叫,电流大小会直接影响其鸣叫音量。当然,若无电流通过就不会鸣叫。
设计结论
本系统充分利用了STC89C52系统单片机软、硬件资源,引入了智能化分析功能,提高了系统的可靠性和安全性。该系统主要有以下几点优点:①利用单片机去控制硬件电路,打破传统的专用硬件的形式,使电路更加灵活,更加快捷。②其重复概率仅为十万分之一,有着很高的安全性。③电子密码锁采用单片机作为核心的控制元件具有功能强、性能可靠、电路简单、成本低等特点。④智能密码锁它成功的实现了密码的输入识别和修改、报警、信息显示等功能。但是电子密码锁还具有自身的缺点:①电子锁必须完成机械动作(操作)——电子识别转换和电子控制——机械执行这一系列过程,显然是复杂一些。②执行电路故障概率相对较高,电子器件多,复杂化,必然增加故障机率,加上电子器件怕潮湿,怕强磁电,怕强震动,使它对使用环境有一定要求。③由于采用键盘式密码输入很可能被他人窥探、盗用。所以在设计键盘时必须防他人窥探和试探等外围设本。
尽管电子锁有以上还待解决问题,但它的大密码量和不用钥匙的优点以及众多的识别方式却有极大的诱惑力。它将在以后的发展中被广泛应用。
总结与体会
通过本次毕业设计,我充分认识到了要想成为电子专业的合格的学生,就应该具备良好的心理素质,对待事情要有一丝不苟的态度,要学会充分利用自己所学的知识,遇到自己不懂的要积极地查询各种资料,耐心的翻阅。所谓“行千里路半百里”,自己千万不要半途而废。当自己遇到相当困难的事情,要想方设法地找比自己更懂得人并谦逊请教。现在的社会,需要我们的团结合作,要积极地配合好同学,没有一个人是完人,要学会在别人身上找到优点,遇到他人不对的地方要及时地更正。
在本次设计之中,我看到了当今社会电子产品发展的日新月异,没有一个产品是完美的,要想在电子行业发展下去就要不断学习,不断更新自己的大脑,不断地完善自己的设计。当然,一个设计要符合当时的市场,要有可用性,没有经济效益的产品是没法成活的。
由于个人能力有限,产品元件不可能尽善尽美(其间有焊接技术、元件参数不精准、万用版整体大小的局限性),由于时间等原因致使密码存储电路未能完成等问题,都需要有专业的技术与环境的支持。所以要想在电子行业发展还需要有正规的公司大力支柱。我们作为一个电子专业的学生就要以自己能进入一个理想的公司作为自己的近期目标。
致谢
非常感谢陈世军在我大学的最重要的学习阶段——毕业设计阶段给自己的指导,从最初的定题,到资料收集,到写作、修改,到论文定稿,他给了我耐心的指导和无私的帮助。设计在陈世军老师的精心执导下,顺利完成。在毕业设计这段时间里,由于自己在知识方面的不足,遇到了不少的困难。但在这期间有很多老师帮助了我,我才能继续地进行下去,他们不辞辛苦地用专业的知识指导我们,纠正我们,他们用了休息的时间为我们做更改,帮助我们。我由衷的感谢各位老师。
在此,也要感谢给予我帮助的各位同学,他们一直是我学习追赶的榜样,没有他们在研究课题上开诚布公的讨论和各方面的热情帮助,我也不会得到这么快的进步。
正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,所有的同学都有一个美好的前程!
参考文献
[1]朱月秀. 单片机基础[M].北京:北京航空航天大学出版社,2001.7[2]张伟. 单片机原理及应用[M].北京:机械工业出版社,2002.1
[3]陈光东. 单片微型计算机原理与接口技术[M].武汉:华中理工大学出版社,1999.4[4]徐惠民. 单片微型计算机原理、接口及应用[M].北京:北京邮电大学出版社,2000.10[5]何立民. 单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.7[6]刘卫. 单片微型计算机原理、接口及应用[M].北京:北京邮电大学出版社,2000.3[7]曾鹏超. 单片机原理及应用[M].北京:杭州电子科技大学出版社,1995.10[8]刘静思. 单片机控制原理及应用[M].北京:北京邮电大学出版社,1999.6
[9]韩志军,沈晋源,王振波. 单片机应用系统设计—入门向导与设计实例[M].北京:机械出版社,2005.1
[10]周坚. 单片机C 语言轻松入门[M].北京:北京航空航天大学出版社,2006.7
附录
附录1
电路原理图
附录2元件清单
元件名按键排阻排阻电阻单片机单片机插座LCD 液晶电源插座无极电容喇叭成品杜邦线单排针单排座晶振变压器万用版焊锡丝继电器蜂鸣器电磁锁
规格
12×12×6;4脚RESPACK-8RESPACK-8STC89C5240P 活座1602DC 0.5W 10P;20cm 1×40PIN1×40PINDC 5V 15×30CM
普通DC 6V
单位只1k 10k 4.7k 只只只只30PF 8欧条条条12M 3W 张圈个只把数量[***********]1121
附录3
实物图
附录4程序
#include#include#include#defineuint unsigned int #defineuchar unsigned char #defineEnter 11#defineBack 12#defineSet 16uchar key=17;uchar bs; sbit lcden=P2^2;sbit rw=P2^1;sbit rs=P2^0;sbit open=P2^7;sbit baoj=P2^5;sbit deng=P2^6;char shu=0;long int temp=0;char password_long=4;long int password=8888;char wei; long int input; char wei_1;long int input_1;char wei_2;long int input_2;char set_flag;char Judge;
void delay(uintz) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_dat(uchardat) {
rs=1;rw=0;P0=dat;lcden=0;delay(5);lcden=1;delay(5);lcden=0;delay(5);
}
void {write_com(ucharcom)
rs=0;rw=0;P0=com;lcden=0;delay(5);lcden=1;delay(5);lcden=0;
}delay(5);
void {Input_password()
uchar uchar m;
write_com(0x01);a[]="Inputpassword
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
{void LCD1602_init()
write_com(0x38);delay(5);write_com(0x0c);
}delay(5);
void {Open()
uchar uchar m;
write_com(0x01);a[]="Openthe lock
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Error()
uchar uchar m;
write_com(0x01);a[]="Error
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}"; "; ";
void {Set_password()
uchar uchar m;
write_com(0x01);a[]="Setpassword
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Success()
uchar uchar m; a[]="SetSuccess
write_com(0x01);open=0;
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Original()
uchar uchar m;
write_com(0x01);a[]="InputOriginal
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Right()
uchar uchar m;
write_com(0x01);a[]="Right
write_com(0x80);for(m=0;m
write_com(0x80+0x40);write_dat(a[m]);
}
void {Input_again()
uchar uchar m;
write_com(0x01);a[]="Inputagain
write_com(0x80);for(m=0;m
write_dat(a[m]);write_com(0x80+0x40);
}
void Failure(){uchar m; uchar a[]="SetFailure write_com(0x01);write_com(0x80);for(m=0;m
}
void keyscan(){P1=0xfe;if(P1==0xee){delay(20);if(P1==0xee){while(P1==0xee);key=1;}}if(P1==0xde){delay(20);if(P1==0xde){while(P1==0xde);key=4;
}if(P1==0xbe){delay(20);if(P1==0xbe){while(P1==0xbe);key=7;
}if(P1==0x7e){delay(20);if(P1==0x7e){while(P1==0x7e);}}";
key=0;
}}
P1=0xfd;if(P1==0xed){delay(20);if(P1==0xed){while(P1==0xed);key=2;
}if(P1==0xdd){delay(20);if(P1==0xdd){while(P1==0xdd);key=5;
}if(P1==0xbd){delay(20);if(P1==0xbd){while(P1==0xbd);key=8;
}if(P1==0x7d){delay(20);if(P1==0x7d){while(P1==0x7d);key=Enter;
}}}}}
P1=0xfb;if(P1==0xeb){delay(20);if(P1==0xeb){while(P1==0xeb);
key=3;
}if(P1==0xdb){delay(20);if(P1==0xdb){while(P1==0xdb);key=6;
}if(P1==0xbb){delay(20);if(P1==0xbb){while(P1==0xbb);key=9;
}if(P1==0x7b){delay(20);if(P1==0x7b){while(P1==0x7b);key=Back;}}
P1=0xf7;if(P1==0xe7){delay(20);if(P1==0xe7){while(P1==0xe7);}}if(P1==0xd7){delay(20);if(P1==0xd7){while(P1==0xd7);}}if(P1==0xb7){delay(20);if(P1==0xb7){}}}
}}if(P1==0x77){delay(20);if(P1==0x77){while(P1==0x77);key=16;}}}while(P1==0xb7);
void keyboard(){if(key==1){write_dat('*');temp=temp*10+key;shu++;
}if(key==2){write_dat('*');temp=temp*10+key;shu++;
}if(key==3){write_dat('*');temp=temp*10+key;shu++;
}if(key==4){write_dat('*');temp=temp*10+key;shu++;
}if(key==5){write_dat('*');temp=temp*10+key;shu++;
}key=17;key=17;key=17;key=17;key=17;
if(key==6){write_dat('*');temp=temp*10+key;shu++;
}if(key==7){write_dat('*');temp=temp*10+key;shu++;
}if(key==8){write_dat('*');temp=temp*10+key;shu++;
}if(key==9){write_dat('*');temp=temp*10+key;shu++;
}if(key==0){write_dat('*');temp=temp*10+key;shu++;
}if(key==Enter){if(set_flag==3){input_2=temp; wei_2=shu; if(input_1==input_2&&wei_1==wei_2) {Success();delay(1000);password=input_1;password_long=wei_1;}else {Failure();key=17;key=17;key=17;key=17;key=17;
}else if(set_flag==2){input_1=temp; wei_1=shu; Input_again();set_flag=3;}else if(set_flag==1){input =temp; wei =shu; if(input==password &&wei ==password_long){Right();delay(1000);Set_password();set_flag=2;}else {Error();delay(1000);Original();}}else {input =temp; wei =shu; Judge=1;}temp=0;shu=0;
}if(key==Back){if(shu-1
}write_com(0x80+0x40+shu-1);shu--;
temp=temp/10;
}if(key==Set){set_flag=1;Original();write_com(0x80+0x40);
}key=17;key=17;
}/****************主函数**************/void main(){LCD1602_init();Input_password();write_com(0x80+0x40);open=0;baoj=0;while(1){keyboard();keyscan();if(Judge){if(input==password&&wei==password_long) {Open();open=1;deng=0;delay(1000);delay(1000);open=0;deng=1;Input_password();}else {Error();baoj=1;delay(1000);delay(1000);baoj=0;Input_password();}Judge=0;}}}