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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于51单片机的简易电子密码锁.docx

1、基于51单片机的简易电子密码锁 前言随着电子技术的发展,具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。电子密码锁与普通机械锁相比,具有许多独特的优点:保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。下面就是现在主流电子密码锁:目前常见的遥控式电子防盗锁主要有光遥控和无线电遥控两类。键盘式电子密码锁从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。卡式电子防盗锁使用各种“卡

2、”作为钥匙的电子防盗锁是当前最为活跃的产品,无论卡的种类如何多种多样,按照输入卡的操作方式,都可分为接触式卡和非接 触式卡两大类。生物特征防盗锁人的某些与生俱来的个性特征(如手、眼睛、声音的 特征)几乎不可重复,作为“钥匙”就是唯一的(除非被逼迫或伤害)。因此,利用生物特征做密码的电子防盗锁,也特别适合金融业注重“验明正身”的行业特点。人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自 古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,

3、电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码 量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。但较实用的还是按键式电子密码锁。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还

4、局限在一定范围,难以普及,所以对它的研究一直没有明显进展。 目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被 广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。 在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。 一、作品功能:1、设置6位密码,密码通过键盘输

5、入,若密码正确,则将锁打开。2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。3、报警、锁定键盘功能。密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。4、AT24C02保存密码,支持复位保存,掉电保存功能。二、按键说明按键定义图如图示:采用4X4键盘输入,键盘对应名称如下:1 2 3 A4 5 6 B7 8 9 C* 0 # D其中, 【09】为数字键,用于输入相应的密码, 【*】号键为取消当前操作 【#】号键为确认 【D】键为修改密码 其它键无功能及定义三、操

6、作说明: 密码锁初始密码为:.1、开锁:插上电源后,程序自动调入初始密码,此时依次输 入:,然后按【#】(确认)键,此时锁会打开,可以看到显示open,密码锁打开。2、退出并关锁:按下【*】(取消)键,此时锁关闭,所有输入清除。3、修改密码:在开锁状态下,再次输入正确的密码并按下【#】(确认)键,此时听到两声提示,输入新的六位密码并按【D】(重设)键,再重复输入一次新密码并按【D】,会听到两声提示音,表示重设密码成功,内部保存新密码并存储到AT24C02。(如两次输入的新密码不一样,则重设密码失败)。4、报警并锁定键盘:当输入密码错误后,报警并锁定键盘3秒,如3秒内又有按键,3秒再启动。5、当

7、重置新密码时,新密码会保存于AT24C02存储器里。四、框图及流程图 1、系统结构框图2、主程序设计流程图 N Y N N Y 3、键功能程序流程图。 Y N Y N Y N Y N 4、开锁程序流程图 Y 5.电子密码锁原理图程序(c语言)#include #include#define LCM_Data P0#define uchar unsigned char #define uint unsigned int#define w 6 /定义密码位数sbit lcd1602_rs=P25;sbit lcd1602_rw=P26;sbit lcd1602_en=P27;sbit Scl=P3

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

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

10、ar code SetNew = SetNewWordEnable;unsigned 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

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

12、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_(); _nop_(); _nop_(); _nop_();/*起始条件*/void Start(void) Sda=1;

13、Scl=1; Nop(); Sda=0; Nop(); /*停止条件*/void Stop(void) Sda=0; Scl=1; Nop(); Sda=1; Nop();/*应答位*/void Ack(void) Sda=0; Nop(); Scl=1; Nop(); Scl=0;/*反向应答位*/void NoAck(void) Sda=1; Nop(); Scl=1; Nop(); Scl=0; /*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; Scl=0

14、; Nop(); if(temp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter); Scl=0;/*读一字节的数据,并返回该字节值*/uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1; do Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1)

15、 temp1=temp1; temp=temp1; BitCounter-; while(BitCounter); return(temp); void WrToROM(uchar Data,uchar Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;iNum;i+) Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Send(*(PData+i); Ack(); Stop(); mDelay(20); void RdFromROM(uchar Data,uchar

16、 Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;i0;x-) for(y=110;y0;y-);/-写指令-write_1602com(uchar com)/*液晶写入指令函数* lcd1602_rs=0;/数据/指令选择置为指令 lcd1602_rw=0; /读写选择置为写 P0=com;/送入数据 delay(1); lcd1602_en=1;/拉高使能端,为制造有效的下降沿做准备 delay(1); lcd1602_en=0;/en由高变低,产生下降沿,液晶执行命令/-写数据-write_1602dat(uch

17、ar dat)/*液晶写入数据函数* lcd1602_rs=1;/数据/指令选择置为数据 lcd1602_rw=0; /读写选择置为写 P0=dat;/送入数据 delay(1); lcd1602_en=1; /en置高电平,为制造下降沿做准备 delay(1); lcd1602_en=0; /en由高变低,产生下降沿,液晶执行命令/-初始化-void lcd_init(void) write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);/开显示不显示光标 write_1602com(0x06);/整屏不移

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

19、; case (0x12): k=7;break; case (0x22): k=8;break; case (0x42): k=9;break; case (0x82): k=C;break; case (0x11): k=*;break; case (0x21): k=0;break; case (0x41): k=#;break; case (0x81): k=D;break; return(k);/=按键检测并返回按键值=unsigned char keynum(void) unsigned char row,col,i; P1=0xf0; if(P1&0xf0)!=0xf0) Del

20、ay5Ms(); Delay5Ms(); if(P1&0xf0)!=0xf0) row=P10xf0; /确定行线 i=0; P1=ai; /精确定位 while(i4) if(P1&0xf0)!=0xf0) col=(P1&0xff); /确定列线 break; /已定位后提前退出 else i+; P1=ai; else return 0; while(P1&0xf0)!=0xf0); return (row|col); /行线与列线组合后返回 else return 0; /无键按下时返回0/=一声提示音,表示有效输入=void OneAlam(void) ALAM=0; Delay5M

21、s(); ALAM=1;/=二声提示音,表示操作成功=void TwoAlam(void) ALAM=0; Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0; Delay5Ms(); ALAM=1;/=三声提示音,表示错误=void ThreeAlam(void) ALAM=0; Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0; Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0; Delay5Ms(); ALAM=1;/=显示输入的N个数字,用H代替以便隐藏=void DisplayOne(void)/ Di

22、splayOneChar(9+N,1,*); write_1602com(yi+5+N); write_1602dat(*);/=显示提示输入=void DisplayChar(void) unsigned char i; if(pass=1) /DisplayListChar(0,1,LockOpen); write_1602com(er); for(i=0;i16;i+) write_1602dat(LockOpeni); else if(N=0) /DisplayListChar(0,1,Error); write_1602com(er); for(i=0;i16;i+) write_1

23、602dat(Errori); else /DisplayListChar(0,1,start_line); write_1602com(er); for(i=0;i16;i+) write_1602dat(start_linei); void DisplayInput(void) unsigned char i; if(CorrectCont=1) /DisplayListChar(0,0,Input); write_1602com(er); for(i=0;i16;i+) write_1602dat(Inputi); /=重置密码=/=void ResetPassword(void) unsigned char i; unsigned char j; if(pass=0) pass=0; DisplayChar(); ThreeAlam(); else if(ReInputEn=1) if(N=6) ReInputCont+; if(ReInputCont=2) for(i=0;i6;)

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

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