您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页基于单片机的电子密码锁设计

基于单片机的电子密码锁设计

来源:华拓科技网
华北科技学院毕业设计(论文)

目录

设计总说明································································I Introduction······························································I 第一章 绪论 .............................................................. 1

1.1 设计背景 ......................................................... 1 1.2 电子密码控制简介 ................................................. 1 1.3 电子密码控制的发展趋势 ........................................... 2 1.4 本设计所要实现目标的简述 ......................................... 2 第二章 控制方案的设计、挑选 .............................................. 3

2.1 采用数字电路控制 ................................................. 3 2.2 采用以单片机为核心的控制方案 ..................................... 4 第三章 主要元器件介绍及I2C总线与串行通信说明 ............................. 5

3.1 主控芯片ATC51 .................................................. 5

3.1.1 ATC51性能简介 ............................................ 5 3.1.2 ATC51引脚功能简介 ........................................ 5 3.2 LCD1602显示器 .................................................... 8

3.2.1 LCD结构及引脚功能 .......................................... 8 3.2.2 LCD显示指令系统 ............................................ 9 3.3 晶体振荡器 ....................................................... 9 3.4 I2C总线说明及M24C01串行EEPROM ................................. 10

3.4.1 I2C总线的硬件结构 ......................................... 10 3.4.2 I2C总线工作原理: ......................................... 11 3.4.3 储备器24C01 ............................................... 13 3.5 串口通信 ........................................................ 14 第四章 系统硬件构成 ..................................................... 16

4.1 设计原理 ........................................................ 16 4.2 键盘输入部分 .................................................... 17

4.2.1 矩阵式键盘的结构与工作原理 ................................ 18

基于单片机的电子密码锁设计

4.3 复位部分 ........................................................ 19 4.4 晶振部分 ........................................................ 20 4.5 显示部分 ........................................................ 20 4.6 开锁部分和报警部分 .............................................. 21 第五章 系统软件构成 ..................................................... 22

5.1 系统软件流程图的设计 ............................................ 22

5.1.1 主程序流程图 .............................................. 22 5.1.2 按键功能流程图 ............................................ 24 5.1.3 设置密码流程图 ............................................ 24 5.1.4 开锁流程图 ................................................ 25 5.2 Proteus和keil开发软件的功能介绍 ................................ 28

5.2.1 Proteus的简介 ............................................. 28 5.2.2 Proteus的实用功能 ......................................... 29 5.2.3 Keil的简介 ................................................ 31 5.2.4 Keil软件的使用方法 ........................................ 32 5.2.5 系统的仿真运行 ............................................ 33

第六章 结论 ............................................................. 36 参考文献 ................................................................ 37 致谢 .................................................................... 38 附录A ................................................................... 39 附录 B .................................................................. 40

华北科技学院毕业设计(论文)

第一章 绪论

1.1 设计背景

安全问题是现代社会各界普遍关注的焦点之一。目前,常见的安全产品有指纹识别系统、IC卡辨识系统以及红外防盗系统等。这些系统一样用于保密要求较高或供个人使用的保险柜。虽然产品的安全性高,但由于其生产成本高,携带、安装及使用不方便等缺点,在一定程度上了这类产品的普及和推广。具有防盗报警功能的电子密码控制系统逐步代替传统的机械式密码控制系统,克服了机械式密码控制的密码量少、安全性能差的缺点,使电子密码控制系统无论在技术上还是在性能上都大大提高了一步。随着大规模集成电路技术的发展,特别是单片机的问世,显现了带微处理器的智能密码控制系统,它除具有传统电子密码控制系统的功能外,还引入了智能化治理、专家分析系统等功能,从而使密码控制系统具有很高的安全性、可靠性,应用日益广泛。基于单片机的电子密码锁使用C51单片机来实现多功能密码模块。这种电路设计具有加密更快速、可靠性更高、成本更低的特点,特别适合用于家庭、办公室、学生宿舍等场所,具有很强的社会推广价值。电子密码锁是由电子电路控制锁体的新型锁具,它采用键盘方式输入开锁密码,操作方便。在科学技术不断发展的今天,电子密码锁具有它特殊的市场,本设计基于单片机,设计了一款简单适用具有开锁和报警功能的电子密码锁。

1.2 电子密码控制简介

电子密码控制是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。电子密码控制不论性能还是安全性都已大大超过了机械类。其特点如下:

1) 保密性好,编码量多,远远大于机械控制。随机开锁成功率几乎为零。

2) 密码可变,用户可以随时更换密码,防止密码被盗,同时也可以避免因人员的更替而使控制的保密性下降。

3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。

第1页 ,共54页

基于单片机的电子密码锁设计

4) 无活动零件,不会磨损,寿命长。

5) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。 6) 电子密码控制系统具有操作简单易行,一学即会的特点。

1.3 电子密码控制的发展趋势

由于电子器件所限,以前开发的电子密码控制系统,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,后来便是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引脚的2051系列单片机来实现的,但密码简单,易破解。随着电子元件的进一步发展,电子密码控制系统也显现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了更为真正的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高显现了越来越多的电子密码控制系统 。

由于数字、字符、图形图像、人体生物特点和时间等要素均可成为电子信息,组合使用这些信息能够使电子防盗密码控制获得更高的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗密码控制系统。组合使用信息也能够使电子防盗密码控制系统获得无穷扩展的可能。可以看出组合使用电子信息是电子密码控制系统今后发展的趋势 。

1.4 本设计所要实现目标的简述

本设计采用单片机为主控芯片,结合外围电路,组成电子密码控制系统,用户想要打开锁,必先通过提供的键盘输入正确的密码才可以,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。密码可以由用户自己修改设定,锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。

第2页 ,共 54页

华北科技学院毕业设计(论文)

第二章 控制方案的设计、挑选

2.1 采用数字电路控制

图2-1 数字密码锁电路控制方案

用以74LS112双JK触发器构成的数字逻辑电路作为密码控制系统的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一样情形下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作 。采用数字电路设计方案时设计虽然简单,但控制的准确性和灵活性差。故不采用。

电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

第3页 ,共54页

基于单片机的电子密码锁设计

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。

2.2 采用以单片机为核心的控制方案

图2-2 单片机控制方案

由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理挑选,以期获得最佳的性价比。一样来说在选取单片机时从下面几个方面考虑:性能、储备器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些还有一些最基本的,比如:中断源的数量和优先级、工作温度范畴、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素 。基于以上因素本设计选用单片机ATC51作为本设计的核心元件,利用单片机警活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码控制功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。当用户需要开锁时,按键盘的数字键0-9输入密码。密码输完后按下开锁键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;同时本设计支持串行通信,可以在PC机上实现远程操控。当用户需要修改密码时,先按下键盘设置键后,如果未开锁

