ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:849.44KB ,
资源ID:20720458      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20720458.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于某AT24C02电子密码锁地设计Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于某AT24C02电子密码锁地设计Word文档下载推荐.docx

1、为了保存用户设置的密码,本系统使用AT24C02用来保存用户设置的密码,它的SCL、SDA端分别接单片机的T0、T1端,用于与单片机之间读写操作的数据传输;WP接低电平表示单片机可以对器件进展正常的读/写操作;E0、 E1、E2是器件地址输入端,都接低电平表示只有一个AT24C02被器件寻址。该电路要注意的是SCL、SDA必须加上一上接电阻,阻值为4.7K。用户设置的密码存放在ST24C02中,当需要更改或读取用户密码时,只需对ST24C02里的数据更改或读取。ST24C02储存密码电路如图3所示。图33.3 矩阵键盘电路矩阵键盘电路主要作用就是输入密码,它由行线和列线组成,按键位于行、列的交

2、叉点上,行列分别连接到按键开关的两端。无按键按动作时列线处于高电平状态;有按键按下时,交点的行线和列线相通,列线电平状态将由与此列线相连的行线电平决定。行线电平如果低,如此列线电平为低;行线电平如果为高,如此列线电平也为高。这是识别矩阵式键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量比拟多的场合。本设计的4*4键盘即采用矩阵式键盘。矩阵键盘电路图如图4所示图43.4液晶显示电路1602的引脚功能:第1脚:为地电源。第2脚:VC

3、C接5V正电源。第3脚:为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高,比照度过高时会产生“鬼影,使用时可以通过一个20K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:RW为读写信号线,高电平时进展读操作,低电平时进展写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:15脚接VCC,16脚接地。1602电路

4、图如图5所示。图54系统软件设计由于单片机是可编程控制器,故采用C语言对单片机进展程序的编写。主程序主要由矩阵键盘程序、1602液晶屏程序与AT24C02程序组成。4.1 主程序流程图图6上图6为主程序流程图。开始先初始化,然后屏幕显示password先扫描按键,确认是否可以按键按出密码,如果没有按键按下,如此重新扫描按键,假如有键按下如此按下修改键并保存密码就会出现新的密码,假如不按下修改键如此还是原来刚设置的初始密码,按下输入键并输入密码,不按下输入键如此重新回到扫描按键步骤,假如密码正确如此开锁。密码错误如此报警显示错误。4.2 子程序流程图4.2.1 AT24C02 子程序流程图图7图

5、7展示了AT24C02的一个工作流程:首先是对AT24C02进展初始化,方便密码的输入,当输入的密码正确,就会解锁,显示屏显示open,否如此显示error并重新输入密码。 4.2.2 1602子程序流程图图81602显示器的工作流程图展示了1602的工作流程:启动时,首先对1602进展初始化,然后检测有没有数据写入,当有数据写入时,1602便读出数据并显示,没有数据写入时,1602就一直处于等待中,直至有数据写入。1602子程序流程图如图8所示。5实物调试用KEIL编写程序软件编写程序、经过Proteus仿真软件仿真调试之后,确认了此系统可正常运行,在这样的前提下,我们利用一个单片机最小系统

6、、一块用电路板焊接的模块和一个1602液晶显示屏完成了第一次实物仿真。图9图9界面显示为输入密码,这时我们按下按键输入密码。当我们输入密码时,如下图为密码正确的实物图,如图10所示。图10当密码输入正确时,显示屏就会显示OPEN。假如密码输入错误,如下图为密码输入错误的实物图,如图11所示。图11当我们输入错误的密码时,显示屏就会显示error。如下图为密码修改成功的实物图,如图12所示。图12当密码修改成功时,显示屏就会显示RestPasswordOK。6心得体会通过此次课程设计,我重新把单片机与相关知识联系在了一起虽然掌握的知识不是很多,但通过查找资料我还是对单片机有了很好的了解和掌握。在

7、设计中我才发现单片机虽然体积小但是功能很强大,在生活中很多地方都可以用到它。单片机这门学科博大精深,在以后的学习中只有多看书,理论与实践结合才能把这门课掌握好。掌握了LCD的使用方法与编程。同时我也体会到合作的好处。让我懂得了如何合作,对不同看法发表自己的意见。此次设计中最要的一点是,让我知道了,理论联系实践的好处。不管理论学的再怎么好都必须联系实践,只有在实践中我们才会更加懂得如何运用自己的所学,在实践中将自己的知识实物化。理论联系实践是我们获取知识的最优途径。参考文献1谭浩强主编. C程序设计题解与上机指导第3版M. ,清华大学,2005.16-24 附录1(1)系统总电路图系统总电路图,

