您的当前位置:首页正文

基于51单片机的密码锁设计_毕业设计

2024-04-06 来源:步旅网
基于AT89S51与AT24C02密码锁的设计

(苏州大学应用技术学院)

目 录

前言 ........................................................ 错误!未定义书签。 第一章 绪论 ................................................. 错误!未定义书签。 第节 研究背景 ............................................... 错误!未定义书签。 第节 电子密码操纵简介 ....................................... 错误!未定义书签。 第节 国内外研究现状和进展趋势 ............................... 错误!未定义书签。 第节 本设计所要实现的目标 ................................... 错误!未定义书签。 第二章 要紧元器件介绍及IIC总线说明 ......................... 错误!未定义书签。 第节 主控芯片AT89S52 ........................................ 错误!未定义书签。 要紧性能参数 ............................................... 错误!未定义书签。 功能特性概述 ............................................... 错误!未定义书签。 引脚功能说明 ............................................... 错误!未定义书签。 特殊功能寄放器 ............................................. 错误!未定义书签。 第节 AT24C02 错误!未定义书签。

性能 ....................................................... 错误!未定义书签。 引脚功能描述 ............................................... 错误!未定义书签。 第节 LCD1602 错误!未定义书签。

接口信号说明 ............................................... 错误!未定义书签。 第节 晶振振荡器 ............................................. 错误!未定义书签。 第3章 系统硬件组成 ......................................... 错误!未定义书签。 第节 设计原理 ............................................... 错误!未定义书签。 第节 电路总图组成 ........................................... 错误!未定义书签。 报警部份 ................................................... 错误!未定义书签。 AT24C02存储部份 ........................................... 错误!未定义书签。

显示部份 ................................................... 错误!未定义书签。 复位电路 ................................................... 错误!未定义书签。 晶振部份 ................................................... 错误!未定义书签。 开锁电路 ................................................... 错误!未定义书签。 键盘输入模块 ............................................... 错误!未定义书签。 第4章 仿真设计 ............................................ 错误!未定义书签。 第节 Protues仿真软件概述 .................................... 错误!未定义书签。 第节 Protues与Keil的连调 ................................... 错误!未定义书签。

第节 Protues与Keil的连调的仿真结果 ..................................................... 错误!未定义书签。 第5章 系统软件设计 ................................................................................... 错误!未定义书签。 第节 主程序流程图 ....................................................................................... 错误!未定义书签。 第节 按键功能流程图 ................................................................................... 错误!未定义书签。 第节 密码设置流程图 ................................................................................... 错误!未定义书签。 第节 开锁流程图 ........................................................................................... 错误!未定义书签。 结论 ................................................................................................................. 错误!未定义书签。 参考文献 ......................................................................................................... 错误!未定义书签。 致谢 ................................................................................................................. 错误!未定义书签。 附录 ................................................................................................................. 错误!未定义书签。 附录1: 实物照片 ........................................................................................... 错误!未定义书签。 附录2: 部份源程序 ....................................................................................... 错误!未定义书签。

基于AT89S51与AT24C02密码锁的设计

(苏州大学应用技术学院)

【摘要】:电子密码锁是一种通过输入来操纵电路或是芯片工作,从而操纵机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。此刻应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

本文从经济有效的角度动身,采纳美国Atmel公司的单片机AT89S52作为主控芯片与数据存储器单元,结合外围的矩阵键盘输入、LCD液晶显示、报警、开锁等,用C语言编写主控芯片的操纵程序与EEPROM读写程序相结合,设计了一款能够多次更改密码,具有报警功能的电子密码操纵系统。这种电路设计具有防试探按键输入、智能操纵上锁、开锁、报警、修改密码等多种功能。

【关键词】:密码操纵;单片机;报警;

[Abstract]:The electronic cipher lock is a electronic products, which control the mechanical switch by the control circuit or chip when you input a password. It has many different types ,for example, simple circuit products , chip products with a higher value. Now the widely used electronic locks are based on the chip and achieve the function by programming.

This article from the economical and practical point of view,the use of the United States Atmel Corporation AT89S51 microcontroller as a master chip and the data memory unit,combined with the external matrix keyboard input,LED digital display,alarm,unlock and so on,dolminated by the C programming language chip EEPROM of the control procedures and the combination of reading and writing program designed to change a password many times,the police function with the electronic the password circuit design with anti-test button input,intelligent control lock,unlock,alarm,multiple functions,such as Change Password. [Key words]:Password control; Single—chip; Alarm;

前言

随着科学技术的不断提高,人们对日常生活中的平安防盗器件的要求愈来愈高。传统的机械式钥匙由于平安性能差,携带不便等缺点,已不能知足人的需要,随着大规模集成电路技术的进展,专门是单片机的问世,显现了许多带微处置器的电子密码锁,有效地克服了机械式密码锁密码量少、平安性能差的缺点,使密码锁在技术和性能上都有了大大的提高,而且还具有易操作、功耗低、本钱低等优势,从而使电子密码锁成为目前市场上的主流产品。而最近几年来显现的智能密码锁,由于其本钱较高,必然程度上限制了这种产品的普及和推行。

