单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc

上传人:仙人指路1688 文档编号:4147621 上传时间:2023-04-07 格式:DOC 页数:18 大小:273KB
返回 下载 相关 举报
单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc_第1页
第1页 / 共18页
单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc_第2页
第2页 / 共18页
单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc_第3页
第3页 / 共18页
单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc_第4页
第4页 / 共18页
单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告基于AT89C52单片机的电子密码锁设计.doc(18页珍藏版)》请在三一办公上搜索。

1、摘 要随着社会的发展进步,密码锁逐渐成为我们生活中很重要的一部分,密码锁是安全的一个很好的保障措施。本论文设计一个基于单片机和存储器的,能够进行开锁,上锁,修改密码的电子密码锁。电子密码锁是现代电子科技与安全结合的产物。它在现代锁业扮演着重要的角色,本文的主要内容是用AT89c52单片机为核心控制元件,用存储器24c04进行存储密码锁的密码,当用户输入的密码与存储器储存的密码相同时,即可开锁成功,并也可以修改密码,若不相同,则不能开锁,并提示密码错误。关键词:AT89C52单片机 密码锁 LCD 矩阵键盘 目录摘 要1目录21.引 言32. 总体设计42.1基本原理42.2系统总体框图及设计思

2、路43.详细设计53.1 硬件设计53.2软件设计.83.2.1程序设计思路83.2.2 程序流程图83.2.3 程序代码94. 系统调试及分析155.心得体会17参考文献181.引 言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品

3、。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的数字密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点是保密性好,随机开锁成功率几乎为零。密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。无活动零件,不会磨损,寿命长。使用灵活性好,不像机械锁必须佩带钥匙才能开锁。数字密码锁操作简单易行,一学就会。2. 总体设计2.1基本原理电子密码锁是才用存储芯片24C04进行存放密码,单片机可以对24C04进行读取密码和写入密码,本密码锁是事先吧初始密码123456写入24C04中,用户输入密码后,通过对用

4、户输入的密码和24C04中的密码进行比较,若比较相同则提示开锁称成功,开锁后,用户可以修改密码,即把用户输入的新密码写入到24C04当中,并清除之前的密码,按下保存键后,继成功修改密码。其中24C04的原理如下:AT24C04是美国Atmel公司的低功耗CMOS型E2PROM,内含2568位存储空间,具有工作电压宽(2.55.5 V)、擦写次数多(大于10000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和IO线,并且支持在线编程,进行数据实时的存取十分方便。AT24C04中带有的片内地址寄存器。

5、每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。 AT24C02正是运用了I2C规程,使用主从机双向通信,主机(通常为单片机)和从机(AT24C04)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个

6、确认信号ACK。AT24C04的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。2.2系统总体框图及设计思路电子密码锁24C04存储密码矩阵键盘进行输入LCD显示提示信息 总体设计思路:本设计利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储。其中,0-9为用户可以输入密码可选择的数字,10号功能为开锁键,11号功能为上锁,12号功能为输入修改后的密码,13号功能为保存密码,14号功能为重新输入。利用LCD来显示提示信息,用LED来提示密码锁的状态。3.详细设计3.1 硬件设计1芯片及原理介

7、绍(一) 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外部输入)P

8、3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读先通)AT89C52的一些特殊功能口,如下表所示:(二) 矩阵键盘使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图。本设计中矩阵键盘接在单片机的P1口。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别

9、哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。(三) LCD1602本系统设计的显示电路是为了给使用者以提示而设置的。本系统的显示采用了LCD1602作为显示模块,其能够同时显示16x02即32个字符。LCD在系统中,其D0-D7引脚分别接单片机的P0口、VSS和VDD分别接电源和地线、VEE为液晶亮度调节按钮(可接电位器)、RS为数据或命令的选择端接P2.0、RW为读写的选择端接P2.1、E为使能信号接P2.2。如图所示。(四) 24C04本设计中为了在系统掉电时能够保存系统的设置密码,使用了具有I2C总线接口的E2PROM的24C04芯片