第4页 ,共 54页

华北科技学院毕业设计(论文)

则需要输入原先的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到储备,密码修改成功 。

可以看出方案二的控制灵活,准确性好,且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案。

第三章 主要元器件介绍及IC总线与串行通信说明

2

3.1 主控芯片ATC51

ATC51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes的可反复擦写1000次的Flash只读程序储备器,器件采用ATMEL公司的高密度、非易失性储备技术制造,兼容标准MCS-51指令系统及AT80C51引脚结构,芯片内集成了通用8位处理器和ISP Flash储备单元,功能强大的微型运算机的ATC51可为许多嵌入式控制应用系统提供高性价比的解决方案。

3.1.1 ATC51性能简介

ATC51具有如下特点:40个引脚,4k Bytes Flash片内程序储备器,128 bytes的随机存取数据储备器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2 个16位可编程定时计数器,2个全双工串行通信口,片内时钟振荡器。

3.1.2 ATC51引脚功能简介

芯片引脚图如下图3-1。

第5页 ,共54页

基于单片机的电子密码锁设计

3-1 ATC51芯片引脚图

VCC:电源电压 GND:地

P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口,作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端口。在拜访外部数据储备器或程序储备器时,这组口线分时转换地址(低8位)和数据总线复用,在拜访期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸取或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号校验期间,P1接收低8位地址。

P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。在拜访8位地址的外部数据储备器(如执行:MOVX @Ri 指令)时,P2口线上的内(也即特别功能寄存器,在整个拜访期间不改变。Flash 编程或校验时,P2也接收高位地址和其它控制信号。

P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸取或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端口时,被外部拉低的P3口将用上拉电阻输出电流I。

第6页 ,共 54页

华北科技学院毕业设计(论文)

P3口除了作为一样的I/O口线外,更重要的用途是它的第二功能,P3口的第二功能如下表3-2。

表3-2 P3口的第二功能 端口功能 RXD(P3.0) TXD(P3.1) INT0(P3.2) INT1(P3.3)

第二功能 串行输入口 串行输出口 外中断0 外中断1

端口引脚 T0(P3.4) T1(P3.5) WR(P3.6) RD(P3.7)

第二功能

定时/计数器0外部输入 定时/计数器1外部输入 外部数据储备器写选通 外部数据储备器读选通

RST:复位输入。当振荡工作时,RST引脚显现两个机器周期上高电平将使单片机复位。ALE/PROG:当拜访外部程序储备器或数据储备器时,ALE(地址锁存答应)输出脉冲用于锁存地址的低8位字节。即使不再拜访外部储备器,ALE仍以时钟振荡频率的1/6输出的正脉冲信号,因此它可对外输出时钟或用于定时目地,要注意的是:当拜访外部数据储备器时将跳过一个ALE脉冲。如有必要,可通过对特别功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置禁位后,只有一条MOVX 和MOVC指令ALE才会被激活。此外,该引脚伎被柔弱拉高,单片机执行外部程序时,应设置ALE无效。

PSEN:程序储存答应(PSEN)输出是外部程序储备器的读选通信号,当ATS51由外部程序储备器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当拜访外部数据储备器,高有两次有效的PSEN信号。

EA/VPP:外部拜访答应。欲使CPU拜访外部程序储备器(地址0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序储备器中的指令。Flash储备器编程时,该引脚加上+12V的编程电压VPP。

XTAL1:振荡器反相放大器及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。

第7页 ,共54页

基于单片机的电子密码锁设计

3.2 LCD1602显示器

现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调剂和背光功能。 3.2.1 LCD结构及引脚功能

LCD1602液晶屏外观示意图如下图3-3

图3-3 LCD液晶显示屏

LCD液晶屏引脚功能如下表3-4所列: 表3-4 LCD引脚功能表 编号 符号 引脚说明 1 2 3 4 5 6 7 8

VSS VDD VEE RS R/W E D0 D1

电源地 电源正极

液晶显示偏压信号

编号 符号 引脚说明 9 10 11

D2 D3 D4 D5 D6 D7

Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O

数据/命令挑选端 12 读写挑选端(H/L) 13 使能信号 Data I/O Data I/O

14

LCD1602的引脚中,其中VSS为地电源,VDD接5V,VEE为液晶显示器对比度调剂端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过1个10K的电位器调整对比度。

第8页 ,共 54页

华北科技学院毕业设计(论文)

RS为寄存器挑选,高电平时挑选数据寄存器、低电平时挑选指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。E端为使能端。D0~D7为8位双向数据线。

3.2.2 LCD显示指令系统

通过RS、RW、E这三个控制脚不同的状态的配合,对LCD1602的操作主要有两类四种。两类分为读和写,四种是读状态,写指令,读数据,写数据。下面是具体的四种状态:

1) 读状态, 输入:RS=L,RW=H,E=H。输出:D0~D7=状态字。 2) 写指令, 输入:RS=L,RW=L,D0-D7=指令,E=高脉冲。输出:无。 3) 读数据,输入:RS=H,RW=H,E=H。输出:D0~D7=数据。 4) 写数据,输入:RS=H,RW=L,D0~D7=数据,E=高脉冲。输出:无。 了解这四种状态就可以对LCD1602进行操作了。

3.3 晶体振荡器

晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。以声卡为例,要实现对模拟信号44.1kHz或48kHz的采样,频率发生器就必须提供一个44.1kHz或48kHz的时钟频率。如果需要对这两种音频同时支持的话,声卡就需要有两颗晶振。但是现在的娱乐级声卡为了降低成本,通常都采用SCR将输出的采样频率固定在48kHz,但是SRC会对音质带来损害,而且现在的娱乐级声卡都没有很好地解决这个问题。现在应用最广泛的是石英晶体振荡器。

石英晶体振荡器是一种高精度和高稳固度的振荡器,石英晶体振荡器也称石英晶体谐振器,它用来稳固频率和挑选频率,是一种可以取代LC谐振回路的晶体谐振元件。石英晶体振荡器广泛地应用在电视机、影碟机、录像机、无线通讯设备、电子钟表、单片机、数字仪器外表等电子设备中。为数据处理设备产生时钟信号和为特定系统提供基准信号。在单片机中为其提供时钟频率。

石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片(简称为晶片,它可以是正方形、矩形或圆形等),在它的两个对应面上涂敷上银层用作电极使用,在

第9页 ,共54页

基于单片机的电子密码锁设计

每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一样用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。只要在晶体振子板极上施加交变电压,就会使晶片产生气械变形振动,此现象即所谓逆压电效应。当外加电压频率等于晶体谐振器的固有频率时,就会发生压电谐振,从而导致机械变形的振幅突然增大。

