资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
沈阳理工大学课程设计专用纸 .2摘 要随着社会的发展进步,密码锁逐渐成为我们生活中很重要的一部分,密码锁是安全的一个很好的保障措施。本论文设计一个基于单片机和存储器的,能够进行开锁,上锁,修改密码的电子密码锁。电子密码锁是现代电子科技与安全结合的产物。它在现代锁业扮演着重要的角色,本文的主要内容是用AT89c52单片机为核心控制元件,用存储器24c04进行存储密码锁的密码,当用户输入的密码与存储器储存的密码相同时,即可开锁成功,并也可以修改密码,若不相同,则不能开锁,并提示密码错误。关键词:AT89C52单片机 密码锁 LCD 矩阵键盘 目录摘 要1目录21.引 言32. 总体设计42.1基本原理42.2系统总体框图及设计思路43.详细设计53.1 硬件设计53.2软件设计.83.2.1程序设计思路83.2.2 程序流程图83.2.3 程序代码94. 系统调试及分析155.心得体会17参考文献181.引 言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的数字密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点是保密性好,随机开锁成功率几乎为零。密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。无活动零件,不会磨损,寿命长。使用灵活性好,不像机械锁必须佩带钥匙才能开锁。数字密码锁操作简单易行,一学就会。2. 总体设计2.1基本原理电子密码锁是才用存储芯片24C04进行存放密码,单片机可以对24C04进行读取密码和写入密码,本密码锁是事先吧初始密码123456写入24C04中,用户输入密码后,通过对用户输入的密码和24C04中的密码进行比较,若比较相同则提示开锁称成功,开锁后,用户可以修改密码,即把用户输入的新密码写入到24C04当中,并清除之前的密码,按下保存键后,继成功修改密码。其中24C04的原理如下:AT24C04是美国Atmel公司的低功耗CMOS型E2PROM,内含2568位存储空间,具有工作电压宽(2.55.5 V)、擦写次数多(大于10000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和IO线,并且支持在线编程,进行数据实时的存取十分方便。AT24C04中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。 AT24C02正是运用了I2C规程,使用主从机双向通信,主机(通常为单片机)和从机(AT24C04)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK。AT24C04的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。2.2系统总体框图及设计思路电子密码锁24C04存储密码矩阵键盘进行输入LCD显示提示信息 总体设计思路:本设计利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储。其中,0-9为用户可以输入密码可选择的数字,10号功能为开锁键,11号功能为上锁,12号功能为输入修改后的密码,13号功能为保存密码,14号功能为重新输入。利用LCD来显示提示信息,用LED来提示密码锁的状态。3.详细设计3.1 硬件设计1芯片及原理介绍(一) AT89C52AT89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz33MHz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。 P1口引脚特殊功能P1.0T2(定时器T2外部输入)P3口引脚P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读先通)AT89C52的一些特殊功能口,如下表所示:(二) 矩阵键盘使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图。本设计中矩阵键盘接在单片机的P1口。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。(三) LCD1602本系统设计的显示电路是为了给使用者以提示而设置的。本系统的显示采用了LCD1602作为显示模块,其能够同时显示16x02即32个字符。LCD在系统中,其D0-D7引脚分别接单片机的P0口、VSS和VDD分别接电源和地线、VEE为液晶亮度调节按钮(可接电位器)、RS为数据或命令的选择端接P2.0、RW为读写的选择端接P2.1、E为使能信号接P2.2。如图所示。(四) 24C04本设计中为了在系统掉电时能够保存系统的设置密码,使用了具有I2C总线接口的E2PROM的24C04芯片来保存密码锁的密码。SCL串行时钟 AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 SDA串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。 A0、A1、A2器件地址输入端 这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用AT24C02 时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到Vss,如果只有一个AT24C02被总线寻址这三个地址输入脚(A0、A1、A2 )必须连接到Vss。 WP写保护 如果WP管脚连接到Vcc,所有的内容都被写保护只能读。当WP管脚连接到Vss 或悬空允许器件进行正常的读/写操作2.硬件原理图P1口通过连接1个矩阵键盘,作为密码输入和功能选择按键;P0口接LCD1602的8位数据通信线;P2.0,P2.1,P2.2接LCD控制端;P3.2和P3.3接24C04。 3.2 软件设计. 3.2.1程序设计思路电子密码锁工作的主要过程是LCD提示开始选择操作功能(选择开锁还是更改密码),通过10号键盘开锁,13号14号进行密码的修改与保存。当用户选择开锁时,通过键盘输入开锁密码。如果密码输入正确,则LCD提示密码正确、LED灯亮表示开锁。如果密码输入错误则LCD提示密码错误。当用户选择更改密码功能时,要求用户先输入当前密码。当密码正确时LCD提示用户进一步操作。单片机向24C04写入新密码,否则提示错误并返回初状态。3.2.1程序流程图开始功能键盘扫描检测子程序输入开锁还是改密码?提示输入开锁密码LCD用*动态提示已输入数字提示输入旧密码将已输入的数字暂存与单片机RAM判断旧密码是否正确?N提示密码错误调用存于24C04的密码与其比较?Y清单片机RAM密码暂存区提示输入新密码YN判断输入的密码是正确?第一个LED亮N提示出错Y将新密码写入AT24C02 结束提示密码修改成功3.2.3 程序代码1、预定义部分#include#include#include#include #include #include #define uchar unsigned char#define uint unsigned int/上次按键和当前按键序号,该矩阵中序号范围015,16表示无按键uchar pre_keyno=16,keyno=16;uchar code Title_Text=your password.;/标题字符串uchar DSY_BUFFER16= ;/显示缓冲uchar userpassword7= ;/用户输入的密码uchar IIC_Password7;uchar IS_Valid_User = 0;uchar i = 0;void Beep();uchar Clear_Password();sbit LED_OPEN = P20;/开锁灯亮sbit BEEP = P37;/蜂鸣器2、功能控制void key_main() P1 = 0xF0; if(P1 != 0xF0) keyno = keys_scan(); /扫描键盘获取键序号KeyNo if(pre_keyno != keyno) if(i=6) switch ( keyno ) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号