电子密码锁论文

浙江科技学院自动化及电气工程学院

开放实验报告书

设计题目: 电子密码锁的设计与制作 实验者姓 所在学院: 所在班级: 电子信息 实验时间: 2010年

指导老师:

电子密码锁的设计与制作

The Design of Electronic Password Anti-theft Lock

Wangchongxiao

(Zhejiang University of Science and Technology)

Abstract:With the development of the people's living standard, how to achieve the family security is becoming

important in particular. The traditional mechanical lock is unable to meet the people's needs because of its simple structure, low security. Nowadays, with the continuous development of the science and technology,Electronic password anti-theft lock plays a more important role as the security guards.

The main paper is about the design electronic code lock based on the MCU. The system is composed with AT89C51,and the peripheral circuits such as LCD display, alarming circuit. It can accomplish the following function: open the lock with a correctly password, give an alarm with the mistake password, change the password if the host want.

The lock has some features like a reasonable design methods, simple to work, low cost and security. It also has some promotion value.

Keywords: Electronic code lock,Alarm,LED display

目录

第一章 引言 ................................................................................................... 错误!未定义书签。 第二章 方案设计 ............................................................................................................................. 1

2.1方案选择 ........................................................................................ 错误!未定义书签。

2.1.3基于AT89C51单片机的电子密码锁设计 ............................................................ 1 2.1.3采用 CMOS实现的数字电子密码锁设计 ............................................................. 1 2.1.3采用μnSPTM凌阳单片机的电子密码锁设计 .................................................... 2 2.2 方案确定 ........................................................................................................................... 2 2.3 方案论证 ........................................................................................................................... 3 第三章 基于AT89C51单片机的电子密码锁的总体设计 ............................................................. 3

3.1键盘输入模块 .................................................................................................................... 3 3.2显示模块 ............................................................................................................................ 3

3.3报警模块 ............................................................................................................................ 3 3.4开锁模块 ............................................................................................................................ 3 第四章 程序软件模块设计 ............................................................................................................. 4

4.1程序流程图 ........................................................................................................................ 4 4.2主函数流程图 .................................................................................................................... 5 4.3子程序举例 ........................................................................................................................ 6

4.3.1 键盘检测函数 ....................................................................................................... 6 4.3.2密码判断函数 ........................................................................................................ 7 4.3.3密码重置函数与新密码写入函数 ........................................................................ 8

第五章 整体电路测试 ................................................................................................................... 10 第六章 总结 ................................................................................................................................... 10 附录一 总电路图 ........................................................................................................................... 10 附录二 程序代码 ........................................................................................................................... 11 参考文献......................................................................................................................................... 17

第二章 方案设计

2.1.3基于AT89C51单片机的电子密码锁设计

选择AT89C51 作为主控制器。AT89C51来控制电路的工作电路,通过AT89C51编辑程序来实现控制硬件电路的工作方式。实现由键盘输入密码后,AT89C51扫描输入键,将输入的密码和设定好的密码进行比较,当相同时即输出开锁信号,即电路实现开锁,而当不相等时则计数错误次数,且显示重新输入状态,三次输入错误则发出报警,可重置密码,重置密码时,先要输入原先的密码,输入正确后方可输入新密码。其工作的原理方案如下图所示:

图2-1 基于AT89C2051单片机的电子密码锁设计方案

2.1.3采用

CMOS实现的数字电子密码锁设计

数字密码锁具有操作简便、保密性的特点, 而采用 集成电路组成数字CMOS锁控制装置, 更兼有电源范围宽、功耗低、工作可靠的优点, 可广泛用于家庭及保险等场合, 是目前比较理想的保安锁具。

数字密码锁的实际控制对象是电磁锁的电磁线圈, 可规定线圈断电为落锁或加锁, 线圈通电为开锁。电磁线圈一般为交流线圈( 特殊情况下也可采用直流线圈 ), 可用数字密码电路驱动中间继电器来控制其电流通断。其原理方框图如下所示:[6]

图2-2利用CMOS设计的电子密码锁原理方框图

2.1.3采用μnSPTM凌阳单片机的电子密码锁设计

μnSPTM单片机就是基于SOC的新型的数/模混合的系统级芯片。在一个芯片内集成了单片机数据采集或控制系统所需的模拟和数字外设及其它功能部件。凌阳公司推出的单片机有8位、16位共50多种不同的IC芯片型号及其产品,以适用于不同的应用领域,用户可根据需要选择相应的单片机系统。凌阳单片机顺应了单片机技术的发展趋势,其系统芯片具有集成度高、数/模混合、功能全、低功耗、低电压和易于开发等特点。另外,凌阳单片机还增加了适合于DSP的某些特殊指令;有些系列的单片机还嵌入了LCD控制/驱动和双音多频发生器功能。这些都进一步扩大了单片机的应用范围。