本设计中采用11.0592MHZ做系统的外部晶振,挑选的原因在后面串口通信的时候会具体说明。电容取值为22pF。

3.4 I2C总线说明及M24C01串行EEPROM

I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行

总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器治理中使用,其中包括单个组件状态的通信。例如治理员可对各个组件进行查询,以治理系统的配置或把握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了治理。

3.4.1 IC总线的硬件结构

I2C串行总线一样有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

为了避免总线信号的纷乱,要求各设备连接到总线的输出端时必须是开漏输出或集电极开路输出。设备上的串行数据线SDA接口电路应该是双向的,输出电路用于向总线上发送数据,输入电路用于接收总线上的数据。而串行时钟线也应是双向的,作为控制总线数据传送的主机,一方面要通过SCL输出电路发送时钟信号,另一方面还要检测总线上的SCL电平,以决定什么时候发送下一个时钟脉冲电平;作为接受主机命令的从机,要按总线上的SCL信号发出或接收SDA上的信号,也可以向SCL线发出低电平信号以延长总线时钟信号周期。总线闲暇时,因各设备都是开漏输出,上拉电阻RP使SDA和SCL线都保持高电平。任一设备输出的低电平都将使相应的总线信号线变低,也就是说:各设备的SDA是“与”关系,SCL也是“与”关系。

2

第10页 ,共 54页

华北科技学院毕业设计(论文)

总线对设备接口电路的制造工艺和电平都没有特别的要求(NMOS、CMOS都可以兼容)。在I2C总线上的数据传送率可高达每秒十万位,高速方式时在每秒四十万位以上。另外,总线上答应连接的设备数以其电容量不超过400pF为限。

总线的运行(数据传输)由主机控制。所谓主机是指启动数据的传送(发出启动信号)、发出时钟信号以及传送终止时发出停止信号的设备,通常主机都是微处理器。被主机寻访的设备称为从机。为了进行通讯,每个接到I2C总线的设备都有一个唯独的地址,以便于主机寻访。主机和从机的数据传送,可以由主机发送数据到从机,也可以由从机发到主机。凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。

I2C总线上答应连接多个微处理器以及各种外围设备,如储备器、LED及LCD驱动器、A/D及D/A转换器等。为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制,各微处理器应该在总线闲暇时发送启动数据,为了妥善解决多台微处理器同时发送启动数据的传送(总线控制权)冲突,以及决定由哪一台微处理器控制总线的问题,I2C总线答应连接不同传送速率的设备。多台设备之间时钟信号的同步过程称为同步化。 3.4.2 I2C总线工作原理:

1.总线的构成及信号类型:

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯独的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此,互不相关。

I2C总线在传送数据过程有三种类型信号, 它们分别是:开始信号、终止信号和应答信号。

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 终止信号:SCL为高电平时,SDA由低电平向高电平跳变,终止传送数据。

第11页 ,共54页

基于单片机的电子密码锁设计

SDA SCL 开始

终止

图3-5开始、终止信号图

应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情形作出是否连续传递信号的判定。若未收到应答信号,由判定为受控单元显现故障。

2.总线基本操作:

I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。

控制字节:在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一样应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。

写操作:写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。

读操作:读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了终止读操作,主机必须在第9个周期时发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。

在I2C总线的应用中应注意的事项总结为以下几点 : a)严格按照时序图的要求进行操作,

b)若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。

第12页 ,共 54页

华北科技学院毕业设计(论文)

c)程序中为配合相应的传输速率,在对口线操作的指令后可用NOP指令加一定的延时。

d)为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),或者在EEPROM内部没有用的空间写入标志字,每次上电时或复位时做一次检测,判定EEPROM是否被意外改写。

3.添加:I2C 总线:

在现代电子系统中,有为数众多的IC 需要进行相互之间以及与外界的通信。为了提供硬件的效率和简化电路的设计,PHILIPS 开发了一种用于内部IC 控制的简单的双向两线串行总线IC(inter IC 总线)。IC 总线支持任何一种IC 制造工艺,并且PHILIPS 和其他厂商提供了种类非常丰富的I2C 兼容芯片。作为一个专利的控制总线,I2C 已经成为世界性的工业标准。

每个I2C 器件都有一个唯独的地址,而且可以是单接收的器件(例如:LCD 驱动器)或者可以接收也可以发送的器件(例如:储备器)。发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。I2C 是一个多主总线,即它可以由多个连接的器件控制。

早期的I2C 总线数据传输速率最高为100Kbits/s,采用7 位寻址。但是由于数据传输速率和应用功能的迅速增加,I2C 总线也增强为快速模式(400Kbits/s)和10 位寻址以满足更高速度和更大寻址空间的需求。I2C 总线始终和先进技术保持同步,但仍旧保持其向下兼容性。并且最近还增加了高速模式,其速度可达3.4Mbits/s。它使得I2C 总线能够支持现有以及将来的高速串行传输应用,例如EEPROM 和Flash 储备器。 3.4.3 储备器24C01

在叙述了I2C总线后,接下来将是I2C总线在串行EEPROM中的具体应用。M24C01是一个128字节的串行CMOS EEPROM,用在本设计里面内存空间足够了。具体有如下特性:

内建128x8储备序列 2线制串行接口 双向数据传送协议

100kHz(1.8V,2.5V,2.7V) 和400kHz(5V)兼容 写同步时钟(最大10ms)

第13页 ,共54页

2

2

基于单片机的电子密码锁设计

高可靠性

极限:1M写时钟周期 数据储存:100年

不断推进的芯片等级扩大了设备的可用温度范畴 M24CO1的管脚示意图如下图3-6

图3-6M24CO1

在图中可以看到第7引脚为写保护引脚。如果其连接到Vcc,所有的内容都被写保护只能读;当其连接到Vss或者悬空,答应器件进行正常的读/写操作。本实验中第7引脚接地,以便24C01可以被写入。

第5引脚SDA为串行数据/地址引脚。24C01的双向串行数据/地址引脚用于器件所有的数据的发送和接收。SDA是一个开漏输出引脚,可与其他开漏输出或者集电极开路输出进行线或。

第6引脚SCL为24C01串行时钟输入引脚,用于产生数据发送或接收的时钟,这是一个输入引脚。

在实际连线中还需记得连接上拉电阻。 下面再简要描述一下其工作方式: 1. 写操作: 字节写和页写

2. 读操作: 当前地址读,指定地址读,连续读

3.5 串口通信

目前RS-232是PC与通信工业中应用最广泛的一种串行接口,其中RS代表举荐标准,232是标识号。RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。RS-232采取不平稳传输方式,即单端通信。单片机之间的串口通信,当传输距离在1.5-15