现今常见的密码锁设计要紧有两种方案,一种是中规模集成电路操纵的方案,另一种是单片机操纵的方案。关于采纳集成电路操纵的方案,其中的编码电子锁电路分为编码电路、操纵电路、复位电路、解码电路、防盗报警电路、门铃电路,而电子锁要紧由输入元件、电路(包括电源)和锁体三部份组成。显然此种方案的物理实现结构较为复杂且从头设置密码、输入密码的操作进程也会给用户带来必然的不方便;而利用单片机操纵的方案,由于单片机灵活的编程设计和丰硕的I/O端口,及其操纵的准确性,不但能实现大体的密码锁功能,还能添加掉电存储、声光提示乃至添加遥控操纵功能,但其也有必然的局限性,就在于其操纵原理的复杂和要求设计人员具有加倍良好的程序设计能力,调试较为繁琐,不然程序一旦跑飞将造成意想不到的损失。通过对这两种方案的优缺点比较,再考虑到本人自己对单片机设计具有必然的基础,因此这次选择利用单片机来进行密码锁的设计。

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

第一章 绪论

第1.1节 研究背景

在人们的日常生活中,锁被普遍利用,人们经常使用锁来锁一些珍贵物品乃至自己的家门,目的确实是为了提高平安性。常见的锁有一般机械锁、机械密码锁、电磁卡锁、指纹(虹膜)锁等。而一般的机械锁极容易被强行破坏,平安系数不高;机械密码锁尽管平安系数高但造价相对较高,目前在保险柜上应用较多;电磁卡锁由于磁卡信息极易受外界干扰而失磁致使无法开锁,而指纹(虹膜)锁尽管平安性专门好,但会因手指划伤虹膜充血等收到限制。通过度析咱们不难发觉传统密码锁或多或少存在一些不足从而降低了其保密的平安性,因此研究一种新型的密码锁是具有有很高的现实需求性。随着电子科技的进展,将电子芯片跟传统机械锁结合起来设计成一种新型的密码锁而电子密码锁作为一种新型的锁已经成功,即电子密码锁。

在平安技术防范领域,具有防盗报警功能的电子密码锁慢慢代替传统的机械式密码锁。电子密码锁与传统密码锁想比较,拥有海量的密齿,通常从10000到不等,克服了机械式密码锁密码量少、平安性能差的缺点,使密码锁不管在技术上仍是在性能上都大大提高一步。

从是不是方便的角度看,电子密码锁省去了传统机械锁的钥匙,电磁卡锁的磁卡,利用者只要记得其密码,即能够开启,从而大大提高了其适用性。因此电子密码锁的具有较高的研究价值。

第1.2节 电子密码操纵简介

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

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

2)密码可变,用户能够随时更改密码,避免密码被盗,同时也能够幸免因人员的更替而使操纵的保密性下降。

3)误码输入爱惜,当输入密码多次错误时,报警系统自动启动。 4)无活动零件,可不能磨损,寿命长。

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

第1.3节 国内外研究现状和进展趋势

早在80年代,日本产生了最先的电子密码锁。随着日本经济苏醒,电子行业的

快速进展,一些利用简单的门电路设计的密码锁显现了。这种电路平安性差,容易破解。到了90年代,美国、意大利、德国、日本、加拿大、韩国和我国的台湾、香港等地的微电子技术的进步和通信技术的进展为密码锁提供了技术上的基础,从而推动密码锁走向实际应用的时期。我国于90年代初开始对密码锁进行初步的探讨。到目前为止,在此领域虽已有较大的进展,采纳各类电路进行设计的比较多,技术也相当先进,电子技术进展至今已达到相当高的水平,电子密码锁技术已十分成熟。

第1.4节 本设计所要实现的目标

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

第二章 要紧元器件介绍及IIC总线说明

第节 主控芯片AT89S52

AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采纳ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方式进行编程及通用8位微处置器于单片芯片中,ATMEL公司的功能壮大,低价位AT89S51单片机可为您提供许多高性价比的应用处合,可灵活应用于各类操纵领域。

2.1.1. 要紧性能参数

与MCS-51产品指令系统完全兼容

4k字节在系统编程(ISP)Flash闪速存储器 1000次擦写周期 -的工作电压范围

全静态工作模式:0Hz-33MHz 三级程序加密锁 128×8字节内部RAM 32个可编程I/O口线 2个16位按时/计数器 6个中断源

全双工串行UART通道 低功耗空闲和掉电模式 中断可从空闲模唤醒系统 看门狗(WDT)及双数据指针 掉电标识和快速编程特性

灵活的在系统编程(ISP字节或页写模式)

2.1.2. 功能特性概述

AT89S51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32个I/O 口线,看门狗(WDT),两个数据指针,两个16 位按时/计数器,一个5 向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但许诺RAM,按时/计数器,串行通信口及中断系统继续工作。掉电方式保留RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

2.1.3. 引脚功能说明

P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口历时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

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

端口引脚第二功能: MOSI(用于ISP犏程) MISO(用于ISP犏程) SCK (用于ISP犏程)

