密码锁终极版2

学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 数字式密码电子锁电路设计

初始条件:已知条件

本课程设计,要求用集成电路和其它器件实现数字式密

码电子锁电路功能。工作电源Vcc为5V。电路组成框图。如

图1所示:实际锁体一般由电磁线圈、锁栓、弹簧和锁柜构成。

当线圈有电流时,产生磁力,吸动锁栓,即可开锁。反之则不

开锁。本次课程设计实际装配时,锁体用LED代替。 图1 数字式电子锁电路原理框图 要求完成的主要任务:

(1)设计任务

根据已知条件,完成数字式密码电子锁电路的设计、装配与调试。

(2)设计要求

① 其密码为方4位(或8位)二进制代码(代码自设定)。

② 开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。(报警动作为响1分钟,停10秒)

③ 选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。(选做:用EWB软件完成仿真)

④ 安装调试设计电路,并按规定格式写出课程设计报告书。

时间安排:

1、 2011 年 7 月 3 日分班集中,作课设具体实施计划与课程设计报告格式的要求说明,分发工具与器材。

2、 2011 年 7 月 4 日 至 2011 年 7 月 8 日完成设计制作与调试。

3、 2011 年 7 月 8 日完成课程设计报告与答辩。

指导教师签名: 年 月 日

系主任(或责任教师)签名: 年 月 日

目录

摘 要 ............................................. 错误!未定义书签。 Abstract ........................................... 错误!未定义书签。

1.课设题目 ......................................... 错误!未定义书签。

2.设计的技术指标和参数要求 ......................... 错误!未定义书签。

2.1设计的技术指标 .............................. 错误!未定义书签。

2.2设计的参数要求 .............................. 错误!未定义书签。

3.设计原理和单元模块 ............................... 错误!未定义书签。

3.1方法设计与论证 .............................. 错误!未定义书签。

3.2设计原理 .................................... 错误!未定义书签。

3.3单元模块 .................................... 错误!未定义书签。

3.3.1 单片机STC89C52简介 ................... 错误!未定义书签。

3.3.2 键盘输入模块 ......................... 错误!未定义书签。

3.3.3 显示模块 .............................. 错误!未定义书签。

3.3.4 密码存储模块 .......................... 错误!未定义书签。

3.3.5复位部分 .............................. 错误!未定义书签。

3.3.6报警部分 .............................. 错误!未定义书签。

3.3.7 开锁部分 ............................. 错误!未定义书签。

3.3.8晶振部分 .............................. 错误!未定义书签。

4.硬件的安装与调试 ................................. 错误!未定义书签。

4.1硬件的安装 .................................. 错误!未定义书签。

4.2硬件的调试 .................................. 错误!未定义书签。

5.软件程序设计 .................................... 错误!未定义书签。

6.性能测试与数据分析 ............................... 错误!未定义书签。

6.1程序调试 .................................... 错误!未定义书签。

6.2性能测试 .................................... 错误!未定义书签。

6.3数据分析 .................................... 错误!未定义书签。

7.结束语 ........................................... 错误!未定义书签。

8.参考文献 ......................................... 错误!未定义书签。

附录一 ............................................. 错误!未定义书签。 附录二 ............................................. 错误!未定义书签。 附录三 ............................................. 错误!未定义书签。 本科生课程设计成绩评定表 ........................... 错误!未定义书签。

摘 要

本设计的电子密码锁利用52单片机控制电路,实现对锁的电子控制,并且有各种附加电路保证电路能够安工作,能够自己设置密码,有极高的安全系数。 本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超次报警、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外。本系统成本低廉,功能实用。

关键词: 电子密码锁;STC89C52单片机;AT24C02;

Abstract

This design of electronic trick lock using single-chip microcomputer control

circuit, realize 52 to lock of electronic control, and have all sorts of additional circuit to Ann work, that can set password, have the extremely high safety coefficient. The system is composed of single-chip microcomputer system, the matrix keyboard, and LED display and alarm systems. The system can complete the lock, super times alarm; modify user password basic trick lock function. In addition to the basic

function of combination lock. This system the cost is low and the function is practical.

Keywords: electronic trick lock; STC89C52 single-chip microcomputer; AT24C02

1.课设题目

本次课设所选的题目是《数字式电子密码锁电路设计》,主要用单片机控制电路。

2.设计的技术指标和参数要求

2.1设计的技术指标

本设计采用STC89C52单片机为主控芯片,结合外围电路,通过软件

程序组成电子密码锁系统,能够实现:

1.开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开;

2.当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁;

3.选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件

选择、并画出总体电路原理图,阐述基本原理。

4. 安装调试设计电路。

2.2设计的参数要求

1.其密码为方4位(或8位)二进制代码(代码自设定);

2.报警动作为响1分钟,停10秒。

3.设计原理和单元模块

3.1方法设计与论证

方案一:采用数字电路控制

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不采用。

方案二:采用以单片机为核心的控制方案

选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。

因此综合考虑,本系统采用方案二。

3.2设计原理

设计用STC89C52作为本次设计的核心原件,利用单片机灵活性的编程设计和其控制的准确性,实现基本的密码控制功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接1602液晶显示器用于输出显示。

本设计主要由单片机、矩阵式键盘、液晶显示器和密码存储器等部分构成。 其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机 的矩阵键盘输入密码,然后经过单片机对用户输入的密码与自己保存的密码进行核对,从而判断是否正确,然后控制引脚的高低电平转到液晶,显示密码正确还是密码错误以及蜂鸣器是否报警。

本系统一共由两部分组成,硬件和软件部分。其中硬件部分由键盘输入部分、复位部分、晶振部分、报警部分组成,软件部分对应的主要由主程序、初始化程序、液晶显示程序、键扫程序,键功能程序、密码设置程序、延时程序等组成。其原理框图如图