第14页 ,共 54页

华北科技学院毕业设计(论文)

米之间时,可以采用RS-232通讯协议进行数据传输,基于RS-232电气特性的,只能实现一点对一点通信(既单机通信)。

本设计的一部分为C51单片机与PC串口间通讯,实现了单片机与PC机之间的远程通信。设计分发送和接收两大模块,发送部分通过硬件电路的引用。其中包括RS-232接口电路、MAX232接口电路,引用相应的管脚相连,并将相应的软件程序转入电路中,即可运行。当电路是相对时,可直接调速电路参数值,其影响和干扰就小。在满足发射和接收模块的要求后可单独对控制进行调整,程序的编入,接收部分相应的结果即以实现,因此实现了PC机对远端单片机的控制。

当C51与PC机通过RS-232标准总线串行通信时,由于RS-232信号电平与C51单片机信号电平不一致,因此,必须进行信号电平转换。其常用的方法有两种,一种是采用运算放大器、晶体管、光电隔离器等器件组成的电路来实现,另一种是采用专门集成芯片来实现。本设计中则是以MAX232集成芯片来实现的。具体的连线方法如下图。

图3-7 MAX232芯片和COM口

关于串行通信的基础知识在这里就不赘述了。这里主要补充一下波特率的设置,这在晶振那里有提到。

在串行通信中,收发双方对发送或接收数据的波特率有一个约定。通信双方波特率必须相同方可通信。51单片机串行通信有四种方式,方式0和方式2的波特率是固定不变的,方式1和方式3的波特率可以变化,通常由定时器T1(或者T2)的溢出率决定。

在这里我们并不需要根据那一系列公式慢慢运算,因为下表给我们列出了常用的波特率。

第15页 ,共54页

基于单片机的电子密码锁设计

表3-8常用的波特率 串行口工作方式 方式0 方式2 波特率 晶振频率 SMOD 定时器T1 C/T X 1 1 1 0 0 0 0 0 0 0 X X 0 0 0 0 0 0 0 0 0 方式 X X 2 2 2 2 2 2 2 2 1 时间常数 X X FFH FDH FDH FAH F4H E8H 1DH 27H FEEBH (Kb/s) (MHz) 1000(最大) 12 375 12 12 11.0592 11.0592 11.0592 11.0592 11.0592 11.986 6 12 方式1、3 62.5 19.2 9.6 4.8 方式1、3 2.4 1.2 0.1375 0.110 0.110 由图中可知当挑选波特率为9600bps时,对应的晶振为11.0592MHz,此时T1工作在方式2,串口为工作方式1。

第四章 系统硬件构成

4.1 设计原理

本设计主要由单片机、矩阵键盘、液晶显示器和密码储备等部分组成。其中矩阵

键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己储存的密码进行对比,从而判定密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。

第16页 ,共 54页

华北科技学院毕业设计(论文)

本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、复位部分、晶振部分、显示部分、报警部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。

在确定了选用什么型号的单片机后,就要确定外围电路,其外围电路包括键盘输入部分、复位部分、晶振部分、显示部分、报警部分组成,元器件的构成在第三章已有介绍。根据实际情形具体为:键盘输入部分挑选4*4矩阵键盘来实现密码的输入和按键功能的实现,显示部分挑选字符型液晶屏LCD1602可以更好的显示提示信息,报警部分为蜂鸣器,密码储备则挑选M24C01,内存较小在这里比较合适,锁的开合则通过电磁继电器闭合和开启来实现。

其具体原理框图如图4-1所示,一目了然。 之后则具体介绍各个部分。

键盘输入 电源输入 显示电路 报警电路 复位电路 ATC51 晶振电路 开锁电路

4-1 电子密码锁原理框图

4.2 键盘输入部分

由于本设计所用到的按键数量较多而不适合用按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置。

第17页 ,共54页

基于单片机的电子密码锁设计

4.2.1 矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如下图4-2所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P2口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘明显比直接法要复杂一些,识别也要复杂一些,图中,每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。

图4-2 矩阵键盘

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序第一执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。

这里仅介绍一下矩阵式键盘的按键识别方法 :行扫描法。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

第18页 ,共 54页

华北科技学院毕业设计(论文)

1)判定键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2)判定闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

3)为了保证键每闭合一次CPU仅作一次处理,必须排除按键开释时的抖动。

4.3 复位部分

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序储备器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情形挑选如图4-3所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬时,电容C3上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐步下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C3足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R2放电。当电容C3放电终止后,RST端的电位由R2与R3分压比决定。由于R2<第19页 ,共54页

基于单片机的电子密码锁设计

图4-3复位电路

4.4 晶振部分

ATC51引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图4-4所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范畴在0~33MHz之间,电容C1、C2取值范畴在5~30pF之间。根据实际情形,本设计中用11.0592MHZ做系统的外部晶振。电容取值为22pF。

图4-4 晶振电路

4.5 显示部分

为了提高密码锁的密码显示成效能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。在系统初始化化后LCD会显示“Welcome”当需要对密码锁进

第20页 ,共 54页

华北科技学院毕业设计(论文)

行开锁时,按下键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个“*”字符,输入多少位就显示多少个字符。当密码输入完成时,按下开锁键,如果输入的密码正确的话, LCD上显示“Success”,单片机接电磁继电器引角会输出低电平,使三极管导通,电磁继电器吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“Error,Have try ”,引脚输出的是高电平,电子密码锁不能被打开。通过LCD显示屏,可以清楚的判定出密码锁所处的状态 。

关于LCD1602的图示在第三章介绍元器件的时候已经附上,这里不再重复。

4.6 开锁部分和报警部分

开锁部分由电磁继电器组成,当密码输入正确时,单片机的引脚为低电平,三极管导通使电磁继电器的开关由吸合变为断开,即开锁过程。当密码输入错误时,单片机的引脚为高电平,三极管断开使得电磁继电器的开关连续保持原始吸合状态,即闭锁的状态。由于本设计的时用于安全性较高的方面,比如保险箱的用锁,所以在断电时依然会坚持初始锁存的状态。因为考虑到安全性和合理性,在其他场合断电的状态还是存在一定的矛盾之处,如用于开门锁,如果断电常开,则是间接帮助了歹徒偷盗,而若是断电常闭,则又有可能误了主人自己的事。这时候,可以借助于在系统中连接备用电源来补偿缺陷,但就本系统的设计,还是断电锁存更为合理。

报警部分由外接蜂鸣器组成,当密码输入错误满三次时,单片机的引脚为低电平,三极管导通蜂鸣器发出噪鸣声报警。

关于开锁部分和报警部分的示意图如下,见图4-5:

第21页 ,共54页

基于单片机的电子密码锁设计

图4-5 开锁部分和报警部分

第五章 系统软件构成

5.1 系统软件流程图的设计

本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序、串行通信程序等组成。这里简要介绍一下主程序流程图、按键功能流程图、密码设置流程图和开锁流程图。

5.1.1 主程序流程图

如图5-1所示为主程序流程图,接上电源,程序进行初始化设置,调用EEPROM的密码,这些在流程图中并没有展现,所以在这里做一下说明。接下来是主要流程:当LCD上面显示“Welcome”的欢迎界面的时候可以在键盘上输入密码,输入完成之后按下开锁键,程序会匹配输入密码是否正确,若正确,则开锁,若错误,则错误次数加1,输入完成若错误,可以连续输入密码,连续错误三次则转入报警电路。当锁打开之后,按

第22页 ,共 54页

华北科技学院毕业设计(论文)

设置键可以修改密码,前提是已经将锁打开了,输入新密码之后,按确定键则密码设置成功。主程序流程图将整个系统的工作过程表现的清楚明了。

目前的这个主程序流程图还算简单,其实这当然也是很多个方案比对之后才决定的,要实现怎么样的功能,怎么样去实现,从程序到硬件连线都需要考虑进去。

但是由于自己的能力有限,在裁决了多个方案之后,自己还是挑选了稍微简单的方案,流程图也改简单了,就是为了能最终仿真出来。

软件流程图是程序设计的基础,有了它才能达到事半功倍的成效,程序编写才能更合理,所以清楚简明的流程图出现是非常必要的。

最重要的主程序流程图如下:

图5-1 主程序流程图

第23页 ,共54页

基于单片机的电子密码锁设计

5.1.2 按键功能流程图

如图5-2为按键功能流程图,在按键当中,有与开锁、清屏、设置、确认的程序相对应的按键,并按顺序与输入的键值相比较,当键值吻合时,进入密码程序,在下图的流程图中,只是列举了主要按键功能,还有其他的如关锁功能在这里省略了,意思是一样的。同时这个子程序流程图只是反映了大体的过程,具体的功能实现还是得跟着要求在程序里面实现,比如密码设置程序是嵌套在开锁成功程序之中的,但是在流程图的绘制上就不太好绘制了,这里是一点缺陷,所以在图中特别说明了一下,简化了绘图。

图5-2 按键功能子程序

5.1.3 设置密码流程图

第24页 ,共 54页

华北科技学院毕业设计(论文)

如下图5-3,当按下设置键后进入密码设置界面,此时需要保证锁已打开,如果没有打开,则先需要输入原密码,之后输入新密码按确认键,则密码修改成功。设置密码部分是本系统的一大亮点,这样可以避免因旧密码的泄露而导致系统的安全隐患,只需要及时的修改新的密码即可。

图5-3 设置密码子程序流程图 5.1.4 开锁流程图

本系统的关键之处归根究底当然还是一个“锁”字,一切的一切都是为了安全开锁,所以开锁子程序虽然简单,但我认为却是最不可忽视的一部分。

通过流程图的演示,可以一目了然的给读者出现系统的开锁工作过程,这也是流程图的重要性。

第25页 ,共54页

基于单片机的电子密码锁设计

如图5-4为开锁流程图,初始化后显示“Welcome!”,此时输入密码,再按开锁键,如果输入正确,则开锁成功,锁打开。如果输入错误,则连续重复上述过程,当错误次数累计达到三次,则执行报警程序。

图5-4 开锁子程序流程图

下面附上开锁子程序以便更好地懂得,同时也算是做个说明,具体的程序见附录,按键扫描那段程序也很杰出的。

case 10: //S10为开锁键,输入密码之后 按下此键起确认作用,然后比对输入密码是否正确来决定是否开锁。 for(k=0;k<6;k++) {

if(buffer[k]==Userpassword[k]) flag=1; else

第26页 ,共 54页

华北科技学院毕业设计(论文)

flag=0; }