P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,现在可作输入口,作输入口利历时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器时,P2 口线上的内容(也即特殊功能寄放器(SFR)区中P2寄放器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它操纵信号。

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

P3口除作为一样的I/0口线外,更重要的用途是它的第二功能,如下表所示: P3口还接收一些用于Flash闪速存储器编程和程序校验的操纵信号。 端口引脚的第二功能 RXD(串行输入口) TXD(串行输出口) INT0(外中断0) INT1(外中断1)

T0(按时/计数器0外部输入) T1(按时/计数器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器读选通)

RST:复位输入。当振荡器工作时,RST引脚显现两个机械周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。

ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存许诺)输出脉冲用于锁存地址的低8位字节。即便不访问外部存储器,ALE 仍以时钟振荡频率的 1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于按时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄放器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。

PSEN:程序贮存许诺(PSEN)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每一个机械周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。

EA/VPP:外部访问许诺。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必需维持低电平(接地)。需注意的是:若是加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU那么执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。

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

2.1.4. 特殊功能寄放器

这些地址并无全数占用,没有占用的地址亦不可利用,读这些地址将取得一个随意的数值。而写这些地址单元将不能取得预期的结果。不要软件访问这些未概念的单元,这些单元是留作以后产品扩展用途的,复位后这些新的位将为0。

中断寄放器:

各中断许诺操纵位于IE寄放器,5个中断源的中断优先级操纵位于IP寄放器。 双时钟指针寄放器:为更方便地访问内部和外部数据存储器,提供了两个16位数据指针寄放器:DP0位于SFR(特殊功能寄放器)区块中的地址82H、83H和DP1位于地址84H、85H,当SFR中的位DPS=0选择DP0,而DPS=1那么选择DP1。用户应在访问相

应的数据指针寄放器前初始化DPS位。

电源空闲标志:电源空闲标志(POF)在特殊功能寄放器SFR 中PCON的第4 位(),电源打开时POF 置“1\",它可由软件设置睡眠状态并非为复位所阻碍。

存储器结构:MCS-51单片机内核采纳程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。

程序存储器:若是EA引脚接地(GND),全数程序均执行外部存储器。在AT89S51,假设EA接至Vcc(电源+),程序第一执行地址从0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH(60KB)的外部程序存储器。

数据存储器:AT89S51 的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节都可设置为堆栈区空间。

看门狗按时器(WDT):WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看门狗复位SFR(WDTRST)组成。外部复位时,WDT默以为关闭状态,要打开WDT,用户必需按顺序将01EH和0E1H写到WDTRST寄放器(SFR地址为0A6H),当启动了WDT,它会随晶体振荡器在每一个机械周期计数,除硬件复位或WDT 溢出复位外没有其它方式关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。

利用看门狗(WDT):打开WDT需顺顺序写01EH和0E1H到WDTRST寄放器(SFR的地址为0A6H),当WDT打开后,需在必然的时候01EH 和0E1H 到WDTRST 寄放器以幸免WDT 计数溢出。14 位WDT 计数器计数达到16383(3FFFH),WDT 将溢出并使器件复位。WDT 打开时,它会随晶体振荡器在每一个机械周期计数,这意味着用户必需在小于每一个16383 机械周期内复位WDT,也即写01EH和0E1H到WDTRST寄放器,WDTRST为只写寄放器。WDT计数器既不可读也不可写,当WDT溢出时,通常将使RST引脚输出高电平的复位脉冲。复位脉冲持续时刻为98×Tosc,而Tosc=1/Fosc(晶体振荡频率)。为使WDT工作最优化,必需在适合的程序代码时刻段周期地复位WDT避免WDT溢出。

掉电和空闲状态时的WDT:掉电时期,晶体振荡停止,WDT也停止。掉电模式下,用户不能再复位WDT。有两种方式可退出掉电模式:硬件复位或通过激活外部中断。当硬件复位退出掉电模式时,处置WDT 可象通常的上电复位一样。当由中断退出掉电模式那么有所不同,中断低电平状态持续到晶体振荡稳固,当中断电平变成高即响应中断效劳。为避免中断误复位,当器件复位,中断引脚持续为低时,WDT并未开始计数,直到中断引脚被拉高为止。这为在掉电模式下的中断执行中断效劳程序而设置。为保证WDT在退出掉电模式时极端情形下不溢出,最好在进入掉电模式前复位WDT。在进入空闲模式前,WDT 打开时,WDT 是不是继续计数由SFR 中的AUXR 的WDIDLE 位决定,在IDLE 期

间(位WDIDLE=0)默许状态是继续计数。为避免AT89S51从空闲模式中复位,用户应周期性地设置按时器,从头进入空闲模式。

当位WDIDLE被置位,在空闲模式中WDT将停止计数,直到从空闲(IDLE)模式中退出从头开始计数。

中断:AT89S51共有5个中断向量:2个外中断(INT0和INT1),2个按时中断(Timer0和Timer1)和一个串行中断。这些中断源各自的禁止和使能位参见特殊功能寄放器的IE。IE也包括总中断操纵位EA,EA清0,将关闭所有中断。按时器0和按时器1 的中断标志TF0和TF1,它是按时器溢出时的S5P2时序周期被置位,该标志保留至下个时序周期。