各模块功能如下:

1.键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码锁输入功

能。2.显示模块:用于完成对系统状态显示及操作提示功能。3.复位电路:

完成系统的复位。4.报警电路:用于完成输错密码时候的警报功能。5.密码存储模块:用于完成掉电存储功能,使修改的密码断电后仍能保存。6.开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提示。

3.3单元模块

3.3.1 单片机STC89C52简介

考虑到设计功能的需要,控制器的功能用于外部键盘信号的接受和识别、液晶的显示与密码的辨认相关的信息,我们选择了STC89C52系列的单片机,具有反应速度快,工作效率特高的特点。

STC89C52是种低功耗、高性能CMOS8的微处理器,具有8K字节系统可编程Flash存储器。使用STC公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。另外,STC89C52可降至0Hz静态逻辑操作,支持2种 软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

其引脚图如图3.3.1。

图3.3.1 STC89C52引脚图

3.3.2 键盘输入模块

本设计中使用的4×4键盘,不但能完成密码的输入还能作特别功能键使用。键盘的每个按键功能在程序设计中设置。

工作原理,首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。

判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,

则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

它与单片机的连接如图3.3.2所示

图3.3.2.键盘模块电路图

3.3.3 显示模块

(1)LED1602的接口信号说明:

1602型LCD的接口信号说明如表3-1所示。

表3.1 1602型LCD的接口信号说明

(2)显示模块

显示部分由液晶显示器LCD1602取代普通的数码管完成。

开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。

当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“success”,单片机其中P1.2引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,相当于绿灯亮。

如果密码不正确,LCD显示屏会显示“error”,P1.2输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。

电路图如图3.3.3所示。

图3.3.3显示模块电路图 图3.3.4密码存储模块电路图

3.3.4 密码存储模块

图3.3.3所示AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在STC89C52试验开发板上它们都接地,第7脚和第8脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I²C总线串行传送,在STC89C52试验开发板上和单片机的P2.0连接。第6脚SCL为串行时钟输入线,在AT89S52试验开发板上和单片机的P2.1连接。SDA和SCL都需要和正电源间各接一个10K的电阻上拉。第6脚接P2.1。AT24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写 入多达8个字节的数据。存储模块的电路图如图3.3.4。

3.3.5复位部分

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C3上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C3足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R4放电。当电容C3放

电结束后,RST端的电位由R3与R4分压比决定。由于R3

图 3.5.5 复位模块电路图

3.3.6报警部分

报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.3引脚为高电平,三极管T3导通蜂鸣器发出噪声报警。如图3.3.6所示。

图3.3.6报警部分电路 图3.3.7开锁模块电路图

3.3.7 开锁部分

开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在E2PROM中作为锁码指令。

开锁步骤如下:首先按下键盘上的负未尝按键,然后利用键盘上自己设定的数字键0-9输入密码,最后按下确认键。当用户输入密码后,单片机自动识别密码,如果密码不符,有三次机会,若三次都不符则报警,且红灯亮。只有当密码正确,单片机才能使继电器处于开锁状态。具体电路如图3.3.7所示。

3.3.8晶振部分

STC89C52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3.3.8所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1、C2取值范围在30pF左右。根据实

际情况,本设计中采用12MHZ作为系统的外部晶振。电容取值为30pF。电路图如

右。

4.硬件的安装与调试

4.1硬件的安装

安装电路板,先用画图软件画出密码锁的总电路图,并把线路改至最简。 然后按照电路图开始画图,由于本电路采用单片机控制,先焊接单片机STC89C52,单片机STC89C52有四十个引脚,考虑到下载以后的使用,先焊接基座,然后再放上单片机,对于芯片AT24C02也采取同样的方法。其他元件可直接焊在电路板上,按照布局图或PCB图把元件逐一焊接在电路板上,对于二极管或电解电容等有极性器件要用仪器判断好后在焊接,对于弹片开关也要仔细观察引脚图后再焊接。元件全部焊接完成后,在仔细检查几遍,确保器件连接正确后,方可通电测试。

4.2硬件的调试

电路连接好之后用万用表对电路进行测试,一个模块一个模块的进行测试,

在确保一个电路模块没有错误之后才进行下一个模块的测试,这样逐个检测。仔细对查电路图确保没有出现短路,断路,焊错等情况。如果出现错误,立即修改 ,如果解决不了则请教同学或是老师,不断进行调试,直到最后电路基本上没有硬件错误。

5.软件程序设计

本程序软件设计由主程序、初始化程序、LED显示程序、键盘扫描程序、AT24C04读写程序和延时程序组成。

软件原理图如下:

图5.1软件原理图

6.性能测试与数据分析

6.1程序调试

先调试软件程序,大致步骤如下: 第一步,调试LCD显示程序。

第二步,调试键盘,通过在键盘上输入数字在LCD上显示。

第三部,调试AT24C02,通过送一个数字来验证AT24C02是否能读数据和存储

数据。

第四部,调试整个程序。根据所要实现的功能将各个模块连在一起。

6.2性能测试

程序中定义的4*4键盘的功能如下:

表6.1键盘功能

写好程序后将程序下载到单片机中,程序见附录,进行各项功能测试。步骤如下:

第一步,复位后LED上显示enter-code,在键盘上输入初始密码,若按错数

字则按下取消键,输完后按下确认,LED上显示success,同时绿灯亮,代表开锁。若密码输错,有三次机会,一旦出现第三次输错,此时蜂鸣器响,并且红灯亮。

第二步,修改密码,先按下修改密码的按键,LED上显示enter-new-code, 此

时输入想要修改的密码,并按下确认,LED上显示enter-again,再次输入修改的密码,并按下确认,密码修改成功。若头两次输入的修改密码不一样,LED显示enter-again,第三次输入修改密码,若三次都对上就会回到主页面,显示enter-code,表示修改密码不成功,密码仍为修改之前的密码。