if (flag==1) { flag=0; i=0; lock=0;

clear_password();

Display_String(\"Success \IS_valid_user = 1; j=0; } else { j++; lock=1;

clear_password();

Display_String(\"Error!Have try \write_com(0xcf); write_date(0x30+j); IS_valid_user=0; if(j==3) {

Display_String(\"Alarm! \j=0; beep=0; } } i=0; break;

第27页 ,共54页

基于单片机的电子密码锁设计

5.2 Proteus和keil开发软件的功能介绍

5.2.1 Proteus的简介

在本设计中我主要是采用了Proteus和Keil这两款软件,而并没有使用之前开题报告中说的protel,主要是因为开展设计之后发觉Proteus不仅可以画硬件原理图和PCB板还可以和Keil联合进行系统的仿真。还有一方面自然是protel软件的系统兼容问题。综合考虑,挑选了这两款软件来完成我的设计内容。

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯独将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并连续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。 该软件具有如下与本设计相关的特点: 1. 提供了多种虚拟元器件,调试非常方便。

2. 提供软件调试功能,同时支持第三方的软件编译和调试环境,如Keil等软件。 3. 具有强大的原理图绘制功能。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情形,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情形。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和储备 器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验。从某种意义上讲,是补偿了。实验和工程应用脱节的矛盾和现象。同时,当硬件调试成功后,利用Proteus ARES软件,很容易获得其PCB图,为今后的制造提供了方便。

第28页 ,共 54页

华北科技学院毕业设计(论文)

5.2.2 Proteus的实用功能 1. 智能原理图设计(ISIS)

ISIS是Proteus系统的中心,它远不仅是一个图表库。它是具有控制原理图画图的外观的超强的设计环境。无论用户的要求是快速实现复杂设计的仿真以及PCB设计,还是设计精美的原理图以供出版,ISIS都可以很好的完成。

ISIS提供给用户图形外观包括线宽、填充类型、字符等的全部控制,使用户能够生成如杂志上看到一样精美的原理图,远胜过CAD软件绘制出的稀薄的线条。画完图可以以图形文件输出,或者拷贝到剪切板以便其他文件使用。这就使得ISIS成为制作技术文件,学术论文,项目报告的理想工具,也是PCB设计的一个杰出的前端。画图的外形由风格模板定义。此外,此方案答应用户定制元件库提供的库部件的外观。

绘制原理图:绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图编辑窗口的操作是不同于常用的WINDOWS应用程序的,正确的操作是:用左键放置元件;右键挑选元件;双击右键删除元件;右键拖选多个元件;先右键后左键编辑元件属性;先右键后左键拖动元件;连线用左键,删除用右键;改连接线:先右击连线,再左键拖动;中键放缩原理图。

同时,ISIS在用于绘制原理图时还具有如下的特点:

1)丰富的器件库:超过27000种元器件,可方便地创建新元件。2)智能的器件搜索:通过模糊搜索可以快速定位所需要的器件。

以上亮点是至关重要的,正因为如此,在画硬件原理图时元件挑选方面才并没有遇到太多的困难,虽然有些元件在软件中的标号名称和其实际名称有一些出入,但是通过查找相关资料还是可以很容易的找到的。

3)智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间。支持总线结构:使用总线器件和总线布线使电路设计简明清楚。可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。

第三点也同样重要,总线的使用使得原理图显得更加的简洁和明了,而可以生成BMP的图纸,则使得最后的A0大图可以更清楚,相比截图高明很多。 2. 特殊的仿真功能

第29页 ,共54页

基于单片机的电子密码锁设计

支持主流的CPU类型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU类型随着版本升级还在连续增加,如即将支持CORTEX、DSP处理器。

支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信。

实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真。

编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带8051、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试。

Proteus的仿真功能是特别重要的一个模块,在Proteus里面实现软件仿真之后可以为硬件调试减去许多的调试误区,这是非常实用的一部分。 3. 实用的PCB设计平台

原理图到PCB的快速通道: 原理图设计完成后,一键便可进入ARES的PCB设计环境,实现从概念到产品的完整设计。

先进的自动布局/布线功能:支持器件的自动/人工布局;支持无网格自动布线或人工布线;支持引脚交换/门交换功能使PCB设计更为合理。

完整的PCB设计功能:最多可设计16个铜箔层,2个丝印层,4个机械层(含板边),灵活的布线策略供用户设置,自动设计规则检查,3D 可视化预览。

由于它的这一项功能更是彻底坚定了我用之代替Protel的决心,这样在制版的时候也方便了很多。

在制版的过程中也遇到了一些问题,但是网络真的是一个好东西,大家一起来讨论显现的问题,在论坛上前辈的印记可以很好的帮助我,比如在加载网络表之前需要对元件进行封装,大部分元件已经有了自己的封装,但是如开关,COM口等必须手动加载,而如何在封装库中找到对应的元件,体会确实是很有用的。之前也没有用Proteus制版过,所以很多操作流程还是需要从头学起,人生就是在不断的学习。但是我在实践中也总结了自己的方法,资料中都是说在加载网络表之后,会自动弹出让你挑选没有封装元件的封装信息。但是我后来发觉在原理图

第30页 ,共 54页

华北科技学院毕业设计(论文)

上就可以修改,右键Packaging Tool可以挑选封装信息,当然具体的挑选还是需要参考前辈的一些体会,这里不予赘述。在Edit Properties里面就可以看到封装信息了。然后储存就可以加载网络表了,只需要点击Tools工具栏下的Netlist to ARES即可,接着就是规划电路板了,这里都比较容易上手,我在这里主要简述一下实践中遇到的一些问题,在元件分布之后,稍作调整,就可以先自动布线了,但是我当时却遇到了问题,有提示栏闪出“failed to load layout”,我以为自己哪里又出问题了,后来在论坛上仔细查询才知道是储存形式有问题,不能显现中文,豁然开朗啊,毕竟这些软件都是英文版的,有点偷偷地想到以前安装英文游戏也不能显现中文目录,否则无法运行,改了之后就可以了。自动布线之后就是最后的调整了,元件的分布和连线。由于元件非常多,特别是开关的加入显得特别大,我在布线的时候挑选了双层布线,即用了“Top Copper”和“Bottom Copper”,这样很好地避免了线的交叉。当然美观上的确打了一下折扣,而本设计的PCB图的绘制也只是冰山一隅,更精致复杂的绘制过程还需要我今后更多地去学习和实践。在完成了PCB制版的工作之后,还是将图从中导出,这样画质清楚,方便打印。

在这里插入完成的PCB图一张。

图5-5 PCB制版图

5.2.3 Keil的简介

第31页 ,共54页

基于单片机的电子密码锁设计

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可保护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易懂得。在开发大型软件时更能体现高级语言的优势。Keil C51软件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库治理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境C51编译器、A51汇编器、LIB51库治理器、BL51连接/定位器、OH51目标文件生成器以及 Monitor-51、RTX51实时操作系统。

5.2.4 Keil软件的使用方法

用Keil进行软件仿真开发的主要步骤为:编写源程序并储存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于把握。第一挑选菜单File-New,在源程序编辑器中输入汇编语言或C语言源程序或者直接打开已用其它编辑器编辑好的源程序文档并储存,注意储存时必须在文件名后加上扩展名.asm或.c;然后挑选菜单Project-New Project,建立新工程并储存(储存时无需加扩展名,也可加上扩展名.uv2);工程储存后会立刻弹出一个设备挑选对话框,挑选CPU后点确定返回主界面。这时工程治理窗口的文件页(Files)会显现“Target1”,将其前面+号展开,接着挑选Source Group1,右击鼠标弹出快捷菜单,挑选“Add File to Group ‘Source Group1’”,显现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消逝,而是等待连续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,挑选工程治理窗口的Target1,再挑选Project-Option for Target‘Target1’(或点右键弹出快捷菜单再挑选该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug

第32页 ,共 54页

华北科技学院毕业设计(论文)

选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一样可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。

成功编译/汇编、连接后,挑选菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或挑选Debug-Step)、过程单步执行(按F10或挑选Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发觉程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints等)。在模拟调试程序后,还须通过编程器将.hex目标文件烧写入单片机中才能观察目标样机真实的运行状况。

这些是关于Keil的一些使用介绍,非常详细,在本设计中,差不多都用到了,在产生.hex目标文件后载入Proteus中即可实现仿真。 5.2.5 系统的仿真运行

借助于上面两个软件的联合使用,本系统的仿真运行基本完成,由于串口通信需要下载“串口调试助手”这款软件,这里先不做详细介绍。

下面简单的以仿真图介绍一下系统的工作过程。

1)上电状态,系统初始化之后,LCD显示欢迎字样和锁此时的状态。

图5-6 上电状态

第33页 ,共54页

基于单片机的电子密码锁设计

2)输入六位密码,密码的位数在程序中设定,当密码输入正确显示“Success”,密码错误则显示“Error,have try [i]”,i大于3就会报警了,其实这里只是截取了LCD的显示信息,锁开的状态可以通过LED检测出来,报警时蜂鸣器则会发声,这些在仿真电路里面都有体现。继电器在具体仿真时连接稍微做了变化,但原理图是遵循实际电路设计的。

图5-7 输入密码的过程和状态

3)这就是主要介绍一下功能键了:S10为开锁键,S11为关锁键,S12为设置键,S13为确认键,S14为清屏键,S15为取消键。

