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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于单片机的四位电子密码锁的设计Word下载.docx

1、本设计选用单片机AT89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。当用户需要开锁时,先按键盘开锁键之后按键盘的数字键09输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当n9(次数可改)次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码

2、修改成功。可以看出方案二控制灵活准确性好且保密性强还具有声光提示、掉电存储、无线遥控等扩展功能,根据现实生活的需要此次设计采用此方案,如图11所示。矩阵键盘控制89C52单片机输入错误锁定键盘延时报警控制电路无线遥控控制电路AT24C02掉电存储指示电路串口显示电路图11单片机控制方案1.2系统结构 图12如图12所示系统主要由AT89C52、AT24C02液晶显示屏、蜂鸣器、LCD、44矩阵键盘、复位电路、无线收发模块、无线发射键盘组成。第2章 硬件电路设计2.1 89C52单片机最小系统图2-1-1 AT89S52最小工作系统1、时钟电路:单片机工作的时间基准,决定单片机工作速度。时钟电路

3、就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。AT89S51单片机时钟频率范围:033MHz。本设计晶振选择频率为12MHZ,电容选择30pF如图(34)。经计算得单片机工作胡机器周期为:12(112M)=1us。时钟电路连接方式为: 图2-1-2 时钟电路3、复位电路:确定单片机工作的起始状态,完成单片机的启动过程。单片机接通电源时产生复位信号,完成单片机启动,确定单片机起始工作状态。手动按键产生复位信号,完成单片机启动,确定单片机的初始状态。 通常在单片机工作出现混乱或“死机”时,使用手动复位可实现单片机“重启”。 图2-1-3 复位电路2.2 44矩阵键盘如图所

4、示,本系统采用44矩阵键盘,16个按键分为输入数字键:*、0、#、1、2、3、4、5、6、7、8、9;功能键lock、modify、cel、Enter。矩阵键盘。 图2-2-1注:其中,【09】为数字键,用于输入相应的密码,【*】号键为取消当前操作【#】号键为确认【D】键为修改密码【C】产生随机密码【B】修改密码输入次数2.3 液晶显示屏LCD16021602是指显示的内容为16*2,即可以显示两行,每行16个字符。现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据

5、总线D0D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母大小写、常用符号和日文假名等,每个字符都有一个固定的代码,需要显示是可通过控制指令直接调用。2.4 蜂鸣器、发光二极管(a) 图2-4-1 (b)由于蜂鸣器(a)使用P0口驱动要加上上拉电阻如图2-4-1(a)。在本设计中,蜂鸣器每当按下一个数字按键短蜂鸣一次,发生错误长蜂鸣一次。由于LED(b)使用P0口驱动要加上上拉电阻如图2-4-1(b)。2.5 无线收/发模块发射模块型号