晶体振荡器特性:AT89S51 中有一个用于组成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 别离是该放大器的输入端和输出端。那个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一路组成自激振荡器。

外接石英晶体(或陶瓷谐振器)及电容Cl、C2 接在放大器的反馈回路中组成并联振荡电路。对外接电容Cl、C2 尽管没有十分严格的要求,但电容容量的大小会轻微阻碍振荡频率的高低、振荡器工作的稳固性、起振的难易程序及温度稳固性。若是利用石英晶体,咱们推荐电容利用30pF±10pF,而如利用陶瓷谐振器建议选择40pF±10F。

用户也能够采纳外部时钟。这种情形下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2那么悬空。

由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,因此对外部时钟信号的占空比没有特殊要求,但最小高电平持续时刻和最大的低电平持续时刻应符合产品技术条件的要求。

空闲节电模式:在空闲工作模式状态,CPU维持睡眠状态而所有片内的外设仍维持激活状态,这种方式由软件产生。现在,片内RAM和所有特殊功能寄放器的内容维持不变。空闲模式可由任何许诺的中断请求或硬件复位终止。

需要注意的是,当由硬件复位来终止空闲工作模式时,CPU 一般是从激活空闲模式那条指令的下一条指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要维持两个机械周期(24个时钟周期)有效,在这种情形下,内部禁止CPU 访问片内RAM,而许诺访问其它端口。为了幸免在复位终止时可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不该是一条对端口或外部存储器的写入指令。

掉电模式:在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄放器的内容在终止掉电模式前被冻结。退出掉电模式的方式是硬件复位或由处于使能状态的外中断INT0和INT1激活。复位后将从头概念全数特殊功能寄放器但不改变RAM 中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必需维持一按时刻以使振荡重视启动并稳固工作。

Flash闪速存储器的并行编程:AT89s51 单片机内部有4k 字节的可快速编程的Flash 存储阵列。编程方式可通过传统的EPROM 编程器利用高电压(+12V)和和谐的操纵信号进行编程。AT89S51的代码是一一字节进行编程的。

数据查询:AT89S5l 单片机用数据查询方式来检测一个写周期是不是终止,在一个写周期中,如需读取最后写入的那个字节,那么读出的数据的最高位()是原先写入字节最高位的反码。写周期完成后,有效的数据就会出此刻所有输出端上,现在,可进入下一个字节的写周期,写周期开始后,可在任意时刻进行数据查询。

Ready/Busy:字节编程的进度可通过“RDY/BSY”输出信号监测,编程期间,ALE变成高电平“H”后端电平被拉低,表示正在编程状态(忙状态)。编程完成后,变成高电平表示预备就绪状态。

程序校验:若是加密位LB1、LB2没有进行编程,那么代码数据可通过地址和数据线读回原编写的数据,各加密位也可通过直接回读进行校验。

读片内签名字节:AT89S51 单片机内有3 个签名字节,地址为000H、100H 和200H。用于声明该器件的厂商和型号等信息,读签名字节的进程和正常校验相仿,只需将和维持低电平。

芯片擦除:在并行编程模式,利用操纵信号的正确组归并维持ALE/PROG引脚200ns-500ns的低电平脉冲宽度即可完成擦除操作。在串行编程模式,芯片擦除操作是利用擦除指令进行。在这种方式,擦除周期是自身按时的,大约为500ms。擦除期间,用串行方式读任何地址数据,返回值均为00H。

Flash闪速存储器的串行编程:将RST接至Vcc,程序代码存储阵列可通过串行ISP 接口进行编程,串行接口包括SCK线、MOSI(输入)和MISO(输出)线。将RST拉高后,在其它操作前必需发出编程使能指令,编程前需将芯片擦除。芯片擦除那么将存储代码阵列全写为FFH。外部系统时钟信号需接至XTAL1端或在XTALl 和XTAL2接上晶体振荡器。最高的串行时钟(SCK)不超过l/16晶体时钟,当晶体为33MHz时,最大SCK频率为2MHz。

数据校验:数据校验也可在串行模式下进行,在那个模式,在一个写周期中,通过输出引脚MISO串行回读一个字节数据的最高位将为最后写入字节的反码。

第节 AT24C02

AT24C02支持I2C总线数据传送协议,I2C总线协议规定:任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件操纵的,AT24C02作为从器件。尽管主器件和从器件都能够作为发送器或接收器,但由主器件操纵传送数据发送或接收的模式。

2.2.1. 性能

与400KHz I2C 总线兼容 到 伏工作电压范围 低功耗CMOS 技术

写爱惜功能当WP 为高电平常进入写爱惜状态 页写缓冲器 自按时擦写周期 1,000,000 编程/擦除周期 可保留数据100 年

8 脚DIP SOIC 或TSSOP 封装 温度范围商业级工业级和汽车级

2.2.2. 引脚功能描述

VCC + 工作电压 VSS 地

SCL 串行时钟:串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。

SDA 串行数据/地址:双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或wire-OR。

A0 A1 A2 器件地址输入端:这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默许值为0 ,24WC01 除外。