第三步,关锁,在开锁之后,即LED上显示success之后,按下关锁,将锁住

密码,需重新输入密码才能打开。

经过测试,密码锁的各项功能正常,均符合要求。

6.3数据分析

此密码锁有0—9十个输入按键,所以可以设置十位密码。当设置的密码为十位时,小偷破译的概率为1/10,所以这个密码锁是很难被破译的。

10

7.结束语

通过这次的课程设计,让我掌握了很多新知识,同时锻炼了自己的动手能力和查阅资料的能力。尤其是在实际中解决排查问题的能力。

1.在设计中,我学到了如何使用C语言对单片机进行编程,熟悉了使用KEIL软件,并且加深了对单片机的编程技巧。

2.这次的设计使我对模电,数电的知识加深了了解,尤其是在对电路进行调试的时候,出现了很多这些方面的问题,通过请教同学,查阅资料,将问题解决了。

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,随着科学技术的发展,单片机已经成为当今计算机应用中空前活跃的领域,再生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。

8.参考文献

(1) 郭天祥.51单片机C语言教程.电子工业出版社,2009年 (2) 胡汉.单片机原理及接口技术.清华大学出版社,1996年 (3) 李广弟.单片机基础.北京航空航天大学出版社,2007年

(4) 郭海英.基于单片机的电子安全密码锁的设计.现代电子技术.2005年,第

三期:57-58

(5) 李钟实.实用电子报警器精选百例.科学技术文献出版社,2002年 (6) 肖洪兵.跟我学单片机.北京航天航空大学出版社,2002年

附录一

元件清单

附表1.元件清单

附录二

程序清单

#include #include #define U8 unsigned char #define U16 unsigned int sbit SDA=P2^0; sbit SCL=P2^1; sbit RS=P1^4; sbit E=P1^5; sbit LOCK=P1^2; sbit RED=P1^0; sbit BUZZ=P2^3; U8 mima1[7];

//用于暂存密码

U8 mima[7]={1,2,3,4,5,6}; U8 iicmi[7];

U8 code err[]="error";

U8 code again[]="enter-again"; U8 code succ[]="success";

U8 code warning[]="no-chance-left"; U8 code set[]="enter-new-code"; U8 code enter[]="enter-code"; void delay(U8 ms) {

U16 i; while(ms--) {

for(i = 0; i

_nop_();_nop_();_nop_();_nop_(); } } }

U8 key_scan(void) {

U8 sccode,recode; P3=0xf0;

if((P3&0xf0)!=0xf0) {

delay(5);

if((P3&0xf0)!=0xf0) {

sccode=0xfe;

while((sccode&0x10)!=0) {

P3=sccode;

if((P3&0xf0)!=0xf0) {

recode=(P3&0xf0)|0x0f;

P3=0xf0;

while((P3&0xf0)!=0xf0);

return((~sccode)+(~recode)); } else

sccode=(sccode

}

} return(0); }

void start() //开始信号{

SDA=1;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_(); SDA=0;

_nop_(); _nop_(); _nop_(); }

void stop() //停止 { SDA=0;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); }

void stop_read(void) { SDA=1;

_nop_();_nop_();_nop_(); SCL=1;

不应答,停止读数据

//

_nop_();_nop_();_nop_(); SCL=0; }

void iic_ack(void) //应答,继续传输数据 { SDA=0;

_nop_();_nop_(); SCL=1;

_nop_();_nop_();_nop_(); SCL=0; }

void respons() //检查应答 { U8 ii; SCL=1;

_nop_(); _nop_(); _nop_(); while((SDA==1)&&(ii

_nop_(); _nop_(); _nop_(); }

void write_byte(U8 date) {

U8 ii,temp; temp=date;

for(ii=0;ii

temp=temp

//写一字节

SCL=0;

_nop_(); _nop_(); _nop_(); } SCL=0;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); }

U8 read_byte() {

U8 ii,k=0; SCL=0;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); for(ii=0;ii

return k; }

SDA=CY;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_();

//读一字节

SCL=1;

_nop_(); _nop_(); _nop_(); k=(k

_nop_(); _nop_(); _nop_();

void write_eep(U8 add,U8 date[]) {

U8 ii=0; start();

write_byte(0xa0); respons(); write_byte(add); respons(); while(ii!=6) {

write_byte(date[ii]); respons(); ii++; } stop(); }

void write_24c02(U8 add,U8 dat) { start();

write_byte (0xa0); respons(); write_byte(add); respons(); write_byte(dat); respons(); stop(); }

void read_eep(U8 add) //{

//从指定地方开始连续写

//在指定地方写一字节

从指定地方开始连续读

U8 ii=0; start();

write_byte(0xa0); respons(); write_byte(add); respons(); start();

write_byte(0xa1); respons(); while(ii!=6) {

iicmi[ii]=read_byte(); iic_ack(); ii++; }

stop_read(); stop(); }

U8 read_24c02(U8 address) { U8 date; start();

write_byte(0xa0); respons();

write_byte(address); respons(); start();

write_byte(0xa1); respons();

//从指定地方读一字节

date=read_byte(); stop_read(); stop(); return date; }

void lcd_wcmd(U8 cmd) {

RS = 0; E = 0;

_nop_();_nop_(); P0 = cmd;

_nop_();_nop_();_nop_();_nop_(); E = 1;

_nop_();_nop_();_nop_();_nop_(); E = 0; }

void lcd_pos(U8 pos) {

lcd_wcmd(pos | 0x80); }

void lcd_wdat(U8 dat) {

RS = 1; E = 0; P0 = dat;

_nop_();_nop_();_nop_();_nop_(); E = 1;

_nop_();_nop_();_nop_();_nop_();

E = 0; }