6、:T1000BS1。该模块工艺成熟、性能优秀,电磁转换效率高、发射功率大、功耗低,采用声表器件(SAW)稳频,6.5G超高频三极管, 编码芯片品种繁多,满足各个方面、层次的应用。接收模块型号:R03BS。接收方式:超再生、解码芯片:PT2272-M4(L4)。有四路并行数据输出,一路解码有效指示输出(非锁)。八位三态地址码、解码有效时输出TTL高电平。输出方式:有两种,一种为非锁(M)方式(即点动或脉冲方式),另一种为互锁(L)方式(即信号锁存方式)。2.6 掉电存储(AT24C02)AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含2568位存储空间,具有工作电压宽(2.

7、55.5 V)、擦写次数多(大于10000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和IO线,并且支持在线编程,进行数据实时的存取十分方便。图2-5 AT24C02的电路接线图24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。第3章 软件程序的设计3.1 功能设计本系统程序部分使用C语言编写,C语言是一种高级程序设计语言,它的优点是简洁明了、可移植性高

8、。主要完成,开始时数码管显示提示“input”输入密码。输入密码后按下确认键,系统会将所输入与系统密码进行比对。若输入密码正确则显示“open”开锁。然后可以选择上锁或者修改密码、产生随机码并任意保存、修改键盘锁定错误次数、出场默认值恢复。此外,还有声光提示、掉电保护,无线/有线切换控制和密码显示与隐藏等附加功能。图4-1-1软件设计流程图3.2 总电路图及源程序(见图附)第4章 结束语通过这电子设计,让我们重新学习了很多学过的旧知识,也锻炼了自己的动手能力和查阅资料的能力,以及发扬了团队的协作精神。尤其是完成无线键盘的制作过程中,总会遇到大大小小的问题而无法成功。归其原因,忽略了单片机设计基

9、本的步骤和思路,急于求成。但值得高兴的是,我们组虚心求教,及时补救,积极面对。一次次的弯路和失败,并没有让我们感到沮丧,却让我们的知识更加的细化和完善,探索精神也被强烈的激发。在感叹科技力量的永无止境的同时,也发现了自身知识的欠缺和不足,我们应当在以后的学习和实践过程中,更加努力和善于思考,以应对以后更加激烈的挑战。附:总电路图源程序#include #includestdio.hstdlib.h#define LCM_Data P0#define wxjc P1#define uchar unsigned char #define uint unsigned int/#define Busy

10、 0x80 /用于检测LCM状态字中的Busy标识#define w 4 /定义密码位数sbit lcd1602_rs=P27;sbit lcd1602_rw=P26;sbit lcd1602_en=P25;sbit wxbz=P36;sbit Scl=P34; /24C02串行时钟sbit Sda=P35; /24C02串行数据sbit ALAM = P21; /报警 sbit KEY = P20; /开锁sbit mmxs = P37; /密码显示sbit open_led=P22; /开锁指示灯bit operation=0; /操作标志位bit pass=0; /密码正确标志bit m

11、msd=0; /19次密码设定标志/bit ResetEn=0; /重设密码充许标志bit ReInputEn=0; /重置输入充许标志 bit s3_keydown=0; /3秒按键标志位bit key_disable=0; /锁定键盘标志unsigned char countt0,second; /t0中断计数器,秒计数器void Delay5Ms(void);static unsigned char tmp2=80;unsigned char m,d,sjmbz=0;unsigned char code a=0xFE,0xFD,0xFB,0xF7; /控盘扫描控制表unsigned ch

12、ar code suijishu = Rand Number: ; /随机码unsigned char code set = setting: unsigned char code cwcs = Number of errors /19次随机码任意设定unsigned char code sjp = Lock the keypad unsigned char code start_line = password:- unsigned char code name = =Coded Lock= /显示名称unsigned char code Correct = correct /输入正确unsi

13、gned char code Error = error /输入错误unsigned char code codepass = pass unsigned char code LockOpen = open /OPENunsigned char code SetNew = SetNewWordEnableunsigned char code Input = input: /INPUTunsigned char code ResetOK = ResetPasswordOK unsigned char code initword = Init password.unsigned char code

14、 Er_try = error,try again!unsigned char code again = input again unsigned char InputData4; /输入密码暂存区unsigned char CurrentPassword4=1,3,1,4; /当前密码值unsigned char TempPassword4;unsigned char N=0; /密码输入位数记数unsigned char cun1;unsigned char C=3;unsigned char ErrorCont; /错误次数计数unsigned char CorrectCont; /正确

15、输入计数unsigned char ReInputCont; /重新输入计数unsigned char code initpassword4=0,0,0,0;/=5ms延时=void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/=400ms延时=void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); /=/=24C02=void

16、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=0; /*停止条件*/void Stop(void)/*应答位*/void Ack(void) Sda=0; Nop(); Scl=1; Scl=0;/*反向应答位*/void NoAck(void) Scl=0; /*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data) uchar BitCo

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

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

19、xa1); *(PData+i)=Read(); NoAck();/=/=LCM1602=/读数据/*unsigned char ReadDataLCM(void) LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 1; return(LCM_Data);*/读状态unsigned char ReadStatusLCM(void) LCM_Data = 0xFF; LCM_RS = 0; LCM_Data=LCM_Data & Busy; while (LCM_Data & Busy); /检测忙信号/写数据void WriteDataLCM(unsigne

20、d char WDLCM) ReadStatusLCM(); /检测忙 LCM_Data = WDLCM; LCM_RS=1; LCM_RW=0; LCM_E=0; /若晶振速度太高可以在这后加小的延时 /延时 LCM_E=1;/写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为0时忽略忙检测 if (BuysC) ReadStatusLCM(); /根据需要检测忙 LCM_Data = WCLCM; LCM_RW = 0;/=LCM初始化=void LCMInit(void) LCM_Data = 0; WriteComman

21、dLCM(0x38,0); /三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); /关闭显示 WriteCommandLCM(0x01,1); /显示清屏 WriteCommandLCM(0x06,1); /显示光标移动设置 WriteCommandLCM(0x0C,1); /显示开及光标设置/=按指定位置显示一个字符=void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if(Y) X |= 0x40; /当要显示第二行时地址码+0x40; X |= 0x80; / 算出指令码 WriteCommandLCM(X,

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

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