当利用24WC01 或24WC02 时最大可级联8 个器件,若是只有一个24WC02 被总线寻址这三个地址输入脚A0 A1 A2 可悬空或连接到Vss, 若是只有一个24WC01 被总线寻址这三个地址输入脚A0 A1 A2 必需连接到Vss。当利用24WC04 时最多可连接4 个器件该器件仅利用A1 A2 地址管脚A0 管脚未用能够连接到Vss 或悬空,若是只有一个24WC04 被总线寻址,A1 和A2 地址管脚可悬空或连接到Vss。当利用24WC08 时最多可连接2 个器件且仅利用地址管脚A2 A0 ,A1 管脚未用能够连接到Vss 或悬空,若是只有一个24WC08 被总线寻址A2 管脚可悬空或连接到Vss。当利用24WC16 时最多只可连接1 个器件所有地址管脚A0 A1 A2 都未用管脚能够连接到Vss 或悬空。

WP 写爱惜:若是WP 管脚连接到Vcc,所有的内容都被写爱惜只能读。当WP 管脚连接到Vss 或悬空,许诺器件进行正常的读/写操作。

第节 LCD1602

此刻的字符型液品模块已是单片机应用设计中最经常使用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰硕等特点。1602型LCD能够显示2行16个字符,有8位数据总线D0—D7和Rs,R/W,EN三个操纵端口,工作电压为5V,而且具有字符对照度调剂和背光功能。

2.3.1. 接口信号说明

1602型LCD的接口信号说明如表2-1所示:

表2-1 1602型LCD的接口信号说明 编号 符号 1 2 3 4 5 6 7 8 VSS VDD VO RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读写选择端(H/L) 使能信号 Data I/O Data I/O 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 1602型LCD的要紧技术参数如表2-2所示:

表2-2 1602型LCD的要紧技术参数 显示容量 16X2个字符 芯片上作电压 ~ 工作电流 模块最佳工作电压 字符尺寸 4.35 mm 大体操作程序

读状态:输入:RS=L,RW=L,E=H 输出:DO-D7=状态字 读数据:输入:RS=H,RW=H,E=H 输出:无

写指令:输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲 输出:D0-D7=数据 写数据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲 输出:无

第节 晶振振荡器

晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,那个频率通过频率发生器的放大或缩小后就成了电脑中各类不同的总线频率。以声卡为例,要实现对模拟信号或48kHz的采样,频率发生器就必需提供一个或48kHz的时钟频率。若是需要对这两种音频同时支持的话,声卡就需要有两颗晶振。可是此刻的娱乐级声卡为了降低本钱,通常都采纳SCR将输出的采样频率固定在48kHz,可是SRC会对音质带来损害,而且此刻的娱乐

级声卡都没有专门好地解决那个问题。此刻应用最普遍的是石英晶体振荡器。

石英晶体振荡器是一种高精度和高稳固度的振荡器,石英晶体振荡器也称石英晶体谐振器,它用来稳固频率和选择频率,是一种能够取代LC谐振回路的晶体谐振元件。石英晶体振荡器普遍地应用在电视机、影碟机、录像机、无线通信设备、电子钟表、单片机、数字仪器仪表等电子设备中。为数据处置设备产生时钟信号和为特定系统提供基准信号。在单片机中为其提供时钟频率。石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的大体组成大致是:从一块石英晶体上按必然方位角切下薄片(简称为晶片,它能够是正方形、矩形或圆形等),在它的两个对应面上涂敷上银层用作电极利用,在每一个电极上各焊一根引线接到管脚上,再加上封装外壳就组成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一样用金属外壳封装,也有效玻璃壳、陶瓷或塑料封装的。只要在晶体振子板极上施加交变电压,就会使晶片产生机械变形振动,此现象即所谓逆压电效应。当外加电压频率等于晶体谐振器的固有频率时,就会发生压电谐振,从而致使机械变形的振幅突然增大。本设计中采纳12MHz做系统的外部晶振。电容取值为30pF。

第3章 系统硬件组成

第节 设计原理

本设计采纳AT89S52为主控芯片,通过IIC总线协议与AT24C02进行通信。电路的辅助模块有复位电路、矩阵按键电路、继电器电路、报警电路。在进行keil c编程的时候,第一在程序中设置初始密码。在进行开锁的时候,用户需要进行依照提示进行利用按键输入密码,在输入密码的同时主控芯片单片机遇依照程序的设定和输入的密码进行比较,若是输入每一个密码都正确的情形下,那么液晶会提示用户进行相应的操作,如进行修改密码。

报警与开锁电路实际是在在密码已经进行比对以后,主控芯片通过判定的结果给出相应的操作,即相应的I/O端口会显现高低电平的转变,从而实现开锁与报警的功能。

系统框图如图3-1所示

电源电路液晶显示电路AT24C02报警电路矩阵键盘复位电路开锁指示电路晶振电路AT89S52开锁电路 图3-1 系统框图

第节 电路总图组成

在确信了选用什么型号的单片机后,就要确信在外围电路,其外围电路包括电源输入部份、存储部份、键盘输入部份、复位部份、晶振部份、显示部份、报警部份、开锁部份组成,依如实际情形键盘输入部份选择4*4矩阵键盘,显示部份选择字符型液晶显示LCDl602。电路总图如图3-2所示:

3.2.1. 报警部份

3.2.2. AT24C02存储部份

图3-2 电路总原理图

图3-3 报警电路原理图

含有256个8位字节,AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进

当密码输入两次的数值与所设定的参数值不同时,单片机AT89C51便通过口操纵三极管来驱动扬声器报警,当输出低电平常三极管截止,当输出高电平常三极管导通扬声器报警。如图3-3所示

掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是

ATMEL公司开发的可擦除存储芯片,AT24C02是一个2K位串行CMOS E2PROM, 内部

行操作,有一个专门的写爱惜功能。

采纳两线串行的总线和单片机通信,电压最低能够到,额定电流为1mA,静态电流10Ua,芯片内的资料能够在断电的情形下保留40年以上,而且采纳8脚的DIP封装,利用方便。如图3-4所示

图3-4 2AT24C02 原理图电路

3.2.3. 显示部份

为了提高密码锁的密码显示成效能力。本设计的显示部份由液晶显示器LCDl602取代一般的数码管来完成。只有按下键盘上的开启按键后,显示器才处于开启状态。同理只有按下关闭按键后显示器才处于关闭状态。不然显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个“*”,输入多少位就显示多少个“*”。当密码输入完成时,按下确认键,若是输入的密码正确的话,LCD子显示“RIGHT”,单片机其中引脚会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,若是密码不正确,LCD显示屏会显示“ERROR”,输出的是高电平,电子密码锁不能被打开。通过LCD显示屏,能够清楚的判定出密码锁所处的状态。其显示部份引脚接口如图3-5所示:

图3-5 液晶显示电路和上拉电阻驱动

3.2.4. 复位电路

复位电路(图3-12是单片机复位电路)具有上电自动复位和手动复位的双重功能。单片机的RST引脚是复位信号的输入端,复位信号是高电平的时候才有效,其有效时刻应持续24个震荡脉冲周期(即2个机械周期)以上;一样为了保证应用系统能够准确地复位,复位电路应使引脚RST脚维持10ms以上的高电平状态。只要RST维持高电平,单片机就会自动循环复位。当RST引脚从高电平状态转为低电平状态时,单片机退出复位状态,从程序存储器的0000H地址开始执行用户程序。电容C3和电阻R5组成上电复位电路。上电刹时RST引脚取得高电平,随着电容C11的充电,RST引脚的高电平慢慢下降。只要高电平维持足够的时刻,单片机就能够完成复位。手动复位如图3-6所示

图3-6 复位电路

3.2.5. 晶振部份

AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C二、C3按图4-6所示方式连接。晶振、电容C2/C3及片内与非门(作为反馈、放大元件)组成了电容三点式振荡器,振荡信号频率与晶振频率及电容C二、C3的容量有关,但要紧由晶振频率决定,范围在0~33MHz之间,电容C二、C3取值范围在20~40pF之间。依如实际情形,本设计中采纳12MHz做系统的外部晶振。电容取值为30pF。电路如图3-7

图3-7 晶振电路

3.2.6. 开锁电路

开锁电路的功能是当输入正确的密码后密码锁将被锁定,既开锁。当单片机引脚发出信号经三极管放大后,触动电磁阀即会把锁打开。一旦输入密码,单片机便会与初始密码进行比对,若是密码输入两次都与原始密码不相符即会报警。电路如图3-8所示

图3-8 开锁电路

3.2.7. 键盘输入模块

键盘是单片机十分重要的输入设备,是实现人机对话的纽带。键盘是由一组规那么排列的按键组成,一个按键事实上确实是一个开关元件,即键盘是一组规那么排列的开关。依照按键与单片机的连接方式不同,按键要紧分为独立式按键和矩阵式按键 ,有了这些按键,对单片机的操纵就方便多了。

本设计按键数量较多,因此采纳矩阵式按键以节省I/O口线。将16个按键分为4排4列排列好,如图3-9矩阵键盘硬件结构。当有一个键按下时,通过某一边引脚赋低电平,扫描全数引脚看是不是与最初的赋值一样,不一样那么依照相应的算法(通过改变后的值与初始值相或,依照结果赋值)确信是哪个键按下。

键盘为4×4形式,按键包括阿拉伯数字0~9,和锁定、更改和改密三个应用按键。当用户需要输入密码或修改密码时,按下相应按键即会与单片机产生信号,并会执行相应的程序。电路如图3-9所示

图3-9 矩阵键盘电路

第4章 仿真设计

第节 Protues仿真软件概述

Protues是目前利用比较普遍的单片机类的仿真系统的软件之一,它能够实现的功能比较多,能够实现程序与原理图的连调,也能够单独作为绘制原理图的工具利用,与Protel有着过之不及的功能,于此同时还能够进行PCB版图的生成,在方式中与Protel类似。此款软件及绘制原理图、PCB版图和仿真于一身。Protues此款软件的利用比较简单。在运行环境搭载好的前提下,打开ISIS直接进入到主界面,在左侧栏框中有一个快捷键P(从库当选取),点击后显现一个对话框然后输入想要查找的元器件即可。以后在单击确信按键所选器件就会显示在界面左上角的小框中现在点击鼠标左键就会放到图层中,然后直接把鼠标放到接头处就会显示一个画笔的标志现在按住鼠标左键就可进行连线了。如图4-1所示为画图界面。