10、来保存密码锁的密码。SCL串行时钟 AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 SDA串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。 A0、A1、A2器件地址输入端 这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用AT24C02 时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到Vss,如果只有一个AT24C02被总线寻址这三个地址输入脚(

11、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提示密码

12、正确、LED灯亮表示开锁。如果密码输入错误则LCD提示密码错误。当用户选择更改密码功能时,要求用户先输入当前密码。当密码正确时LCD提示用户进一步操作。单片机向24C04写入新密码,否则提示错误并返回初状态。3.2.1程序流程图开始功能键盘扫描检测子程序输入开锁还是改密码?提示输入开锁密码LCD用*动态提示已输入数字提示输入旧密码将已输入的数字暂存与单片机RAM判断旧密码是否正确?N提示密码错误调用存于24C04的密码与其比较?Y清单片机RAM密码暂存区提示输入新密码YN判断输入的密码是正确?第一个LED亮N提示出错Y将新密码写入AT24C02 结束提示密码修改成功3.2.3 程序代码1、预定

13、义部分#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_

14、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: ca

15、se 8: case 9: if (i = 0) display_string( ,0x40); userpasswordi = keyno + 0; userpasswordi+1 = ;/DSY_BUFFERi = userpasswordi; DSY_BUFFERi = *; DSY_BUFFERi+1 = ; display_string(DSY_BUFFER,0x40); i+;break; case 10: /按A键开锁 if (strcmp(userpassword,IIC_Password) = 0) LED_OPEN = 0; /点亮LED Clear_Password();

16、 display_string(Unlock OK! ,0x40); IS_Valid_User = 1; else LED_OPEN =1; /关闭LED Clear_Password(); display_string(ERROR ! ,0x40); IS_Valid_User = 0; i = 0; break; case 11: /按B键上锁 LED_OPEN =1; Clear_Password(); display_string(Title_Text,0x00); display_string( ,0x40); i = 0; IS_Valid_User = 0; break; ca

17、se 12: /按C键设置新密码 /如果是合法用户则提示输入新密码 if ( !IS_Valid_User ) display_string(No rights !,0x40); else i = 0; display_string(New Password: ,0x00); display_string( ,0x40); break; case 13: /按D键保存新密码 if ( !IS_Valid_User ) display_string(No rights !,0x40); else sendstring(0xa0, 0 , userpassword, 6); /重新读入刚写的密码

18、recstring(0xa0, 0 , IIC_Password, 6); IIC_Password6 = ; i = 0; display_string(Title_Text,0x00); display_string(Password Saved! ,0x40); break; case 14: /按E键消除所有输入 i = 0; Clear_Password(); display_string( ,0x40); beep(); pre_keyno = keyno;/delay(100);/ Beep(); delay(100); P1= 0xF0; while (P1 != 0xF0);

19、 /如果有键未释放则等待 while (P1 = 0xF0); /如果没有再次按下按键则等待 3、24C04读写程序 /-从芯片读取1字节uchar recbyte() uchar i,rd; rd=0x00; SDA=1; for(i=0;i8;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;i8;i+) SDA=(bit)(wd&0x80); _nop_

20、();_nop_(); SCL=1;delay4us(); SCL=0; wd=1; delay4us(); SDA=1; SCL=1; delay4us(); ACK0=!SDA; SCL=0; delay4us(); return ACK0;/发送多字节数据函数 uchar sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar N)uchar i;start();if(!sendbyte(slave) return 0;if(!sendbyte(subaddr) return 0;for(i=0;iN-1;i+)if(!sendb

21、yte(bufferi) return 0; stop(); return 1;/-接收多字节数据函数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;iN-1;i+) bufferi=recbyte(); ACK(); bufferN-1= recbyte(); no_AC

22、K(); stop(); return 1;4、LCD1602显示部分/测试LCD忙状态 返回resultbit lcd_bz()bit result;rs = 0;rw = 1;eq = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0&0x80);eq = 0;return result; /写指令数据到LCDvoid lcd_wcmd(uchar cmd)rs = 0;rw = 0;eq = 0;P0 = cmd;eq = 1;delay_lcd(1);eq = 0;/写入显示数据到LCDvoid lcd_wdat(uchar dat

23、)while(lcd_bz();rs = 1;rw = 0; P0 = dat;delay_lcd(1);eq = 1;eq = 0;/LCD初始化void lcd_init()lcd_wcmd(0x38);/显示模式设置,5*7点阵,8位数据接口while(lcd_bz();lcd_wcmd(0x0c);/显示开及光标设置不显示lcd_wcmd(0x06);/显示光标移动设置lcd_wcmd(0x01);/显示清屏void display_string(uchar *str,uchar lineno)/在液晶指定行显示字符串uchar i;lcd_wcmd(0x80 + lineno);fo

24、r(i=0; i4)0x0f;switch(temp)case 1: k+=0;break;case 2: k+=4;break;case 4: k+=8;break;case 8: k+=12;break;default:break ;/keyno=k;return k;6、主函数void main() init_main(); display_string(Title_Text,0x00); /在第1行显示标题 /24C04的内容已由初始化BIN文件导入 /将24C04中预先写入的密码读入pass recstring(0xa0, 0 , IIC_Password, 6); IIC_Pass

25、word6 = 0; while(1) key_main(); 4. 系统调试及分析用keil编写程序编译运行通过后,用Proteus仿真结果如下,以下是输入密码正确,开锁成功; 修改密码,提示输入新密码,并保存成功。5.心得体会在着手本次课程设计时,通过查阅网络与图书馆搜集到的资料,加上指导老师指点,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题。不过由于了解的专业知识尚浅,对课题的研究经验的不足,使得在技术的解决与运用上显得粗糙了一些,特别是功能键的设定。在设计的过程当中经历和克服了许多困难,暴露我们知识和经验不足的同时也积累了实践经

26、验,检阅了大学所学的知识,使所学的知识得到复习和巩固。通过这次毕业设计我学到了很多东西,复习了理论知识,特别是单片机外围电路模块电路设计及其应用编程;学会收集和处理资料的一些基本问题,提高获取新知识的能力、分析和解决问题的能力以及交流与合作的能力。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在同学的帮助下,终于游逆而解。非常感谢!参考文献1李群芳 张士军 黄建 单片微型计算机与接口技术电子工业出版社2周美娟 肖来胜 单片机原理及系统设计清华大学出版社3 黄鑫,马善农,赵永科.基于CPLD的电子琴研究与设计J.科技广场. 4 赵亮,侯国锐.单片机C语言编程与实例M.北京:人民邮电出版社. 5 徐新艳单片机原理、应用与实践M北京:高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号