第34页 ,共 54页

华北科技学院毕业设计(论文)

关锁键用于紧急情形安全起见,清屏键可以清除屏幕上的输入值,而当某一位输入值输错了,按取消键即可。设置和确定键则是用于密码重置的。

仿真这东西做出来了就不难,做不出来就得好几天甚至好几个星期去弄,从源程序的编写,修改就是一个痛楚的过程,然后编译的时候,由于是自己将各个部分的子程序合拢在一起的,所以有N种error,不过解决各种error和warning的感觉也不错,最后在Keil中生成.hex文件载入Proteus中也不是一帆风顺,一开始,怎么按键,LCD上面就是不显示,但是从管脚上可以看出按键是有成效的。慢慢的解决问题,最后守得云开见月明,这种过程也不错。

4)最后,再贴一张报警的图。

图 5-8 报警示意图

第35页 ,共54页

基于单片机的电子密码锁设计

第六章 结论

经过漫长的设计过程,整个设计终于要做一个终结了。就整体来看,本系统基本实现了电子密码锁的基本功能,但是仔细回忆不难发觉仍旧有很多需要提高的地方,这与个人的能力有一定关系,也与花的时间和精力出现一定的关系。例如串行通信方面,由于涉及到其他软件与单片机通信,在尝试几次未果后,我没有连续深究,只是粗略地了解了一下这部分的程序,这是不应该有的态度,以后一定要杜绝。

时间就是在不紧不慢之中过去了,想起设计刚开始那段时间想好好大干一场的雄心,现在真为自己觉得丢人,从现在起,向前看,让自己活的有意义,最后这段时间虽然抓紧赶工,但是这种紧张感其实让人觉得特别充实,也未尝不好。尝试各种各样的方案,综合运用。

其实在矩阵键盘的排序方面也同样是在选用了很多种的方案之后才最终敲定原理图中的方案,这样的排序与以往的键盘数字键排序不同,可以有效防止被别人根据手型猜出密码,而且这样排序输出的数字正好对应键盘的键值,省去了列方程求键值和数值之间关系的麻烦,是很好的改良。

最后,本设计最终的应用之处在之前也稍微提到,用于断电常锁的地方,但又不会影响个人正常的生活,以便系统能够更安全可靠,比如保险箱。

期望以后可以有机会将本设计连续向更深的层次发展。

第36页 ,共 54页

华北科技学院毕业设计(论文)

参考文献

[1] 杨振江. 单片机原理与实践指导.北京:中国电力出版社,2008.

[2] 周惠潮,孙晓峰.常用电子器件及典型应用[M].北京:电子工业出版社,2007. [3] 高金源,夏洁.运算机控制系统[M].北京:清华大学出版社,2007.

[4] 赵会成,王金.51单片机C程序应用实例详解. 北京:北京航空航天大学出版社,2011.

[5] 张天凡. 完全手册51单片机C语言开发详解. 北京:电子工业出版社,2008. [6] 陈涛. 单片机应用及C51程序设计 . 北京:机械工业出版社,2010. [7] 彭伟. 单片机C语言程序设计实训100例. 北京:电子工业出版社, 2009 [8] 岳学军,陈姗,陆健强. 基于单片机与串行通信的电子密码锁设计.云南农业大学学报,2009,24(1):154~157.

[9] 宋锦. 电子密码锁设计与调试.电脑知识与技术,2011,7(33):8218~8221.

第37页 ,共54页

基于单片机的电子密码锁设计

致谢

我的毕业设计——基于单片机的电子密码锁设计,历时十余周,在张波老师的尽心教诲下,终于顺利完成了。

这次设计的实用性比较高,在设计过程中,我温习了大学四年学到的东西。这都是一些重要的、实用的知识和技术,跟我们自动化专业密切相关。而且,这次设计中我将理论运用于实践,通过亲自动手调试程序和硬件电路,深刻地明白了理论与实践的区别和联系以及用理论指导实践的重要性。唯有将理论知识学扎实,才能在实践中游刃有余,这将使我终身受益。

在我做毕设期间,张老师给我提供了很多帮助。从题目的挑选、资料的搜集到系统的设计和调试的整个过程,张老师都给了我很多的建议与指导。他每隔一段时间都会给我们开会讲解毕设所涉及到的内容与知识,使我们得以顺利完成毕业设计。对我们的毕业设计,张老师倾注了大量的心血和汗水,他严谨的治学态度和踏实的工作精神给我留下了深刻的印象。张老师诲人不倦的精神将使我受益终生。在整个毕业设计过程中我从他身上学到了很多东西。在这里,我要感谢张老师的辛劳、认真指导。是他一直在给我提供帮助,细心地讲解我提出的问题。还有感谢和我一起研究毕业设计的同学们,毕设的完成也少不了他们的协作与帮助。

毕业设计的完成意味着我的大学生涯的终止,经过这四年的磨练,我不再是以前徒有理想的稚气少年了,我已经变得更加坚强和成熟。在今后的日子里,我会谨记母校“自立立人 兴安安国”的校训,以及老师的教诲,在工作中奋发图强。

第38页 ,共 54页

华北科技学院毕业设计(论文)

附录A

第39页 ,共54页

基于单片机的电子密码锁设计

附录 B

#include #include #include #define uchar unsigned char #define uint unsigned int

#define delay4us() _nop_();_nop_();_nop_();_nop_(); uchar buffer[6]={0}; sbit sda=P1^3; sbit scl=P1^2; sbit beep=P1^1; bit flag=0,aa;

uchar DSY_BUFFER[16]=\" \"; uchar DSY_BUFFER1[16]=\" \"; uchar Userpassword[6]={0}; sbit rs=P1^5; sbit rd=P1^6; sbit lcden=P1^7; sbit lock=P1^0;

uchar code table2[]=\"123456\";

uchar code table[]=\"Welcome! \"; void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void delay() { ;

第40页 ,共 54页

//短延时,两个机器周期,做总线的延时用

华北科技学院毕业设计(论文)

; }

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) { uchar i; write_com(com); for(i=0;i<16;i++) {

write_date(p[i]);

第41页 ,共54页

基于单片机的电子密码锁设计

} }

void init_lcd() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); Display_String(table,0x80);

Display_String(\"Lock on! \}

void initcom(void) //初始化串口 {

SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0XFD; TL1=0xFD; REN=1; TR1=1; EA=1; ES=1; }

void comout(uchar sdat)//向串口发送数据 {

SBUF=sdat;//发送数据送缓冲

第42页 ,共 54页

华北科技学院毕业设计(论文)

while(TI==0);//若TI=0表示未传完 需等待 TI=0;//清除发送终止标志 }