void lcd_init(void) {

lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); delay(5); lcd_wcmd(0x06); delay(5); lcd_wcmd(0x01); delay(5); }

void lcd_display(U8 pos,U8 dis[]) //0x40开始 {

U8 il; lcd_pos(pos); delay(1); il=0;

while(dis[il]!='\0') {

lcd_wdat(dis[il]); il++;

delay(1);

}

第一行从0x00开始,第二行从

}

void lcd_disas(U8 pos,U8 zi) {

lcd_pos(pos); delay(1); lcd_wdat(zi); }

//初始密码是123456

//在指定地方显示字符

void main(void) {

U8 i,key=0xff,success=0,error=0,chance=3; P3=0xf0;P2=0xf7; lcd_init();

if(read_24c02(0x00)==0xaa) {

read_eep(10); for(i=0;i

//初始检测

//1111 0111

mima[i]=iicmi[i]; } else {

write_24c02(0x00,0xaa); write_eep(10,mima); }

lcd_display(0x03,enter); i=0; while(1) {

switch(key_scan()) {

case 72: break;

case 40: break;

case 20: key=13;break; case 18: key=12;break; case 17: key=11;break; case 24: key=10;break; case 33: key=0;break; case 34: key=1;break; case 36: key=2;break; case 65: key=3;break; case 66: key=4;break; case 68: key=5;break; case 129: key=6;break; case 130: key=7;break; case 132: key=8;break; case

136: key=9;break;

case 0: delay(200);break; }

if(key

{

lcd_disas(0x40+i,'*'); if(mima[i]!=key) error=1;

i++;

}

记录输入的键值

//

{

lcd_disas(0x40+i,'*'); mima1[i]=key;

i++;

}

if(key

lcd_disas(0x40+i,'*'); if(mima1[i]!=key) error=1;

i++;

//修改密码,输入第二次

}

if(key==10) {

success=0;

LOCK=1; lcd_wcmd(0x01);

//关锁

delay(5);

lcd_display(0x03,enter);

}

if((key==11&&i6)) //判断密码对错 {

chance--;

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,err); delay(750);

lcd_display(0x03,again);

error=0;

}

if(key==11&&i==6) if(error) {

chance--; } else {

success++; lcd_wcmd(0x01); delay(5);

lcd_display(0x05,succ); i=0; key=0; chance=3; }

//取消

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,err); delay(750);

lcd_display(0x03,again); i=0; error=0;

//判断密码对错

if(key==12)

{

i=0;

error=0;

delay(5);

lcd_display(0x03,enter);

}

if(key==13&&success==1) //修改密码

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,set);

i=0;

}

if(success==2&&i==0)

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x03,again);

i=0;

}

if(success==3)

{

write_eep(10,mima1); for(i=0;i

mima[i]=mima1[i];

success=0; LOCK=1; i=0;

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,succ);

//第一次输入完成//修改密码完成

武汉理工大学《数字电子技术基础》课程设计说明书

delay(750); lcd_display(0x03,enter); } if(success==1) //开锁

LOCK=0;

if(chance==0&&success==0)

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,warning);

BUZZ=1;

RED=0;

while(1);

}

if(chance==0&&success!=0) //

超过限制

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,warning);

success=0;

delay(750);

lcd_wcmd(0x01);

delay(5);

lcd_display(0x03,enter);

chance=3;

}

key=0xff;

}

26 //错误次数超过限制 修改密码次数

总电路图 附录三 武汉理工大学《数字电子技术基础》课程设计说明书 附录图1.总电路图

27

武汉理工大学《数字电子技术基础》课程设计说明书

指导教师签字:

年 月 日

28

学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 数字式密码电子锁电路设计

初始条件:已知条件

本课程设计,要求用集成电路和其它器件实现数字式密

码电子锁电路功能。工作电源Vcc为5V。电路组成框图。如

图1所示:实际锁体一般由电磁线圈、锁栓、弹簧和锁柜构成。

当线圈有电流时,产生磁力,吸动锁栓,即可开锁。反之则不

开锁。本次课程设计实际装配时,锁体用LED代替。 图1 数字式电子锁电路原理框图 要求完成的主要任务:

(1)设计任务

根据已知条件,完成数字式密码电子锁电路的设计、装配与调试。

(2)设计要求

① 其密码为方4位(或8位)二进制代码(代码自设定)。

② 开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开。当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁。(报警动作为响1分钟,停10秒)

③ 选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。(选做:用EWB软件完成仿真)

④ 安装调试设计电路,并按规定格式写出课程设计报告书。

时间安排:

1、 2011 年 7 月 3 日分班集中,作课设具体实施计划与课程设计报告格式的要求说明,分发工具与器材。

2、 2011 年 7 月 4 日 至 2011 年 7 月 8 日完成设计制作与调试。

3、 2011 年 7 月 8 日完成课程设计报告与答辩。

指导教师签名: 年 月 日

系主任(或责任教师)签名: 年 月 日

目录

摘 要 ............................................. 错误!未定义书签。 Abstract ........................................... 错误!未定义书签。

1.课设题目 ......................................... 错误!未定义书签。

2.设计的技术指标和参数要求 ......................... 错误!未定义书签。

2.1设计的技术指标 .............................. 错误!未定义书签。

2.2设计的参数要求 .............................. 错误!未定义书签。

3.设计原理和单元模块 ............................... 错误!未定义书签。

3.1方法设计与论证 .............................. 错误!未定义书签。

3.2设计原理 .................................... 错误!未定义书签。

3.3单元模块 .................................... 错误!未定义书签。

3.3.1 单片机STC89C52简介 ................... 错误!未定义书签。

3.3.2 键盘输入模块 ......................... 错误!未定义书签。

3.3.3 显示模块 .............................. 错误!未定义书签。

3.3.4 密码存储模块 .......................... 错误!未定义书签。