8、如图12所示。图132 系统仿真图系统仿真图,如图13所示。图143 PCB板 设计使用的PCB如图14所示图15附录2程序清单#include #include#define LCM_Data P0 #define uchar unsigned char #define uint unsigned int /#define Busy 0x80 /用于检测LCM状态字中的Busy标识 #define w 6 /定义密 码位数sbit lcd1602_rs=P25;sbit lcd1602_rw=P26;sbit lcd1602_en=P27;sbit Scl=P34; /24C02串行时钟 s

9、bit Sda=P35; /24C02串行数据 sbit ALAM = P21; /报警 sbit KEY = P20; /开锁 sbit open_led=P22; /开锁指示灯 bit operation=0; /操作标志位 bit pass=0; /密码正确标志 /bit ResetEn=0; /重设密码充允许标志 bit ReInputEn=0; /重置输入充允许标志 bit s3_keydown=0; /3秒按键标志位 bit key_disable=0; /锁定键盘标志 unsigned char countt0,second; /t0中断计数器,秒计数器 void Delay5M

10、s(void);unsigned char code a=0xFE,0xFD,0xFB,0xF7; /控盘扫描控制表 unsigned char code start_line=password: ;unsigned char code name=2=Coded Lock= /显示名称 unsigned char code Correct= correct /输入正确 unsigned char code Error= error /输入错误 unsigned char code codepass = pass unsigned char code LockOpen = open /OPEN

11、unsigned char code SetNew= SetNewWordEnableunsigned char code Input= input: /INPUTunsigned char code ResetOK= ResetPasswordOK unsigned char code initword = Init password.unsigned char code Er_try= error,try again!unsigned char code again= input again unsigned char InputData6; /输入密码暂存区 unsigned char

12、CurrentPassword6=1,1,1,1,1,1; /当前密码值 unsigned char TempPassword6;unsigned char N=0; /密码输入位数记数 unsigned char ErrorCont; /错误次数计数 unsigned char CorrectCont; /正确输入计数 unsigned char ReInputCont; /重新输入计数 unsigned char code initpassword6=1,1,1,1,1,1;/=5ms延时= void Delay5Ms(void) unsigned int TempCyc = 5552;

13、while(TempCyc-); /=400ms延时= void Delay400Ms(void) unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-) TempCycB=7269; while(TempCycB-); /=24C02= void mDelay(uint t) /延时 uchar i; while(t-) for(i=0;i125;i+) ; void Nop(void) /空操作 _nop_(); /*起始条件*/ void Start(void) Sda=1; Scl=1; Nop(); Sda=

14、0; /*停止条件*/ void Stop(void) /*应答位*/ void Ack(void) Sda=0; Scl=0; /*反向应答位*/ void NoAck(void) Sda=1;Scl=0; /*发送数据子程序,Data为要求发送的数据*/ void Send(uchar Data) uchar BitCounter=8;char temp;do temp=Data; if(temp&0x80)=0x80) else Sda=0;Scl=1; temp=Data1; Data=temp; BitCounter-;while(BitCounter); /*读一字节的数据,并返回

15、该字节值*/ uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; do Scl=0; if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) temp1=temp0;x-) for(y=110;yy-);/-写指令- void write_1602(uchar )/*液晶写入指令函数* lcd1602_rs=0; /数据/指令选择置为指令 lcd1602_rw=0; /读写选择置为写 P0=; /送入数据 delay(1); lcd1602_en=

16、1; /拉高使能端,为制造有效的下降沿做准备 delay(1); lcd1602_en=0; /en由高变低,产生下降沿,液晶执行命令 return;/-写数据- void write_1602dat(uchar dat) /*液晶写入数据函数* lcd1602_rs=1; /数据/指令选择置为数据 P0=dat; /en置高电平,为制造下降沿做准备 /en由高变低,产生下降沿,液晶执行命令/-初始化- void lcd_init(void) write_1602(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602(0x0c);/开显示不显示光标

17、write_1602(0x06);/整屏不移动,光标自动右移 write_1602(0x01);/清显示 /=将按键值编码为数值= unsigned char coding(unsigned char m) unsigned char k; switch(m) case (0x18): k=1;break; case (0x28): k=2; case (0x48): k=3; case (0x88): k=A; case (0x14): k=4; case (0x24): k=5; case (0x44): k=6; case (0x84):B case (0x12): k=7; case

18、(0x22): k=8; case (0x42): k=9; case (0x82):C case (0x11):* case (0x21): k=0; case (0x41):# case (0x81):D return(k);/= 按键检测并返回按键值= unsigned char keynum(void) unsigned char row,col,i; P1=0xf0; if(P1&0xf0)!=0xf0) Delay5Ms(); Delay5Ms(); row=P10xf0; /确定行线 i=0; P1=ai; /准确定位 while(i4) =0xf0) col=(P1&0xff); /确定列线 break; /已定位后提前退出 else i+; return 0; while(P1&=0xf0); return (row|col); /行线与列线组合后返回 else return 0; /无键按下时返回0/=一声提示音,表示有效输入= void OneAlam(void) ALAM=0; ALAM=1;/=二声提示音,表示操作成功=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1