图4-1 画图界面

第节 Protues与Keil的连调

在进行连调之前必需确保程序是完整的,原理图也是没有错误的。还要在正确的运行平台下进行操作。检查没有错误后,打开原理图,点击单片机就会显现一个对话框如图5-2所示,然后把生成的.hex文件添加到里面即可实现。在那个地址比较重要的确实是.hex文件的生成进程。第一把已编写好的程序加载到Keil软件下进行编译若是没有碰到任何错误后,选择相应的选项就能够够生成.hex文件了。以后再依照生成的的途径去寻觅那个文件。找到以后加载到之前点开的 对话框上即可。在尔后点击运行按键就会进行仿真了,依照

设计的功能去调试就能够够了。加载hex如图4-2所示

图4-2 加载.hex文件

第节 Protues与Keil的连调的仿真结果

系统仿真运行环境下的结果如图4-3所示

图4-3 系统仿真图

开锁仿真图如5-4所示

图4-3 开锁仿真图

第5章 系统软件设计

本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。

第节 主程序流程图

图5-1所示为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,然后启动程序,进行爱惜,再次在键盘上输入密码,系统进行扫描,如和之前一样,那么执行程序,如不是,那么执行另一种程序,最后终止。

开始初始化键盘扫描启动程序键盘扫描密码程序判断关闭程序结束图5-1 主程序流程图

第节 按键功能流程图

图5-2为按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相较较,当输入正确时,进入密码程序,错误时进行清除,输入两次正确的,可进行从头设置,最后确认程序。

键值功能键值=‘输入’Y密码输入程序键值=‘开锁’Y开锁程序键值=‘清除’Y清除程序键值=‘设置’Y设置程序键值=‘确认’Y确认程序返回

图5-2 按键功能流程

第节 密码设置流程图

如图5-3为密码设置流程图,开始按下设置键,输入旧密码,若是错误,累计三次错误,进行报警程序。如输入正确,能够改密码,确认后再次输入更改后密码,如两次输入一样,那么更改成功。

设置程序按下按键输入原密码比较结果相同Y输入新密码确认程序再次输入新密码返回确认程序次数>3Y报警程序N输入次数加1N两次新密码输入相同Y设置成功N

图5-3 密码设置流程图

第节 开锁流程图

图5-4为开锁流程图,开始时按开锁键,输入密码,若是输入正确,那么开锁成功。若是输入错误累计三次,那么执行报警程序。

开始程序初始化输入密码输入程序所输入密码正确YN输入次数加1N次数>3Y报警程序返回图5-4 开锁流程图

开锁成功

结论

这次毕业设计我之因此选择基于AT89S52与AT24C02的密码锁的设计,是因为我关于单片机与芯片之间的数据传输还存在着必然的问题。这次通过本次毕业设计,我查阅了大量的资料,具体了解AT89S52芯片、存储器芯片的读写操作、编程程序的简化与标准。

在进行整体的设计以后,我利用了keil c软件编写了程序而且进行了protues软件的仿真。在仿真成功了以后。我才开始进行开始制作硬件电路。

硬件电路包括,复位电路、晶振电路、矩阵按键电路、LCD1602液晶显示电路、报警指示电路、开锁电路和AT24C02存储器电路!在进行硬件电路制作的时候,我花了大量的时刻,因为既要设计的美观又要考虑实际的电路布线规那么,因此仍是感觉制作起来极为困难。

电路制作好了以后,我利用下载器把程序下载进去以后,发觉并无我想象的那么的成功,然后我只能一一的调试各个模块,最后发觉仍是存在许多的问题的,如业绩显示模块在利用主控单片机的P0模块是,仍是要需要利用上拉电阻的。在进行矩阵电路的制作时,电路很容易发生短路,因此必需利用万用表逐个的测量利用短路的现象!

从策划开始,我开始查找和搜集大量的资料,进行程序编程的时候,我又要把各个软件认真的熟悉了一下,再到仿真成功,硬件调试成功。在那个复杂的进程中我真的学到了很多。我学会以了系统的看待了一个问题,也必需细心的对待每一个问题,因为一个整体不管在哪个小的方面出了问题,都会造成整个系统的犯错。

参考文献

[1]. 刘昌华,易逵.《8051单片机的C语言应用程序设计与实践》[M]. 国防工业出版社. [2]. 魏立峰, 王宝兴. 单片机原理与应用技术[M].北京:北京大学出版社,2020:34-65. [3]. 王为青,邱文勋.《51单片机应用开发案例精选》[M]. 人民邮电出版社. [4]. 谭浩强. C程序设计 (第三版) [M].北京:高等教育出版社,2005:113. [5]. 陈雪丽.单片机原理及接口技术[M].北京:化学工业出版社,2005.