3.3.5复位部分 .............................. 错误!未定义书签。

3.3.6报警部分 .............................. 错误!未定义书签。

3.3.7 开锁部分 ............................. 错误!未定义书签。

3.3.8晶振部分 .............................. 错误!未定义书签。

4.硬件的安装与调试 ................................. 错误!未定义书签。

4.1硬件的安装 .................................. 错误!未定义书签。

4.2硬件的调试 .................................. 错误!未定义书签。

5.软件程序设计 .................................... 错误!未定义书签。

6.性能测试与数据分析 ............................... 错误!未定义书签。

6.1程序调试 .................................... 错误!未定义书签。

6.2性能测试 .................................... 错误!未定义书签。

6.3数据分析 .................................... 错误!未定义书签。

7.结束语 ........................................... 错误!未定义书签。

8.参考文献 ......................................... 错误!未定义书签。

附录一 ............................................. 错误!未定义书签。 附录二 ............................................. 错误!未定义书签。 附录三 ............................................. 错误!未定义书签。 本科生课程设计成绩评定表 ........................... 错误!未定义书签。

摘 要

本设计的电子密码锁利用52单片机控制电路,实现对锁的电子控制,并且有各种附加电路保证电路能够安工作,能够自己设置密码,有极高的安全系数。 本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超次报警、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外。本系统成本低廉,功能实用。

关键词: 电子密码锁;STC89C52单片机;AT24C02;

Abstract

This design of electronic trick lock using single-chip microcomputer control

circuit, realize 52 to lock of electronic control, and have all sorts of additional circuit to Ann work, that can set password, have the extremely high safety coefficient. The system is composed of single-chip microcomputer system, the matrix keyboard, and LED display and alarm systems. The system can complete the lock, super times alarm; modify user password basic trick lock function. In addition to the basic

function of combination lock. This system the cost is low and the function is practical.

Keywords: electronic trick lock; STC89C52 single-chip microcomputer; AT24C02

1.课设题目

本次课设所选的题目是《数字式电子密码锁电路设计》,主要用单片机控制电路。

2.设计的技术指标和参数要求

2.1设计的技术指标

本设计采用STC89C52单片机为主控芯片,结合外围电路,通过软件

程序组成电子密码锁系统,能够实现:

1.开锁指令为串行输入码,当开锁密码与存储密码一致时,锁被打开;

2.当开锁密码与存储密码不一致时,可重复进行,若连续三次未将锁打开,电路则报警并实现自锁;

3.选择电路方案,完成对确定方案电路的设计。计算电路元件参数与元件

选择、并画出总体电路原理图,阐述基本原理。

4. 安装调试设计电路。

2.2设计的参数要求

1.其密码为方4位(或8位)二进制代码(代码自设定);

2.报警动作为响1分钟,停10秒。

3.设计原理和单元模块

3.1方法设计与论证

方案一:采用数字电路控制

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不采用。

方案二:采用以单片机为核心的控制方案

选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。

因此综合考虑,本系统采用方案二。

3.2设计原理

设计用STC89C52作为本次设计的核心原件,利用单片机灵活性的编程设计和其控制的准确性,实现基本的密码控制功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接1602液晶显示器用于输出显示。

本设计主要由单片机、矩阵式键盘、液晶显示器和密码存储器等部分构成。 其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机 的矩阵键盘输入密码,然后经过单片机对用户输入的密码与自己保存的密码进行核对,从而判断是否正确,然后控制引脚的高低电平转到液晶,显示密码正确还是密码错误以及蜂鸣器是否报警。

本系统一共由两部分组成,硬件和软件部分。其中硬件部分由键盘输入部分、复位部分、晶振部分、报警部分组成,软件部分对应的主要由主程序、初始化程序、液晶显示程序、键扫程序,键功能程序、密码设置程序、延时程序等组成。其原理框图如图

各模块功能如下:

1.键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码锁输入功

能。2.显示模块:用于完成对系统状态显示及操作提示功能。3.复位电路:

完成系统的复位。4.报警电路:用于完成输错密码时候的警报功能。5.密码存储模块:用于完成掉电存储功能,使修改的密码断电后仍能保存。6.开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提示。

3.3单元模块

3.3.1 单片机STC89C52简介

考虑到设计功能的需要,控制器的功能用于外部键盘信号的接受和识别、液晶的显示与密码的辨认相关的信息,我们选择了STC89C52系列的单片机,具有反应速度快,工作效率特高的特点。

STC89C52是种低功耗、高性能CMOS8的微处理器,具有8K字节系统可编程Flash存储器。使用STC公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。另外,STC89C52可降至0Hz静态逻辑操作,支持2种 软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

其引脚图如图3.3.1。

图3.3.1 STC89C52引脚图

3.3.2 键盘输入模块

本设计中使用的4×4键盘,不但能完成密码的输入还能作特别功能键使用。键盘的每个按键功能在程序设计中设置。

工作原理,首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。

判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,

则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

它与单片机的连接如图3.3.2所示

图3.3.2.键盘模块电路图

3.3.3 显示模块

(1)LED1602的接口信号说明:

1602型LCD的接口信号说明如表3-1所示。

表3.1 1602型LCD的接口信号说明

(2)显示模块

显示部分由液晶显示器LCD1602取代普通的数码管完成。

开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。

当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“success”,单片机其中P1.2引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,相当于绿灯亮。

如果密码不正确,LCD显示屏会显示“error”,P1.2输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。

电路图如图3.3.3所示。

图3.3.3显示模块电路图 图3.3.4密码存储模块电路图

3.3.4 密码存储模块

图3.3.3所示AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在STC89C52试验开发板上它们都接地,第7脚和第8脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I²C总线串行传送,在STC89C52试验开发板上和单片机的P2.0连接。第6脚SCL为串行时钟输入线,在AT89S52试验开发板上和单片机的P2.1连接。SDA和SCL都需要和正电源间各接一个10K的电阻上拉。第6脚接P2.1。AT24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写 入多达8个字节的数据。存储模块的电路图如图3.3.4。