凌阳公司为μnSPTM单片机的应用开发提供了较为完善的开发支持工具:硬件工具和软件工具。硬件工具即为μnSPTMCPU系统仿真板,用于程序的二进制代码的下载调试;软件工具按其操作系统分为DOS环境下的分立工具和Windows环境下操作的集成工具。开发系统提供了高性能的C语言编译器 Gcc,它采用符合ANSI标准的C语言编程,并提供了C语言的编程函数库(CLib)。开发系统中还提供了凌阳公司推出的按照凌阳音频编码方法进行语音压缩算法的SCAMLib算法库,用于开发和实现芯片的语音功能,从而使得凌阳单片机在数字信号及语音识别应用领域中显示出更大的优越性。 2.2 方案确定

我们采用第一种方案,基于AT89C51单片机控制的电子密码锁设计,因为我们在校学习的单片机是MCS—51单片机,而凌阳单片机的指令和MCS—51有较大的区别,对于这次设计完全可以使用MCS—51单片机来实现,而不需要花大量的时间在学习一种新型单片机上面,所以不采用凌阳单片机来完成。基于CMOS的数字电子密码锁设计主要是因为它的硬件电路

比较复杂,其不需要用到程序,单纯的应用多种逻辑电子器件来实现,即可以做到总体设计简单,但是由于其整体使用的是硬件电路,所以总的电路原理比较庞大,而且根据以往的实验经验,我们知道因为硬件电路的可靠性不高,很容易就受到搬拆等过程而使信用降低。MCS—51是一个可以比较容易实现的方案选择,所以在这里我选了和MCS—51的功能和指令可以兼容的AT89C51 2.3 方案论证

基于AT89C51单片机的电子密码锁设计是由4*3键盘输入键值,然后通过AT89C51单片机对读入的键值进行处理,通过报警喇叭以及LED灯和数码显示管作出相应的响应。本次设计实现的功能如下:

1.当键盘有输入密码时,电路则将输入密码和原始密码进行比较,如果密码正确则LED亮3秒,错误则发出2秒的喇叭报警,然后自动刷新,实现允许重新输入功能。 2.如果连续输入三次及三次以上的错误密码,发出15秒的报警并锁定键盘1分钟 3.系统设有八位原始密码,可以重置密码,重置密码长度任意,但不超过12位

第三章 基于AT89C51单片机的电子密码锁的总体设计

该电子密码锁系统包括:单片机程序控制、数字输入键盘、喇叭、数码显示管和LED灯。原理图如下图所示:

图3-1 电子密码锁的原理图

3.1键盘输入模块

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4×3键盘,前十个键代表数字0—9,最后两个按键分别表示确定键和密码重置键。 3.2显示模块

本次设计的显示模块由一个数码显示管组成,当按下数字键时,数码显示管显示数字,当按下确定键和密码重置键时,不显示任何数值。

3.3报警模块

报警模块由一个喇叭组成,当输入密码错误时,报警器发出2秒报警同时锁定键盘,当连续输入三次及三级以上错误密码时,报警器发出15秒报警,并且锁定键盘1分钟。

3.4开锁模块

开锁模块由一个LED灯进行模拟,密码正确时,LED灯亮三秒。

第四章 程序软件模块设计

4.1程序流程图

Y

N

Y Y Y

Y

图4.1 程序流程图

4.2主函数流程图 主函数流程图如下:

Y

N

图4.2主函数流程图

4.3子程序举例

4.3.1 键盘检测函数

void detect(void) //按键检测,直到检测到有按键按下,记录按键值,循环结束 {

unsigned char F,L,i,j,k,temp;

F=FALSE; //F为是否检测到按键的标志位 while(!F) {

P2=0xff; L=0x01;

