欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

电子密码锁单片机课程设计

  • 资源ID:138316302       资源大小:253KB        全文页数:27页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

电子密码锁单片机课程设计

单片机原理与应用技术课程设计报告电子密码锁设计专业班级: 电气 124 姓名: 时 间: 2015年1月2日 指导教师: 秦国庆 2015年1月2日13电子密码锁课程设计任务书1设计目的与要求设计出一个电子密码锁。准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:(1)状态显示功能:锁定状态时系统用3位数码管显示OFF,用3位码管显示成功开锁次数;成功开锁时用3位数码管显示888,用3位数码管显示成功开锁次数。(2)密码设定功能:通过一个4×4的矩阵式键盘可以任意设置用户密码(1-26位长度),同时系统掉电后能自动记忆和存储密码在系统中。(3)报警和加锁功能:密码的输入时间超过12秒或者连续3次输入失败,声音报警同时锁定系统,不让再次输入密码。此时只有使用管理员密码方能对系统解锁。2设计内容 (1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;3编写设计报告 写出设计的全过程,附上有关资料和图纸,有心得体会。4答辩 在规定时间内,完成叙述并回答问题。电子密码锁电气124 赵政权摘要:电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。本设计利用51单片机编程控制原理,采用矩阵键盘、数码管显示、数据存储器和报警系统构成电子密码锁的设计成品。其中数码管使用两组三位一体共阳数码管,数据存储器使用AT24C04芯片通过IIC协议实现数据的传输,矩阵键盘用执行效率极高的代码扫描控制。使用Keil4.6编写程序代码,用Proteus进行仿真,无误后使用Altium制图,最终做成能使用的成品。关键词: 51单片机 IIC协议 矩阵键盘 动态显示 Keil Proteus Altium1 引言电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下:1保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。3误码输入保护。当输入密码多次错误时,报警系统自动启动。4. 电子密码锁操作简单易行,一学即会。5. 干扰码功能,在输入正确密码前可输入任意码。6. 管理员功能,能使用管理员密码获得最高权限。7. 人性化设计,输密码的倒计时、用户输入密码的位数、剩余输入密码的次数等能够在相应的界面显示出来,提醒用户。2 总体设计方案2.1 设计思路利用单片机编程控制原理,采用矩阵键盘、数码管显示、数据存储器和报警系统构成本电子密码锁的设计成品。2.1.1 方案确定(1)单片机最小系统模块单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。一般推荐C 取10u,R取8.2K。当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。晶振电路:11.0592MHz可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合;12MHz可以产生精确的us级时歇,方便定时操作。所以我们这里使用12MHz的晶振。这里没有使用片外程序模块,所以EA接高电平。P1口接330欧姆的电阻原因详见数码管显示模块和蜂鸣器模块的讲解,单片机最小系统的模块图如下:图2.1.1-1 单片机最小系统模块(2)数码管显示模块和蜂鸣器模块首先我们需要了解单片机引脚灌电流和拉电流的一些参数。单片机的引脚,可以用程序来控制,输出高、低电平,这些可算是单片机的输出电压。但是程序控制不了单片机的输出电流。单片机的输出电流,很大程度上是取决于引脚上的外接器件。单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”,如图2.1.1-2左图所示;单片机输出高电平时,则允许外部器件,从单片机的引脚拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”,如图2.1.1-2右图所示。这些电流一般的大小,最大限度等这就是常见的单片机输出驱动能力的问题。每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌入的最大电流为 10 mA;每个 8 位的接口(P1、P2 以及 P3),允许向引脚灌入的总电流最大为 15 mA,而 P0 的能力强一些,允许向引脚灌入的最大总电流为 26 mA;全部的四个接口所允许的灌电流之和,最大为 71 mA。而当这些引脚“输出高电平”的时候,单片机的“拉电流”能力太差,不到 1 mA。结论就是:单片机输出低电平的时候,驱动能力尚可,而输出高电平的时候,就没有输出电流的能力。图2.1.1-2 灌电流和拉电流我们分析一下拉电流负载和灌电流负载的区别:图2.1.1-2左图中,是灌电流负载。单片机输出低电平时,LED亮;输出高电平的时候,那就什么电流都没有,此时就不产生额外的耗电。图2.1.1-2右图中,是拉电流负载。单片机输出低电平的时候,LED不亮,此时VCC通过R2把电流全部灌进单片机IO口,并且电流时5ma,单片机输出高电平的时候,VCC通过R2将电流注入到LED中,led亮。这时应该能注意到LED 不发光的时候,上拉电阻给的电流全部灌入单片机的引脚了,如果在一个8位的接口,安装了8个1K 的上拉电阻,当单片机都输出低电平的时候,就有 40mA 的电流灌入这个8位的接口!如果四个8位接口,都加上1K的上拉电阻,最大有可能出现32×5=160mA的电流,都流入到单片机中,这个数值已经超过了单片机手册上给出的上限。此时单片机就会出现工作不稳定的现象。而且这些电流,都是在负载处于无效的状态下出现的,它们都是完全没有用处的电流,只是产生发热、耗电大、电池消耗快等后果。综上所述,灌电流负载,是合理的;而“拉电流负载”和“上拉电阻”会产生很大的无效电流,并且功耗大。设计单片机的负载电路,应该采用“灌电流负载”的电路形式,以避免无谓的电流消耗。所以这里的数码管我们选择共阳的。之所以选择共阳的其实这里还有另一个原因:单片机的P0口是开漏输出,也就是当单片机P0口设置为1时,它相当为浮空状态,并不能提供高电平,如果需要高电平则需要接上拉电阻。我们发现这里如果使用共阳的数码管就不需要接上拉电阻,因为浮空状态和高电平都是让数码管灭,效果是一样的。这样可以减少电路的复杂性。(3)密码掉电存储模块单片机的RAM区在掉电之后会清除,ROM区空间又小,所以一些数据要存储在外部存储器中。本设计利用24C04来存储用户密码和管理员密码,利用IIC协议来实现24C04芯片和单片机的通信。 I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。起始和终止信号 :SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。图2.1.1-3 IIC起始和终止信号数据传送格式:字节传送与应答每一个字节必须保证是8位长度。数据传送时,先传送最高位,每一个被传送的字节后面都必须跟随一位应答位即一帧共有9位。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。图2.1.1-4 IIC字节传送与应答数据帧格式:I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。图2.1.1-5任一地址写入数据格式图2.1.1-6任一地址读取数据格式AT24C04的芯片地址如下图,1010为固定,A0,A1,A2正好与芯片的1,2,3引角对应,为当前电路中的地址选择线,三根线可选择8个芯片同时连接在电路中,当要与哪个芯片通信时传送相应的地址即可与该芯片建立连接,TX-1B实验板上三根地址线都为0。最后一位R/W为告诉从机下一字节数据是要读还是写,0为写入,1为读出。图2.1.1-7 AT24C04的芯片地址(4)用户输入模块用户主要利用按键输入密码等操作。考虑到用户密码需要1个启动输入密码功能按键、09这10位按键、1个确定按键、1个消除密码按键、1个返回按键、1个启动修改密码功能按键共15个按键。我们这里可以采用4×4扫描式矩阵按键,共16个按键,剩余1个按键预留拓展,以便于产品的升级开发。2.2 设计方框图根据设计思路,可分为人机交换层、控制层、数据交换层,这3层从上到下如下框图蜂鸣器警告数码管显示矩阵键盘输入AT89S51数据存储器 图2.2-1 设计方框图3 设计原理分析3.1 数码管电路的设计设计单片机的负载电路,应该采用“灌电流负载”的电路形式,以避免无谓的电流消耗。这里选择共阳的其实这里还有另一个原因:单片机的P0口是开漏输出,也就是当单片机P0口设置为1时,它相当为浮空状态,并不能提供高电平,如果需要高电平则需要接上拉电阻。我们发现这里如果使用共阳的数码管就不需要接上拉电阻,因为浮空状态和高电平都是让数码管灭,效果是一样的。这样可以减少电路的复杂性。关于数码管驱动,上面拉电流和灌电流讲解的很清楚,如果要使数码管达到满意的亮度这里需要加相应的驱动。数码管处需要7个管脚添加驱动,蜂鸣器需要1个,一共需要8个管脚添加驱动。所以这里我们选择74LS245芯片最为理想,但是由于实习的硬件资源短缺,本小组只领到了锁存器芯片74HC573,所以我们这里用74HC573来代替74LS245驱动,模块图如下:图3.1-1 数码管与蜂鸣器模块我们将要显示的数码管的公共端设置为高电平,将不需显示的数码管的公共端设置为低电平,再在段选端发送数据使数码管显示要显示的数字或字母。这样在延时一段时间后切换到另一个要显示的数码管,依次这样快速切换下去,根据人眼的暂留功能,就可以达到数码管的动态扫描式显示。注意:1、在切换下一个数码管显示时要先将段选全部设置为高,是数码管灭掉再切换到下一数码管,否则会有残影现象;2、在显示某一状态的界面时要设置相应的显示状态位,用于按键的松手检测里的显示判断,去除按键时的显示卡顿,使显示更加完美。3、因为数码管段选和蜂鸣器在一起,所以在蜂鸣器和数码管同时工作时推送的数据为段选数据加上蜂鸣器数据。3.2 数据存储器电路的设计24C04的两根数据段与单片机连接后,因为主机只有和此一个从机连接,所以地址端口全部拉低,再将VCC、Vss和使能端配置后,就可以根据IIC协议使用此芯片,连接好的24C04电路图如下。注意:在使用此芯片时要先将管理员密码和初始密码写进去,而之后不需要再进行此操作,所以单片机程序要下载两次,第二次下载时将写入管理员密码和初始密码的代码屏蔽去即可。图3.2-1 AT24C04模块3.3 矩阵键盘电路的设计我们将4×4键盘每行的左端连接在一块引出可以得到4个行控制端,同理把每列的右端连接在一块引出就可以得到4个列控制端,如图3.3-1所示。我们可以将这8个控制端依次接到单片机的P2口,可以先设置P2口数据为0X0F,并读取存储P2口数据key1,这样当某列按键按下时相应的端口的高电平被拉低,这时迅速设置P2口为0XF0,因为速度之快按键还没有松开,这样按键按下时相应的行端口的高电平被拉低,读取并存储P2口数据key2,根据key1和key2这两个值就可以得到哪个按键被按下。当然按键需要消抖等一系列操作。注意:当按键被按下的时候,由于单片机扫描键盘所以数码管就不会显示,这样按动按键时,数码管会一闪一闪地卡顿,如果按着按键不松手,数码管就直接不显示。为了修改此BUG,我们在松手检测中根据数码管显示状态的标志位继续扫描数码管使之显示,这样可以使数码管显示过渡平滑。图3.3-1 矩阵键盘模块4 结束语这次电子密码锁的设计是对之前学习知识的考察和回顾,不管是方案的建立、器件的选取还是程序的编写和电路板的制作,都是考察的很彻底,试一次综合性很强的设计,它不但提高了自己的思考能力和动手能力,也加强了我们的团结和合作能力,让我们明白到制作产品不只是知识的堆压,更是使用的巧妙性和我们的合作能力的表决。参考文献1杨欣.电子设计从零开始.北京:清华大学出版社,20052郭天祥.51单片机C语言教程.北京:电子工业大学出版社,20093阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989附录1:程序源代码/*sys.h*/宏定义一些用户常用的表达方式,方便程序的移植和调试#ifndef _SYS_H_#define _SYS_H_#define u8 unsigned char /255#define u16 unsigned int /6,5535#define uchar unsigned char #define uint unsigned int #endif/*delay.h*/#ifndef _DELAY_H_#define _DELAY_H_#include "sys.h"void delay(u16);#endif/*delay.c*/#include <reg52.h>#include "delay.h"void delay(u16 z)u16 x; u8 y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*timer.h*/#ifndef _TIMER_H_#define _TIMER_H_#include "sys.h"void tim0_init(void);#endif/*timer.c*/#include <reg52.h>#include "timer.h"u8 aa=0;u8 time=12;void tim0_init(void)time=12;TMOD|=0x01;TH0=0X3C;TL0=0XB0;EA=1;ET0=1;TR0=1;void timer0() interrupt 1 TH0=0X3C;TL0=0XB0;aa+;if(aa=20)aa=0; time-;/*dtsmg.h*/#ifndef _DTSMG_H_#define _DTSMG_H_#include "sys.h"#include "delay.h"#define d_x P0#define w_x P1#define d_f 10#define d_m 11extern u8 cishu;extern u8 time;extern u8 ajcs;extern u8 ret;extern u8 weis;extern u8 ccs;void dp_s(void);void dp_k(void);void dp_tim(void);void dp_ss(void);void dp_w(void);#endif16/*dtsmg.c*/#include <reg52.h>#include "dtsmg.h"u8 code smg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e,0xff;void display(u8 wei,u8 duan)d_x=0xff;w_x=1<<wei;d_x=smgduan;delay(10);void displayy(u8 wei,u8 duan)d_x=0xff;w_x=(1<<wei)+0x40;d_x=smgduan;delay(10);void dp_s(void)display(5,0);display(4,d_f);display(3,d_f);display(1,cishu>9?cishu/10%10:d_m);display(0,cishu%10);void dp_k(void)display(5,8);display(4,8);display(3,8);display(1,cishu>9?cishu/10%10:d_m);display(0,cishu%10);void dp_tim(void)display(5,time>9?time/10:time%10);display(4,time>9?time%10:d_m);display(2,ccs);display(1,weis>9?weis/10:d_m);display(0,weis%10);void dp_ss(void)displayy(1,weis>9?weis/10:d_m);displayy(0,weis%10);void dp_w(void)display(1,weis>9?weis/10:d_m);display(0,weis%10);/*KeyScan.h*/#ifndef _KEYSCAN_H_#define _KEYSCAN_H_#include "sys.h"#include "delay.h"#include "dtsmg.h"#define key P2extern u8 dp_zt;u8 key_scan();#endif/*KeyScan.c*/#include <reg52.h>#include "KeyScan.h"u8 key_scan(void) u8 ret=0;u8 keys1,keys2;key=0X0F;if(key!=0X0F) delay(10);if(key!=0X0F)keys1=key;key=0XF0;keys2=key;while(key!=0XF0)switch(dp_zt)case 0X01: dp_s(); break;case 0X02: dp_tim(); break;case 0X03:dp_k(); break; switch (keys1)case 0X0E: /第1行switch (keys2) case 0XE0: /第1列ret = 16;break; case 0XD0: /第2列ret = 12;break; case 0XB0: /第3列ret = 8;break; case 0X70: /第4列ret = 4;break;break;case 0X0D: /第2行switch (keys2) case 0XE0: /第1列ret = 15;break; case 0XD0: /第2列ret = 11;break; case 0XB0: /第3列ret = 7;break; case 0X70: /第4列ret = 3;break;break;case 0X0B: /第3行switch (keys2) case 0XE0: /第1列ret = 14;break; case 0XD0: /第2列ret = 10;break; case 0XB0: /第3列ret = 6;break; case 0X70: /第4列ret = 2;break;break;case 0X07: /第4行switch (keys2) case 0XE0: /第1列ret = 13;break; case 0XD0: /第2列ret = 9;break; case 0XB0: /第3列ret = 5;break; case 0X70: /第4列ret = 1;break;break; return ret;18/*at24c04.h*/#ifndef _AT24C04_H_#define _AT24C04_H_#include "sys.h"#include "delay.h"sbit sda=P31;sbit scl=P30;void write_add(u8 address,u8 date);u8 read_add(u8 address);#endif/*at24c04.c*/#include <reg52.h>#include <intrins.h>#include "at24c04.h"/ u8 a;void Delay5us()_nop_();_nop_();_nop_();_nop_();_nop_();void start()sda=1;scl=1;Delay5us();sda=0;Delay5us();void stop()sda=0;scl=1;Delay5us();sda=1;Delay5us();void respons()u8 i;scl=1;Delay5us();while(sda=1)&&(i<250)i+;scl=0;Delay5us();void write_byte(u8 date)u8 i,temp;temp=date;for(i=0;i<8;i+)temp=temp<<1;scl=0; Delay5us();sda=CY;Delay5us();scl=1;Delay5us();scl=0;Delay5us();sda=1;Delay5us();u8 read_byte()u8 i,k;scl=0;Delay5us();sda=1;Delay5us();for(i=0;i<8;i+)scl=1;Delay5us();k=(k<<1)|sda;scl=0;Delay5us();return k;void write_add(u8 address,u8 date)start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();delay(100);u8 read_add(u8 address)u8 date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;19/*main.c*/#include <reg52.h>#include "sys.h"#include "timer.h"#include "dtsmg.h"#include "at24c04.h"#include "KeyScan.h"u8 cishu;u8 weis=0;u8 ccs=3;u8 dp_zt=0;extern u8 jmg17;extern u8 gmg17;extern u8 time;void main()u8 ret=0,mg_f,k_f,i,ssj,xgcg;u8 xmg16=0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;u8 nmg16=0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;u8 jmg17=0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;u8 gmg17=0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;P1=0x00;P0=0xff;cishu=0;/for(i=0;i<17;i+)/write_add(i,0xff);/for(i=100;i<117;i+)/write_add(i,0xff);/write_add(0,0x01);/write_add(1,0x0a);/write_add(2,0x0a);/write_add(3,0x08);/write_add(4,0x06);/write_add(100,0x01);/write_add(101,0x01);/write_add(102,0x0a); for(i=0;i<16;i+)if(read_add(i)>10)break;jmgi=read_add(i);for(i=0;i<16;i+)if(read_add(i+100)>10)break;gmgi=read_add(i+100); while(1) dp_zt=1;/显示状态1,使按键显示界面过渡平滑 dp_s(); if(key_scan()=13)/按下输入密码键 weis=0; dp_zt=0; tim0_init(); while(1) dp_zt=2;/显示状态2,使按键显示界面过渡平滑 dp_tim(); if(ret=key_scan() if(ret<11)&&(weis<16) /16位以内09密码 xmgweis+=ret;else if(ret=15&&weis) /消位键 xmg-weis=0xff;else if(ret=16&&weis) /确定键 for(i=0;i<weis;i+) if(xmgi=jmgi) mg_f+; if(mg_f=weis)&&(jmgweis=0Xff) mg_f=0;for(i=0;i<weis;i+) xmgi=0xff;cishu+;k_f=1;weis=0;dp_zt=0;break; else/密码错误处理 mg_f=0;ccs-;for(i=0;i<16;i+) xmgi=0xff;k_f=0;weis=0;if(ccs)break; if(!time|!ccs) dp_zt=0; weis=0; for(i=0;i<16;i+)xmgi=0xff; while(1) dp_ss();if(ret=key_scan()if(ret<11)&&(weis<16)/16位以内09管理员密码 xmgweis+=ret; else if(ret=15&&weis)/消位键xmg-weis=0xff;else if(ret=16&&weis)/确认键for(i=0;i<weis;i+)if(xmgi=gmgi) mg_f+;if(mg_f=weis)&&(gmgweis=0Xff)mg_f=0;for(i=0;i<weis;i+) xmgi=0xff;weis=0;ccs=3;ssj=1;break;else /密码错误处理mg_f=0;for(i=0;i<16;i+) xmgi=0xff;weis=0;if(ssj)ssj=0;break;while(k_f)dp_zt=3;/显示状态3,使按键显示界面过渡平滑 dp_k(); if(ret=key_scan()if(ret=12)dp_zt=0;break;else if(ret=11)/按下修改密码键 while(1) dp_zt=0; dp_w(); if(xgcg=1) xgcg=0;break; if(ret=key_scan() if(ret<11)&&(weis<16) /输入第一次新密码xmgweis+=ret; else if(ret=15&&weis) /消位键xmg-weis=0xff;else if(ret=16&&weis) /确认键 weis=0; while(1) dp_w();if(ret=key_scan() if(ret<11)&&(weis<16)/输入第二次新密码25nmgweis+=ret;else if(ret=15&&weis) /消位键nmg-weis=0xff;else if(ret=16&&weis) /确认键for(ret=0;ret<weis;ret+)if(xmgret=nmgret) mg_f+;if(mg_f=weis)&&(jmgweis=0Xff)&&(nmgweis=0Xff) mg_f=0; for(i=0;i<weis;i+) write_add(i,nmgi);jmgi=read_add(i);xmgi=0xff;nmgi=0xff; weis=0; xgcg=1; break;else/两次新密码不同时的处理 mg_f=0; for(i=0;i<16;i+) xmgi=0xff;nmgi=0xff; weis=0; break; 附录2:电路原理图附录3:电路PCB

注意事项

本文(电子密码锁单片机课程设计)为本站会员(沈***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!