3.3.5复位部分

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C3上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C3足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R4放电。当电容C3放

电结束后,RST端的电位由R3与R4分压比决定。由于R3

图 3.5.5 复位模块电路图

3.3.6报警部分

报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.3引脚为高电平,三极管T3导通蜂鸣器发出噪声报警。如图3.3.6所示。

图3.3.6报警部分电路 图3.3.7开锁模块电路图

3.3.7 开锁部分

开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在E2PROM中作为锁码指令。

开锁步骤如下:首先按下键盘上的负未尝按键,然后利用键盘上自己设定的数字键0-9输入密码,最后按下确认键。当用户输入密码后,单片机自动识别密码,如果密码不符,有三次机会,若三次都不符则报警,且红灯亮。只有当密码正确,单片机才能使继电器处于开锁状态。具体电路如图3.3.7所示。

3.3.8晶振部分

STC89C52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3.3.8所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1、C2取值范围在30pF左右。根据实

际情况,本设计中采用12MHZ作为系统的外部晶振。电容取值为30pF。电路图如

右。

4.硬件的安装与调试

4.1硬件的安装

安装电路板,先用画图软件画出密码锁的总电路图,并把线路改至最简。 然后按照电路图开始画图,由于本电路采用单片机控制,先焊接单片机STC89C52,单片机STC89C52有四十个引脚,考虑到下载以后的使用,先焊接基座,然后再放上单片机,对于芯片AT24C02也采取同样的方法。其他元件可直接焊在电路板上,按照布局图或PCB图把元件逐一焊接在电路板上,对于二极管或电解电容等有极性器件要用仪器判断好后在焊接,对于弹片开关也要仔细观察引脚图后再焊接。元件全部焊接完成后,在仔细检查几遍,确保器件连接正确后,方可通电测试。

4.2硬件的调试

电路连接好之后用万用表对电路进行测试,一个模块一个模块的进行测试,

在确保一个电路模块没有错误之后才进行下一个模块的测试,这样逐个检测。仔细对查电路图确保没有出现短路,断路,焊错等情况。如果出现错误,立即修改 ,如果解决不了则请教同学或是老师,不断进行调试,直到最后电路基本上没有硬件错误。

5.软件程序设计

本程序软件设计由主程序、初始化程序、LED显示程序、键盘扫描程序、AT24C04读写程序和延时程序组成。

软件原理图如下:

图5.1软件原理图

6.性能测试与数据分析

6.1程序调试

先调试软件程序,大致步骤如下: 第一步,调试LCD显示程序。

第二步,调试键盘,通过在键盘上输入数字在LCD上显示。

第三部,调试AT24C02,通过送一个数字来验证AT24C02是否能读数据和存储

数据。

第四部,调试整个程序。根据所要实现的功能将各个模块连在一起。

6.2性能测试

程序中定义的4*4键盘的功能如下:

表6.1键盘功能

写好程序后将程序下载到单片机中,程序见附录,进行各项功能测试。步骤如下:

第一步,复位后LED上显示enter-code,在键盘上输入初始密码,若按错数

字则按下取消键,输完后按下确认,LED上显示success,同时绿灯亮,代表开锁。若密码输错,有三次机会,一旦出现第三次输错,此时蜂鸣器响,并且红灯亮。

第二步,修改密码,先按下修改密码的按键,LED上显示enter-new-code, 此

时输入想要修改的密码,并按下确认,LED上显示enter-again,再次输入修改的密码,并按下确认,密码修改成功。若头两次输入的修改密码不一样,LED显示enter-again,第三次输入修改密码,若三次都对上就会回到主页面,显示enter-code,表示修改密码不成功,密码仍为修改之前的密码。

第三步,关锁,在开锁之后,即LED上显示success之后,按下关锁,将锁住

密码,需重新输入密码才能打开。

经过测试,密码锁的各项功能正常,均符合要求。

6.3数据分析

此密码锁有0—9十个输入按键,所以可以设置十位密码。当设置的密码为十位时,小偷破译的概率为1/10,所以这个密码锁是很难被破译的。

10

7.结束语

通过这次的课程设计,让我掌握了很多新知识,同时锻炼了自己的动手能力和查阅资料的能力。尤其是在实际中解决排查问题的能力。

1.在设计中,我学到了如何使用C语言对单片机进行编程,熟悉了使用KEIL软件,并且加深了对单片机的编程技巧。

2.这次的设计使我对模电,数电的知识加深了了解,尤其是在对电路进行调试的时候,出现了很多这些方面的问题,通过请教同学,查阅资料,将问题解决了。

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,随着科学技术的发展,单片机已经成为当今计算机应用中空前活跃的领域,再生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。

8.参考文献

(1) 郭天祥.51单片机C语言教程.电子工业出版社,2009年 (2) 胡汉.单片机原理及接口技术.清华大学出版社,1996年 (3) 李广弟.单片机基础.北京航空航天大学出版社,2007年

(4) 郭海英.基于单片机的电子安全密码锁的设计.现代电子技术.2005年,第

三期:57-58

(5) 李钟实.实用电子报警器精选百例.科学技术文献出版社,2002年 (6) 肖洪兵.跟我学单片机.北京航天航空大学出版社,2002年

附录一

元件清单

附表1.元件清单

附录二

程序清单

#include #include #define U8 unsigned char #define U16 unsigned int sbit SDA=P2^0; sbit SCL=P2^1; sbit RS=P1^4; sbit E=P1^5; sbit LOCK=P1^2; sbit RED=P1^0; sbit BUZZ=P2^3; U8 mima1[7];

//用于暂存密码