void comrec(uchar rdat) {

while(RI==0) RI=0; rdat=SBUF; comout(rdat); return(SBUF); }

void com() {

uchar dat[6];

uchar dat1[]=\"Please Input The Password:\"; uchar dat2[]=\"Welcome!\";

uchar dat3[]=\"ERROR!Please Input The Password Again!\"; uchar fag=1,i,j,k; if(fag==1) SBUF=dat1[i++]; while(!TI);TI=0; if(i==26) { SBUF=13; while(!TI); TI=0; SBUF=10; while(!TI);

第43页 ,共54页

基于单片机的电子密码锁设计

TI=0; i=0; fag=2; } } if(fag==3) {

if(dat[0]=='0'&&dat[1]=='0'&&dat[2]=='0'&&dat[3]=='0'&&dat[5]=='0'&&dat[6]=='0') {

SBUF=dat2[j++]; while(!TI); TI=0; if(j==8) { SBUF=13; while(!TI); TI=0; SBUF=10; while(!TI); TI=0; j=0; fag=0; } } else {

SBUF=dat3[k++]; while(!TI);TI=0; if(k==38) { SBUF=13;

第44页 ,共 54页

华北科技学院毕业设计(论文)

while(!TI); TI=0; SBUF=10; while(!TI); TI=0; k=0;

fag=1;} } } } }

void zd() interrupt 4 { if(fag==2) { RI=0; dat[j++]=SBUF; if(j==4){j=0;fag=3; } }

void start() { sda=1; scl=1; delay4us(); sda=0; delay4us(); scl=0; }

void stop() {

第45页 ,共54页

基于单片机的电子密码锁设计

sda=0; scl=1; delay4us(); sda=1; delay4us(); scl=0; } void init() { sda=1; delay(); scl=1; delay(); } void ack() { sda=0; scl=1; delay4us(); scl=0; sda=1; }

void noack() { sda=1; scl=1; delay4us(); scl=0; sda=0; }

//初始化

第46页 ,共 54页

华北科技学院毕业设计(论文)

uchar recbyte() { uchar i,rd; rd=0x00; sda=1; for(i=0;i<8;i++) { scl=1; rd<<=1; rd|=sda; delay4us(); scl=0; delay4us();

}

scl=0; delay4us(); return rd; }

uchar sendbyte(uchar wd) { uchar i; bit ack0; for(i=0;i<8;i++)

{

sda=(bit)(wd&0x80); _nop_(); _nop_(); scl=1; delay4us(); scl=0; wd<<=1;

}

第47页 ,共54页

基于单片机的电子密码锁设计

delay4us(); sda=1; scl=1; delay4us(); ack0=!sda; scl=0; delay4us(); return ack0; }

uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i; start();

if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; start();

if(!sendbyte(slave+1)) return 0; for(i=0;ibuffer[i]=recbyte(); ack(); }

buffer[n-1]=recbyte(); noack(); stop(); return 1; }

uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i; start();

第48页 ,共 54页

华北科技学院毕业设计(论文)

if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; for(i=0;iif(!sendbyte(buffer[i])) return 0; } stop(); return 1; }

void clear_password() {

uchar i; for(i=0;i<6;i++) {

Userpassword[i]=' '; }

for(i=0;i<16;i++) {

DSY_BUFFER[i]=' '; } }

uchar Keys_Scan() {

uchar temp,keynum; P2=0x0f; delayms(5); temp=P2^0x0f; switch(temp) {

case 1:keynum=0;break; case 2:keynum=1;break; case 4:keynum=2;break;

第49页 ,共54页

基于单片机的电子密码锁设计

case 8:keynum=3;break; break; } P2=0xf0; delayms(5); temp=P2>>4^0x0f; switch(temp) {

case 1:keynum+=0;break; case 2:keynum+=4;break; case 4:keynum+=8;break; case 8:keynum+=12;break; break; }

delayms(600); return keynum; }

void main() {

uchar temp,i=0,j=0,k=0,n; uchar IS_valid_user; beep=1; init();

init_lcd(); initcom(); delayms(5);

aa=Sendstring(0xa0,1,table2,6); delayms(5);

aa=Recstring(0xa0,1,buffer,6); delayms(10); P2=0x0f;

while(1)

第50页 ,共 54页

华北科技学院毕业设计(论文)

{ com(); if(P2!=0x0f) {

temp=Keys_Scan(); switch(temp) {

case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if (i<=5) {

Userpassword[i]=temp; DSY_BUFFER[i]='*';

Display_String(DSY_BUFFER,0xc0); i++; }

break;

case 10: //开锁键 for(k=0;k<6;k++) {

if(buffer[k]==(Userpassword[k]+48))//字符 0的ASCII码值是48 flag=1; else flag=0; }

if (flag==1) { flag=0; i=0; lock=0; clear_password();

Display_String(\"Success \

第51页 ,共54页

基于单片机的电子密码锁设计

IS_valid_user = 1; j=0; } else { j++; lock=1; clear_password();

Display_String(\"Error!Have try write_com(0xcf); write_date(0x30+j); IS_valid_user=0; } i=0; break;

case 11: //关锁键 lock=1; beep=0; clear_password(); Display_String(table,0x80);

Display_String(\"Lock on! i=0; IS_valid_user=0; break;

case 12: //设置键 if ( !IS_valid_user) { i=0;

Display_String(\"No rights ! delayms(1000);

\ \ \ 第52页 ,共 54页

华北科技学院毕业设计(论文)

Display_String(\"Input code\Display_String(\"Lock on! \} else { i=0;

Display_String(\"Input new code: \Display_String(\" \}

break; case 13: //确认键,储存新密码 if ( !IS_valid_user) {

i=0;

Display_String(\"No rights ! \delayms(1000);

Display_String(\"Input code\Display_String(\"Lock on! \} else {i = 0; init(); delayms(5); for(k=0;k<6;k++) {

Userpassword[k]=Userpassword[k]+48; }

a=Sendstring(0xa0,1,Userpassword,6); delayms(5);

aa=Recstring(0xa0,1,buffer,6); delayms(5);

clear_password();

第53页 ,共54页

基于单片机的电子密码锁设计

Display_String(table,0x00);

Display_String(\"Code Saved! \delayms(1000);

Display_String(\"Thank you \}

break; case 14: //清屏键 i=0;

clear_password();

Display_String(\" \ break;

case 15: //取消键 if(i!=0)i--; for(n=0;nDSY_BUFFER1[n]='*'; }

Display_String(DSY_BUFFER1,0xc0); } P2=0x0f; } if(j==3) {

Display_String(\"Alarm \ j=0; beep=0; } } }

第54页 ,共 54页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务