for(i=0;i

P2=(~L); L=L

temp=temp&0x70;

if (temp!=0x70) //判断是否有按键输入 {

for(j=50;j>0;j--)

for(k=200;k>0;k--); //延迟,去抖动

temp=P2;

temp=temp&0x70;

if (temp!=0x70) //再次判断 {

switch(temp) {

case 0x60:

a=i; //确定键值 break;

case 0x50: a=i+4; break;

case 0x30: a=8+i; break; }

F=TRUE; //标志位,表示检测到有按键输入 P0=table[a]; //显示数值

temp=P2&0x70; //等待释放按键 while(temp!=0x70)

temp=P2&0x70;

break; //跳出循环 } } } } }

4.3.2密码判断函数

unchar judge(void) //输入值与密码匹配则返回TRUE,否者返回FALSE {

unsigned char i,F; F=FALSE;

if(n==length) {

for(i=0;i

if(secret[i]!=key[i]) {

F=FALSE; break; }

else if(i==(length-1)) F=TRUE; } }

return F;

clear(); //将输入的键值清除 n=0; }

4.3.3密码重置函数与新密码写入函数

void reset(void) //密码重置函数,重置前先输入正确的重置前密码才能进行重置,重置密码的位数不超过12位 {

unsigned char F,T;

n=0;

F=FALSE; //重置是否结束的标志位 T=FALSE; while(!F) {

detect();

if(a==11) //检测到按键为密码重置键 ;

else if(a==10) //检测到为确定键 {

T=judge(); //判断原始密码是否正确 if(T) //允许重新设定密码 {

error_num=0; //输入正确,将连续错误次数改为0 write_newpassword();

F=TRUE; //重置成功,结束重置 } else {

F=TRUE; //重置失败,结束重置

error_num++; //输入错误,连续错误次数加1

if(error_num

speaker=0; //报警3秒 delay(2); speaker=1; }

else //连续输入错误3次以上报警15秒 {

speaker=0; //报警15秒 delay(15); speaker=1;

delay(45); //锁定键盘1分钟 } } } else

readkey(); }

clear();//重置结束后清除读入的键值 n=0; }

void write_newpassword(void) //新密码写入函数 {

unsigned char F,i; //F为密码设定完成标志位 n=0; F=FALSE;

length=0; //lenght为密码长度 clear();

while(!F) {

detect();

if(a==11) //检测到按键为密码重置键,无效 ;

else if(a==10) //检测到确定键 {

for(i=0;i

secret[i]=key[i]; //写入新密码 F=TRUE; } else {

readkey(); //读入键值

length++; //length为密码长度,加一 } } }

第五章 整体电路测试

经测试,设计的电子密码锁符合预先设定的指标,功能如下:

1.当输入正确密码时LED亮3秒,错误则发出2秒的喇叭报警,可以重新输入。 2.如果连续输入三次及三次以上的错误密码,发出15秒的报警并锁定键盘1分钟 3.系统设有八位原始密码,可以重置密码,重置密码长度任意,但不能超过12位,超过之后的输入无效。

第六章 总结

在本次设计,基本达到了原先设定的指标。但是还有很多缺点,列如当断电之后,密码锁将会丢失掉重置密码,还有开锁用了一个LED灯模拟,这个也不尽人意。对于掉电后会丢失密码,我们可以在外部采用一个外部存储器,实现掉电存储。

在设计过程中,我也遇到了很多的困难,特别是在程序设计方面,一些小错误的查找占用了我很大一部分时间,比如在子程序中定义局部变量时,没有写在开头,差错查了很久。当然我从中学到了很多的东西,慢工出细活,过程是很重要的,只有耐心细心努力地去把握过程,才能得到可喜的结果。

附录一 总电路图

附录二 程序代码

#include #include

#define unchar unsigned char; #define FALSE 0; #define TRUE 1; sbit speaker=P1^0; sbit LED=P1^1; unchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00,0x00,0x00,0x00,0x00};

unchar key[12]; //键值 unchar secret[12]={0,1,2,3,4,5,6,7}; //密码

unchar time_10,time_1; //time_10为10ms计数次数,time_1为1s计数次数

unchar n,a,T,length,error_num; //n为当前读入的是第n位,a为计入按

键值,length的长度(不超过12位),error_num为密码连续输错的次数,超过3次报警10秒 void detect(void); //按键检测函数 unchar judge(void); //判断输入正确与否 void clear(void); //将输入键值清零 void reset(void); //重置密码函数 void readkey(void); //读输入键值 void write_newpassword(void); //重新写入密码

void delay(char n); //延时单位为1s的函数

void detect(void) //按键检测,直到检测到有按键按下,记录按键值,循环结束 {

unsigned char F,L,i,j,k,temp;

F=FALSE; //F为是否检测到按键的标志位 while(!F) {

P2=0xff; L=0x01;

for(i=0;i

P2=(~L); L=L

temp=temp&0x70;

if (temp!=0x70) //判断是否有按键输入 {

for(j=50;j>0;j--)

for(k=200;k>0;k--); //延迟,去抖动

temp=P2;

temp=temp&0x70;

if (temp!=0x70) //再次判断 {

switch(temp) {

case 0x60:

a=i; // break;

case 0x50: a=i+4; break;

case 0x30: a=8+i; break; }

F=TRUE; //输入

P0=table[a]; // temp=P2&0x70; // while(temp!=0x70)

temp=P2&0x70;

break; // } } } } }

unchar judge(void) //{

unsigned char i,F; F=FALSE;

if(n==length) {

for(i=0;i

if(secret[i]!=key[i])

确定键值 标志位,表示检测到有按键显示数值 等待释放按键 跳出循环 输入值与密码匹配则返回TRUE

{

F=FALSE; break; }

else if(i==(length-1)) F=TRUE; } }

return F;

clear(); //将输入的键值清除 n=0; }

void clear(void) {

unsigned char i; for(i=0;i

void reset(void) //密码重置函数,重置前先输入正确的重置前密码才能进行重置,重置密码的位数不超过12位 {

unsigned char F,T;

n=0;

F=FALSE; //重置是否结束的标志位 T=FALSE; while(!F) {

detect();

if(a==11) //检测到按键为密码重置键 ;

else if(a==10) //检测到为确定键 {

T=judge(); //判断原始密码是否正确 if(T) //允许重新设定密码 {

error_num=0; //输入正确,将连续错误次数改为0 write_newpassword();

F=TRUE; //重置成功,结束重置 } else

{

F=TRUE; //重置失败,结束重置

error_num++; //输入错误,连续错误次数加1

if(error_num

speaker=0; //报警3秒 delay(2); speaker=1; }

else //连续输入错误3次以上报警15秒 {

speaker=0; //报警15秒 delay(15); speaker=1;

delay(45); //锁定键盘1分钟 } } } else

readkey(); }

clear();//重置结束后清除读入的键值 n=0; }

void readkey(void) {

if(n

key[n]=a; n++; } }

void write_newpassword(void) {

unsigned char F,i; //F为密码设定完成标志位 n=0; F=FALSE; length=0; clear();

while(!F) {

detect();

if(a==11) //检测到按键为密码重置键,无效 ; else if(a==10) //检测到确定键 {

for(i=0;i

secret[i]=key[i]; //写入新密码 F=TRUE; } else {

readkey(); length++; } } }

void delay(char n) {

TR0=1; time_10=0; time_1=0;

while(time_1

main() {

P0=0x00;

TMOD=0x01; //计时器初始化 TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1; EA=1; n=0;

error_num=0; T=FALSE;

length=8; //初始密码为01234567,8位

while(1) {

detect();

if(a==11) //检测到按键为密码重置键 reset();

else if(a==10)//确定键 {

T=judge(); if(T) {

error_num=0; LED=0; delay(3); LED=1; } else

{ error_num++; if(error_num

speaker=0; // delay(2); speaker=1; }

else // {

speaker=0; // delay(15); speaker=1;

delay(45); // } }

clear(); } else

readkey(); } }

void time() interrupt 1 using 1 {

TH0=(65536-10000)/256; TL0=(65536-10000)%256;

time_10++;

if(time_10>=100) {

time_10=0;

报警3秒 连续输入错误3次以上报警15秒报警15秒 锁定键盘1分钟

time_1++; } }

参考文献

[1] 叶启明.单片机制作的新型安全密码锁[J].家庭电子.2000,第六期:24-27 [2] 肖洪兵.跟我学用单片机[M].北京:北京航空航天大学出版社,2002:88-92

浙江科技学院自动化及电气工程学院

开放实验报告书

设计题目: 电子密码锁的设计与制作 实验者姓 所在学院: 所在班级: 电子信息 实验时间: 2010年

指导老师:

电子密码锁的设计与制作

The Design of Electronic Password Anti-theft Lock

Wangchongxiao

(Zhejiang University of Science and Technology)

Abstract:With the development of the people's living standard, how to achieve the family security is becoming

important in particular. The traditional mechanical lock is unable to meet the people's needs because of its simple structure, low security. Nowadays, with the continuous development of the science and technology,Electronic password anti-theft lock plays a more important role as the security guards.

The main paper is about the design electronic code lock based on the MCU. The system is composed with AT89C51,and the peripheral circuits such as LCD display, alarming circuit. It can accomplish the following function: open the lock with a correctly password, give an alarm with the mistake password, change the password if the host want.

The lock has some features like a reasonable design methods, simple to work, low cost and security. It also has some promotion value.

Keywords: Electronic code lock,Alarm,LED display

目录

第一章 引言 ................................................................................................... 错误!未定义书签。 第二章 方案设计 ............................................................................................................................. 1

2.1方案选择 ........................................................................................ 错误!未定义书签。

2.1.3基于AT89C51单片机的电子密码锁设计 ............................................................ 1 2.1.3采用 CMOS实现的数字电子密码锁设计 ............................................................. 1 2.1.3采用μnSPTM凌阳单片机的电子密码锁设计 .................................................... 2 2.2 方案确定 ........................................................................................................................... 2 2.3 方案论证 ........................................................................................................................... 3 第三章 基于AT89C51单片机的电子密码锁的总体设计 ............................................................. 3

3.1键盘输入模块 .................................................................................................................... 3 3.2显示模块 ............................................................................................................................ 3

3.3报警模块 ............................................................................................................................ 3 3.4开锁模块 ............................................................................................................................ 3 第四章 程序软件模块设计 ............................................................................................................. 4

4.1程序流程图 ........................................................................................................................ 4 4.2主函数流程图 .................................................................................................................... 5 4.3子程序举例 ........................................................................................................................ 6

4.3.1 键盘检测函数 ....................................................................................................... 6 4.3.2密码判断函数 ........................................................................................................ 7 4.3.3密码重置函数与新密码写入函数 ........................................................................ 8

第五章 整体电路测试 ................................................................................................................... 10 第六章 总结 ................................................................................................................................... 10 附录一 总电路图 ........................................................................................................................... 10 附录二 程序代码 ........................................................................................................................... 11 参考文献......................................................................................................................................... 17

第二章 方案设计

2.1.3基于AT89C51单片机的电子密码锁设计

选择AT89C51 作为主控制器。AT89C51来控制电路的工作电路,通过AT89C51编辑程序来实现控制硬件电路的工作方式。实现由键盘输入密码后,AT89C51扫描输入键,将输入的密码和设定好的密码进行比较,当相同时即输出开锁信号,即电路实现开锁,而当不相等时则计数错误次数,且显示重新输入状态,三次输入错误则发出报警,可重置密码,重置密码时,先要输入原先的密码,输入正确后方可输入新密码。其工作的原理方案如下图所示:

图2-1 基于AT89C2051单片机的电子密码锁设计方案

2.1.3采用

CMOS实现的数字电子密码锁设计

数字密码锁具有操作简便、保密性的特点, 而采用 集成电路组成数字CMOS锁控制装置, 更兼有电源范围宽、功耗低、工作可靠的优点, 可广泛用于家庭及保险等场合, 是目前比较理想的保安锁具。

数字密码锁的实际控制对象是电磁锁的电磁线圈, 可规定线圈断电为落锁或加锁, 线圈通电为开锁。电磁线圈一般为交流线圈( 特殊情况下也可采用直流线圈 ), 可用数字密码电路驱动中间继电器来控制其电流通断。其原理方框图如下所示:[6]

图2-2利用CMOS设计的电子密码锁原理方框图

2.1.3采用μnSPTM凌阳单片机的电子密码锁设计

μnSPTM单片机就是基于SOC的新型的数/模混合的系统级芯片。在一个芯片内集成了单片机数据采集或控制系统所需的模拟和数字外设及其它功能部件。凌阳公司推出的单片机有8位、16位共50多种不同的IC芯片型号及其产品,以适用于不同的应用领域,用户可根据需要选择相应的单片机系统。凌阳单片机顺应了单片机技术的发展趋势,其系统芯片具有集成度高、数/模混合、功能全、低功耗、低电压和易于开发等特点。另外,凌阳单片机还增加了适合于DSP的某些特殊指令;有些系列的单片机还嵌入了LCD控制/驱动和双音多频发生器功能。这些都进一步扩大了单片机的应用范围。

凌阳公司为μnSPTM单片机的应用开发提供了较为完善的开发支持工具:硬件工具和软件工具。硬件工具即为μnSPTMCPU系统仿真板,用于程序的二进制代码的下载调试;软件工具按其操作系统分为DOS环境下的分立工具和Windows环境下操作的集成工具。开发系统提供了高性能的C语言编译器 Gcc,它采用符合ANSI标准的C语言编程,并提供了C语言的编程函数库(CLib)。开发系统中还提供了凌阳公司推出的按照凌阳音频编码方法进行语音压缩算法的SCAMLib算法库,用于开发和实现芯片的语音功能,从而使得凌阳单片机在数字信号及语音识别应用领域中显示出更大的优越性。 2.2 方案确定

我们采用第一种方案,基于AT89C51单片机控制的电子密码锁设计,因为我们在校学习的单片机是MCS—51单片机,而凌阳单片机的指令和MCS—51有较大的区别,对于这次设计完全可以使用MCS—51单片机来实现,而不需要花大量的时间在学习一种新型单片机上面,所以不采用凌阳单片机来完成。基于CMOS的数字电子密码锁设计主要是因为它的硬件电路

比较复杂,其不需要用到程序,单纯的应用多种逻辑电子器件来实现,即可以做到总体设计简单,但是由于其整体使用的是硬件电路,所以总的电路原理比较庞大,而且根据以往的实验经验,我们知道因为硬件电路的可靠性不高,很容易就受到搬拆等过程而使信用降低。MCS—51是一个可以比较容易实现的方案选择,所以在这里我选了和MCS—51的功能和指令可以兼容的AT89C51 2.3 方案论证

基于AT89C51单片机的电子密码锁设计是由4*3键盘输入键值,然后通过AT89C51单片机对读入的键值进行处理,通过报警喇叭以及LED灯和数码显示管作出相应的响应。本次设计实现的功能如下:

1.当键盘有输入密码时,电路则将输入密码和原始密码进行比较,如果密码正确则LED亮3秒,错误则发出2秒的喇叭报警,然后自动刷新,实现允许重新输入功能。 2.如果连续输入三次及三次以上的错误密码,发出15秒的报警并锁定键盘1分钟 3.系统设有八位原始密码,可以重置密码,重置密码长度任意,但不超过12位

第三章 基于AT89C51单片机的电子密码锁的总体设计

该电子密码锁系统包括:单片机程序控制、数字输入键盘、喇叭、数码显示管和LED灯。原理图如下图所示:

图3-1 电子密码锁的原理图

3.1键盘输入模块

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4×3键盘,前十个键代表数字0—9,最后两个按键分别表示确定键和密码重置键。 3.2显示模块

本次设计的显示模块由一个数码显示管组成,当按下数字键时,数码显示管显示数字,当按下确定键和密码重置键时,不显示任何数值。

3.3报警模块

报警模块由一个喇叭组成,当输入密码错误时,报警器发出2秒报警同时锁定键盘,当连续输入三次及三级以上错误密码时,报警器发出15秒报警,并且锁定键盘1分钟。

3.4开锁模块

开锁模块由一个LED灯进行模拟,密码正确时,LED灯亮三秒。

第四章 程序软件模块设计

4.1程序流程图

Y

N

Y Y Y

Y

图4.1 程序流程图

4.2主函数流程图 主函数流程图如下:

Y

N

图4.2主函数流程图

4.3子程序举例

4.3.1 键盘检测函数

void detect(void) //按键检测,直到检测到有按键按下,记录按键值,循环结束 {

unsigned char F,L,i,j,k,temp;

F=FALSE; //F为是否检测到按键的标志位 while(!F) {

P2=0xff; L=0x01;

for(i=0;i

P2=(~L); L=L

temp=temp&0x70;

if (temp!=0x70) //判断是否有按键输入 {

for(j=50;j>0;j--)

for(k=200;k>0;k--); //延迟,去抖动

temp=P2;

temp=temp&0x70;

if (temp!=0x70) //再次判断 {

switch(temp) {

case 0x60:

a=i; //确定键值 break;

case 0x50: a=i+4; break;

case 0x30: a=8+i; break; }

F=TRUE; //标志位,表示检测到有按键输入 P0=table[a]; //显示数值

temp=P2&0x70; //等待释放按键 while(temp!=0x70)

temp=P2&0x70;

break; //跳出循环 } } } } }

4.3.2密码判断函数

unchar judge(void) //输入值与密码匹配则返回TRUE,否者返回FALSE {

unsigned char i,F; F=FALSE;

if(n==length) {

for(i=0;i

if(secret[i]!=key[i]) {

F=FALSE; break; }

else if(i==(length-1)) F=TRUE; } }

return F;

clear(); //将输入的键值清除 n=0; }

4.3.3密码重置函数与新密码写入函数

void reset(void) //密码重置函数,重置前先输入正确的重置前密码才能进行重置,重置密码的位数不超过12位 {

unsigned char F,T;

n=0;

F=FALSE; //重置是否结束的标志位 T=FALSE; while(!F) {

detect();

if(a==11) //检测到按键为密码重置键 ;

else if(a==10) //检测到为确定键 {

T=judge(); //判断原始密码是否正确 if(T) //允许重新设定密码 {

error_num=0; //输入正确,将连续错误次数改为0 write_newpassword();

F=TRUE; //重置成功,结束重置 } else {

F=TRUE; //重置失败,结束重置

error_num++; //输入错误,连续错误次数加1

if(error_num

speaker=0; //报警3秒 delay(2); speaker=1; }

else //连续输入错误3次以上报警15秒 {

speaker=0; //报警15秒 delay(15); speaker=1;

delay(45); //锁定键盘1分钟 } } } else

readkey(); }

clear();//重置结束后清除读入的键值 n=0; }

void write_newpassword(void) //新密码写入函数 {

unsigned char F,i; //F为密码设定完成标志位 n=0; F=FALSE;

length=0; //lenght为密码长度 clear();

while(!F) {

detect();

if(a==11) //检测到按键为密码重置键,无效 ;

else if(a==10) //检测到确定键 {

for(i=0;i

secret[i]=key[i]; //写入新密码 F=TRUE; } else {

readkey(); //读入键值

length++; //length为密码长度,加一 } } }

第五章 整体电路测试

经测试,设计的电子密码锁符合预先设定的指标,功能如下:

1.当输入正确密码时LED亮3秒,错误则发出2秒的喇叭报警,可以重新输入。 2.如果连续输入三次及三次以上的错误密码,发出15秒的报警并锁定键盘1分钟 3.系统设有八位原始密码,可以重置密码,重置密码长度任意,但不能超过12位,超过之后的输入无效。

第六章 总结

在本次设计,基本达到了原先设定的指标。但是还有很多缺点,列如当断电之后,密码锁将会丢失掉重置密码,还有开锁用了一个LED灯模拟,这个也不尽人意。对于掉电后会丢失密码,我们可以在外部采用一个外部存储器,实现掉电存储。

在设计过程中,我也遇到了很多的困难,特别是在程序设计方面,一些小错误的查找占用了我很大一部分时间,比如在子程序中定义局部变量时,没有写在开头,差错查了很久。当然我从中学到了很多的东西,慢工出细活,过程是很重要的,只有耐心细心努力地去把握过程,才能得到可喜的结果。

附录一 总电路图

附录二 程序代码

#include #include

#define unchar unsigned char; #define FALSE 0; #define TRUE 1; sbit speaker=P1^0; sbit LED=P1^1; unchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00,0x00,0x00,0x00,0x00};

unchar key[12]; //键值 unchar secret[12]={0,1,2,3,4,5,6,7}; //密码

unchar time_10,time_1; //time_10为10ms计数次数,time_1为1s计数次数

unchar n,a,T,length,error_num; //n为当前读入的是第n位,a为计入按

键值,length的长度(不超过12位),error_num为密码连续输错的次数,超过3次报警10秒 void detect(void); //按键检测函数 unchar judge(void); //判断输入正确与否 void clear(void); //将输入键值清零 void reset(void); //重置密码函数 void readkey(void); //读输入键值 void write_newpassword(void); //重新写入密码

void delay(char n); //延时单位为1s的函数

void detect(void) //按键检测,直到检测到有按键按下,记录按键值,循环结束 {

unsigned char F,L,i,j,k,temp;

F=FALSE; //F为是否检测到按键的标志位 while(!F) {

P2=0xff; L=0x01;

for(i=0;i

P2=(~L); L=L

temp=temp&0x70;

if (temp!=0x70) //判断是否有按键输入 {

for(j=50;j>0;j--)

for(k=200;k>0;k--); //延迟,去抖动

temp=P2;

temp=temp&0x70;

if (temp!=0x70) //再次判断 {

switch(temp) {

case 0x60:

a=i; // break;

case 0x50: a=i+4; break;

case 0x30: a=8+i; break; }

F=TRUE; //输入

P0=table[a]; // temp=P2&0x70; // while(temp!=0x70)

temp=P2&0x70;

break; // } } } } }

unchar judge(void) //{

unsigned char i,F; F=FALSE;

if(n==length) {

for(i=0;i

if(secret[i]!=key[i])

确定键值 标志位,表示检测到有按键显示数值 等待释放按键 跳出循环 输入值与密码匹配则返回TRUE

{

F=FALSE; break; }

else if(i==(length-1)) F=TRUE; } }

return F;

clear(); //将输入的键值清除 n=0; }

void clear(void) {

unsigned char i; for(i=0;i

void reset(void) //密码重置函数,重置前先输入正确的重置前密码才能进行重置,重置密码的位数不超过12位 {

unsigned char F,T;

n=0;

F=FALSE; //重置是否结束的标志位 T=FALSE; while(!F) {

detect();

if(a==11) //检测到按键为密码重置键 ;

else if(a==10) //检测到为确定键 {

T=judge(); //判断原始密码是否正确 if(T) //允许重新设定密码 {

error_num=0; //输入正确,将连续错误次数改为0 write_newpassword();

F=TRUE; //重置成功,结束重置 } else

{

F=TRUE; //重置失败,结束重置

error_num++; //输入错误,连续错误次数加1

if(error_num

speaker=0; //报警3秒 delay(2); speaker=1; }

else //连续输入错误3次以上报警15秒 {

speaker=0; //报警15秒 delay(15); speaker=1;

delay(45); //锁定键盘1分钟 } } } else

readkey(); }

clear();//重置结束后清除读入的键值 n=0; }

void readkey(void) {

if(n

key[n]=a; n++; } }

void write_newpassword(void) {

unsigned char F,i; //F为密码设定完成标志位 n=0; F=FALSE; length=0; clear();

while(!F) {

detect();

if(a==11) //检测到按键为密码重置键,无效 ; else if(a==10) //检测到确定键 {

for(i=0;i

secret[i]=key[i]; //写入新密码 F=TRUE; } else {

readkey(); length++; } } }

void delay(char n) {

TR0=1; time_10=0; time_1=0;

while(time_1

main() {

P0=0x00;

TMOD=0x01; //计时器初始化 TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1; EA=1; n=0;

error_num=0; T=FALSE;

length=8; //初始密码为01234567,8位

while(1) {

detect();

if(a==11) //检测到按键为密码重置键 reset();

else if(a==10)//确定键 {

T=judge(); if(T) {

error_num=0; LED=0; delay(3); LED=1; } else

{ error_num++; if(error_num

speaker=0; // delay(2); speaker=1; }

else // {

speaker=0; // delay(15); speaker=1;

delay(45); // } }

clear(); } else

readkey(); } }

void time() interrupt 1 using 1 {

TH0=(65536-10000)/256; TL0=(65536-10000)%256;

time_10++;

if(time_10>=100) {

time_10=0;

报警3秒 连续输入错误3次以上报警15秒报警15秒 锁定键盘1分钟

time_1++; } }

参考文献

[1] 叶启明.单片机制作的新型安全密码锁[J].家庭电子.2000,第六期:24-27 [2] 肖洪兵.跟我学用单片机[M].北京:北京航空航天大学出版社,2002:88-92


相关内容

  • 杭州电子科技大学
  • 杭州电子科技大学 优秀毕业设计(论文)摘要规范 一.目的与意义 毕业设计(论文)是培养具有创新能力人才的一个重要环节,其质量是检验学校教育教学质量的一个重要指标.<优秀毕业设计(论文)摘要选编>是总结毕业设计(论文)工作的一项重要工作,为了规范此项工作,参照<杭州电子科技大学毕业设 ...

  • ★毕业论文设计范文(格式+附件)
  • 益阳职业技术学院 高 职 毕 业 论 文 ( 设 计) 题目: 因特网电子商务中加密技术的研究 姓 班 名: 级: 张三 2009122 机电与电子工程系 模具设计与制造 李四 2012 年 05 月 所属系部: 专 业: 指导教师: 完成日期: 1 目 录 摘要 ················· ...

  • 单片机电子密码锁论文
  • 目 录 单片机电子密码锁的设计 ........................................................................................................ 1 第1章 绪论 .................... ...

  • 贵州财经大学本科毕业论文参考格式(2015版)(2)
  • 本 科 毕 业 论 文 (设 计) 我国储蓄函数的多元线性回归 分析我国储蓄函数的多元线 作 者 专 业 指导教师 学 院 孙彦龙 金融学 张目 副教授 金融学院 二〇一〇年五月 诚信声明 本人郑重声明:本人所呈交的毕业论文,是在导师 指导下独立研究取得的成果.毕业论文中凡引用他人已经发表的成果.数 ...

  • 电气自动化设计论文题目大全
  • 机电一体化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数 ...

  • 电气自动化毕业设计论文题目
  • 电 气 自 动 化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机 ...

  • PLC毕业设计论文题目
  • P L C 第1-100个PLC毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MS ...

  • 国内外信息安全研究现状及其发展趋势
  • 国内外信息安全研究现状及其发展趋势 中国科学院软件所研究员信息安全国家重点实验室主任冯登国 随着信息技术的发展与应用.信息安全的内涵在不断地延伸,从最初的信息保密性发展到信息的完整性.可用性.可控性和不可否认性,进而又发展为"攻(攻击).防(防范).测(检测).控(控制).管(管理).评( ...

  • 自动化毕业设计论文题目
  • 自 动 化 毕 业 设 计 论 文 题 目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC12 ...

  • 单片机毕业设计题目
  • 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC1211的温度智能温度传感器 9. 机器视觉系统 ...