U8 mima[7]={1,2,3,4,5,6}; U8 iicmi[7];

U8 code err[]="error";

U8 code again[]="enter-again"; U8 code succ[]="success";

U8 code warning[]="no-chance-left"; U8 code set[]="enter-new-code"; U8 code enter[]="enter-code"; void delay(U8 ms) {

U16 i; while(ms--) {

for(i = 0; i

_nop_();_nop_();_nop_();_nop_(); } } }

U8 key_scan(void) {

U8 sccode,recode; P3=0xf0;

if((P3&0xf0)!=0xf0) {

delay(5);

if((P3&0xf0)!=0xf0) {

sccode=0xfe;

while((sccode&0x10)!=0) {

P3=sccode;

if((P3&0xf0)!=0xf0) {

recode=(P3&0xf0)|0x0f;

P3=0xf0;

while((P3&0xf0)!=0xf0);

return((~sccode)+(~recode)); } else

sccode=(sccode

}

} return(0); }

void start() //开始信号{

SDA=1;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_(); SDA=0;

_nop_(); _nop_(); _nop_(); }

void stop() //停止 { SDA=0;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); }

void stop_read(void) { SDA=1;

_nop_();_nop_();_nop_(); SCL=1;

不应答,停止读数据

//

_nop_();_nop_();_nop_(); SCL=0; }

void iic_ack(void) //应答,继续传输数据 { SDA=0;

_nop_();_nop_(); SCL=1;

_nop_();_nop_();_nop_(); SCL=0; }

void respons() //检查应答 { U8 ii; SCL=1;

_nop_(); _nop_(); _nop_(); while((SDA==1)&&(ii

_nop_(); _nop_(); _nop_(); }

void write_byte(U8 date) {

U8 ii,temp; temp=date;

for(ii=0;ii

temp=temp

//写一字节

SCL=0;

_nop_(); _nop_(); _nop_(); } SCL=0;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); }

U8 read_byte() {

U8 ii,k=0; SCL=0;

_nop_(); _nop_(); _nop_(); SDA=1;

_nop_(); _nop_(); _nop_(); for(ii=0;ii

return k; }

SDA=CY;

_nop_(); _nop_(); _nop_(); SCL=1;

_nop_(); _nop_(); _nop_();

//读一字节

SCL=1;

_nop_(); _nop_(); _nop_(); k=(k

_nop_(); _nop_(); _nop_();

void write_eep(U8 add,U8 date[]) {

U8 ii=0; start();

write_byte(0xa0); respons(); write_byte(add); respons(); while(ii!=6) {

write_byte(date[ii]); respons(); ii++; } stop(); }

void write_24c02(U8 add,U8 dat) { start();

write_byte (0xa0); respons(); write_byte(add); respons(); write_byte(dat); respons(); stop(); }

void read_eep(U8 add) //{

//从指定地方开始连续写

//在指定地方写一字节

从指定地方开始连续读

U8 ii=0; start();

write_byte(0xa0); respons(); write_byte(add); respons(); start();

write_byte(0xa1); respons(); while(ii!=6) {

iicmi[ii]=read_byte(); iic_ack(); ii++; }

stop_read(); stop(); }

U8 read_24c02(U8 address) { U8 date; start();

write_byte(0xa0); respons();

write_byte(address); respons(); start();

write_byte(0xa1); respons();

//从指定地方读一字节

date=read_byte(); stop_read(); stop(); return date; }

void lcd_wcmd(U8 cmd) {

RS = 0; E = 0;

_nop_();_nop_(); P0 = cmd;

_nop_();_nop_();_nop_();_nop_(); E = 1;

_nop_();_nop_();_nop_();_nop_(); E = 0; }

void lcd_pos(U8 pos) {

lcd_wcmd(pos | 0x80); }

void lcd_wdat(U8 dat) {

RS = 1; E = 0; P0 = dat;

_nop_();_nop_();_nop_();_nop_(); E = 1;

_nop_();_nop_();_nop_();_nop_();

E = 0; }

void lcd_init(void) {

lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); delay(5); lcd_wcmd(0x06); delay(5); lcd_wcmd(0x01); delay(5); }

void lcd_display(U8 pos,U8 dis[]) //0x40开始 {

U8 il; lcd_pos(pos); delay(1); il=0;

while(dis[il]!='\0') {

lcd_wdat(dis[il]); il++;

delay(1);

}

第一行从0x00开始,第二行从

}

void lcd_disas(U8 pos,U8 zi) {

lcd_pos(pos); delay(1); lcd_wdat(zi); }

//初始密码是123456

//在指定地方显示字符

void main(void) {

U8 i,key=0xff,success=0,error=0,chance=3; P3=0xf0;P2=0xf7; lcd_init();

if(read_24c02(0x00)==0xaa) {

read_eep(10); for(i=0;i

//初始检测

//1111 0111

mima[i]=iicmi[i]; } else {

write_24c02(0x00,0xaa); write_eep(10,mima); }

lcd_display(0x03,enter); i=0; while(1) {

switch(key_scan()) {

case 72: break;

case 40: break;

case 20: key=13;break; case 18: key=12;break; case 17: key=11;break; case 24: key=10;break; case 33: key=0;break; case 34: key=1;break; case 36: key=2;break; case 65: key=3;break; case 66: key=4;break; case 68: key=5;break; case 129: key=6;break; case 130: key=7;break; case 132: key=8;break; case

136: key=9;break;

case 0: delay(200);break; }

if(key

{

lcd_disas(0x40+i,'*'); if(mima[i]!=key) error=1;

i++;

}

记录输入的键值

//

{

lcd_disas(0x40+i,'*'); mima1[i]=key;

i++;

}

if(key

lcd_disas(0x40+i,'*'); if(mima1[i]!=key) error=1;

i++;

//修改密码,输入第二次

}

if(key==10) {

success=0;

LOCK=1; lcd_wcmd(0x01);

//关锁

delay(5);

lcd_display(0x03,enter);

}

if((key==11&&i6)) //判断密码对错 {

chance--;

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,err); delay(750);

lcd_display(0x03,again);

error=0;

}

if(key==11&&i==6) if(error) {

chance--; } else {

success++; lcd_wcmd(0x01); delay(5);

lcd_display(0x05,succ); i=0; key=0; chance=3; }

//取消

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,err); delay(750);

lcd_display(0x03,again); i=0; error=0;

//判断密码对错

if(key==12)

{

i=0;

error=0;

delay(5);

lcd_display(0x03,enter);

}

if(key==13&&success==1) //修改密码

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,set);