[6]. 王少伟,巫丹. 89C51单片机USB接口的设计与实现. 科技创新导报,2020(28) . [7]. 李明喜.新型电子密码锁的设计[J].机电产品开发与创新,2004,(03); [8]. 董继成.一种新型平安的单片机密码锁[J].电子技术,2004,(03); [9]. 杨茂涛.一种电子密码锁的实现[J].福建电脑,2004,(08); [10]. 瞿贵荣.有效电子密码锁[J].家庭电子,2000,(07);

[11]. , 跟我学51单片机系列教程第(十一)—I2C总线[J], 《》 2020年第11期. [12]. ,. [J],.

致谢

光阴飞逝,一转眼大学四年的光阴就过去了,我所学的专业是电子信息工程与技术,我很喜爱这门专业,因此我的专业课成绩也不是很差。在本次毕业设计中,我的论文指导教师真的帮了我很多的忙,指导了我很多。在这次论文的选题到最后论文定稿,教师给了我很多的建议。还有确实是我在做硬件的时候,我的同窗给了我很多的建议,我的同窗专业学的专门好,尤其在做硬件方面,我在几个比较难以解决的问题都是她帮我解决的。在我做论文的时候给了我很多的鼓舞与帮忙。最后还要感激我的父母,这么含辛茹苦的给了我这么个学习的机遇。总之,感激你们一直伴随着我成长。

真的到了离别的时候了,真的超级不舍得我漂亮的母校,我敬爱的教师,可是百舸争流,勇者没必要勇敢向前。不管前面碰到什么苦难,我相信大学四年,我已经学会了如何去试探我所碰到的问题,学会如何去解决我所碰到的问题。最后,感激在大学期间熟悉我和我熟悉的所有朋友,因为你们的陪伴,我的大学生活才丰硕多彩!谢谢!

附录

附录1: 实物照片

图1 实物

图2 输入密码

图3 密码正确提示

图4 修改密码

附录2: 部份源程序

#include<> //包括头文件,一样情形不需要改动,头文件包括特殊功能寄放器的概念 #include\"\" #include\"\" #define KeyPort P1

unsigned char KeyScan(void) //键盘扫描函数,利用行列反转扫描法 {

unsigned char cord_h,cord_l;//行列值中间变量 KeyPort=0x0f; //行线输出全为0 cord_h=KeyPort&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 {

DelayMs(10); //去抖 if((KeyPort&0x0f)!=0x0f) {

cord_h=KeyPort&0x0f; //读入列线值 KeyPort=cord_h|0xf0; //输出当前列线值 cord_l=KeyPort&0xf0; //读入行线值

while((KeyPort&0xf0)!=0xf0);//等待松开并输出 return(cord_h+cord_l);//键盘最后组合码值 }

}return(0xff); //返回该值 }

unsigned char KeyPro(void) //按键值处置函数,返回扫键值 {

switch(KeyScan()) {

case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值 case 0x7d:return 1;break;//1 case 0x7b:return 2;break;//2 case 0x77:return 3;break;//3

case 0xbe:return 4;break;//4 case 0xbd:return 5;break;//5 case 0xbb:return 6;break;//6 case 0xb7:return 7;break;//7 case 0xde:return 8;break;//8 case 0xdd:return 9;break;//9 case 0xdb:return 10;break;//a 确认键 case 0xd7:return 11;break;//b case 0xee:return 12;break;//c default:return 0xff;break; } }

#include<> //包括头文件,一样情形不需要改动,头文件包括特殊功能寄放器的概念 #include<> #include\"\" #include\"\" #include\"\"

#define uchar unsigned char #define uint unsigned int #define OP_READ

0xa1

// 器件地址以及读取操作 // 器件地址以及写入操作 // AT24C02最大地址 设置键 保存键

#define OP_WRITE 0xa0 #define MAX_ADDR 0x7f sbit SET = P3^0; sbit SDA = P3^7; sbit SCL = P3^6; sbit JDJ = P3^5; sbit Alarm = P2^1; bit SetPasswordFlag=0; bit SetPasswordFlag1=0; bit InputPasswordFlag=1;

unsigned char code password[6]={1,2,3,4,5,6};//能够更改此密码做多组测试 void start(); void stop();

unsigned char shin();

bit shout(unsigned char write_data);

unsigned char read_random(unsigned char random_addr); void write_byte( unsigned char addr, unsigned char write_data); void fill_byte(unsigned char fill_data); main() {

unsigned char num,i,j,k; unsigned char temp[9],temp1[9],setpassword[8];

unsigned char inputtimes; //密码输入错误次数 bit Flag;

LCD_Init(); //初始化液晶屏

DelayMs(10); //延时用于稳固,能够去掉 LCD_Clear(); //清屏 LCD_Write_String(0,0,\" xu jin shuai\");

DelayMs(1000);DelayMs(1000);DelayMs(1000);DelayMs(1000); DelayMs(1000);DelayMs(1000);DelayMs(1000);DelayMs(1000); LCD_Write_String(0,0,\"Input Password\"); if(SET==0) {

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

//循环将设置的密码保存到AT24C02中

{ write_byte(i,password[i]);} i = 0 ; }

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