i=0;

}

if(success==2&&i==0)

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x03,again);

i=0;

}

if(success==3)

{

write_eep(10,mima1); for(i=0;i

mima[i]=mima1[i];

success=0; LOCK=1; i=0;

lcd_wcmd(0x01); delay(5);

lcd_display(0x05,succ);

//第一次输入完成//修改密码完成

武汉理工大学《数字电子技术基础》课程设计说明书

delay(750); lcd_display(0x03,enter); } if(success==1) //开锁

LOCK=0;

if(chance==0&&success==0)

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,warning);

BUZZ=1;

RED=0;

while(1);

}

if(chance==0&&success!=0) //

超过限制

{

lcd_wcmd(0x01);

delay(5);

lcd_display(0x01,warning);

success=0;

delay(750);

lcd_wcmd(0x01);

delay(5);

lcd_display(0x03,enter);

chance=3;

}

key=0xff;

}

26 //错误次数超过限制 修改密码次数

总电路图 附录三 武汉理工大学《数字电子技术基础》课程设计说明书 附录图1.总电路图

27

武汉理工大学《数字电子技术基础》课程设计说明书

指导教师签字:

年 月 日

28


相关内容

  • 谁能破解[终极密码]
  • 这是一款或许你在任何一家桌游吧都会见到的游戏,它另一个更为人熟知的名字是<达芬奇密码>,是在黑与白之间隐藏的终极密码.你能否读出深藏在黑白之中的秘密,找到神秘的关键数字?在对手破译你的秘密之前,解开他的密码吧! 这个游戏怎么赢: 如果你是唯一还有立牌的玩家则获得胜利. 这款游戏本身其实和 ...

  • 健康的终极密码
  • (续昨)提升身体免疫系统还有个与人类基因密码有关的终极秘密:不感到孤独便健康,但不孤独与风花雪月的生活无关.这不是一个有宗教色彩的断言,而是通过科研得到的终极秘密.书名<Positivity and Love>(正思维与爱),作者是心理学教授Barbara Fredrickson(Dir ...

  • 高二主题班会设计方案:插上梦想的翅膀
  • 活动目的: 引导学生确立自己的大学梦想,明确大学目标,对自己有正确的定位,思考为实现自己的大学梦想,应该怎样做。 提高认识,培养学生自信心,增强学习的主动性和积极性,团结奋进。 激发学习斗志,培养学生竞争意识,能居安思危。 活动形式: 采访调查、游戏互动、诗文朗诵、全体合唱 活动流程: 《插上梦想的 ...

  • 网站智能管理系统
  • 网站智能管理系统 1.1系统概述 智能管理是一种把后端系统中的数据(工作流系统.业务系统.OA 系统等) ,外部系 统中的数据(活动.邮件等),采编发的内容数据灵活展示于前端网络平台的工具.能够协助组织和个人,借助信息技术,实现内容的创建.储存.分享.应用.更新,并在企业.个人.组织.业务.战略等诸 ...

  • 寻找校园最美声音活动策划孙树园
  • 此次活动最终解释权归属于华语音乐排行榜 活动策划:孙树园 策 划 书 主办方:华语音乐排行榜 承办方:XXX大学学生会 目录 1.活动前言--------------------- 2.活动主题--------------------- 3.活动时间--------------------- 4.人 ...

  • 网吧常用工具大全2010
  • 网吧常用工具大全2010 [作者:admin 来源:天下网吧txwb.com 时间:2010-4-17 [我来说两句 大 中 小] 巧切难为无米之炊,网管无工具也中徒然,天下网吧为天下网吧的网管和技术员及电脑公司维护人员,网吧维护维护人员特意准备了2010年的网吧工具的大具.内容包括以下: 网吧工具 ...

  • 如何破解电脑开机密码
  • 如何破解电脑开机密码 由于网络安全的知识普及,很多人为了电脑数据的安全或者出于保护自己隐私的原因,对自己的电脑设置的开机密码,但是有时时间久了,连我们自己都忘了,面对这种情况,我们似乎有点束手无策,当你急着用电脑的时候,又或者急于打开电脑中的文档时候,却被卡在输入密码这一栏上,那时候真心的后悔当初为 ...

  • 校团委大学生素质拓展中心认证资料管理办法
  • 校团委大学生素质拓展中心 湖南工业大学素质拓展认证资料管理办法试行 一.目的及意义 湖南工业大学素质拓展中心自2011年成立以来,不断进行体 系的变革和完善.针对两年来终极认证出现的各种问题及各院级素拓所提出的意见及建议.经大学生素质拓展中心指导老师及主席团的商议,本着"减少纸质办公的工作 ...

  • 张艺倩[阅读改变孩子的人生]
  • 阅读改变孩子的人生 阅读最大的意义和价值就是改变,通过阅读能够改变孩子的一切. 首先,孩子们的精神发育史就是阅读史.我们很少认真地思考,每一个个体.每一个人的精神成长是怎么成长起来的,这个历程是怎样的.躯体的成长更多是受遗传的支配.遗传基因的影响,个体的精神成长却不完全相同,因为人的精神不像身体那样 ...