微机课程设计-基于单片机的电子密码锁设计.docx

上传人:wj 文档编号:656386 上传时间:2023-04-29 格式:DOCX 页数:50 大小:1.52MB
下载 相关 举报
微机课程设计-基于单片机的电子密码锁设计.docx_第1页
第1页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第2页
第2页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第3页
第3页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第4页
第4页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第5页
第5页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第6页
第6页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第7页
第7页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第8页
第8页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第9页
第9页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第10页
第10页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第11页
第11页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第12页
第12页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第13页
第13页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第14页
第14页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第15页
第15页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第16页
第16页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第17页
第17页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第18页
第18页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第19页
第19页 / 共50页
微机课程设计-基于单片机的电子密码锁设计.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机课程设计-基于单片机的电子密码锁设计.docx

《微机课程设计-基于单片机的电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《微机课程设计-基于单片机的电子密码锁设计.docx(50页珍藏版)》请在冰点文库上搜索。

微机课程设计-基于单片机的电子密码锁设计.docx

摘要

自从人类开始制造锁以来长期所使用的锁都是机械锁,通俗的讲就是弹子芯锁。

而传统的弹子芯锁,由于其本身锁芯密齿的有限加之开锁工具钥匙的容易复制性,使得其安全性大大降低,随着人们生活质量的提高,如何实现安全有效的防盗这一问题受到越来越多人的关注。

传统的机械锁由于安全性能太差,被撬的事件屡见不鲜,相比之下,电子密码锁因其保密性强,使用灵活性好,安全系数高,受到了广大用户的欢迎。

电子密码锁作为一种新型的锁,不仅拥有海量的密齿,通常从10000到10000000不等,还省去了传统机械锁的钥匙,使用者只要记得其密码,便可以开启,从而大大提高了防盗功能。

关键词:

单片机、系统搭建、C语言、微机原理

目录

摘要 2

第1章 课题背景 1

1.1 课程设计目的 1

1.2 设计方案 2

1.2.1 选题内容 2

1.2.2 选题要求 2

1.2.3 方案选择 2

第2章 硬件电路设计 4

2.1 核心芯片 4

2.2 显示电路 6

2.3 矩阵键盘 7

2.4 24C02芯片 8

2.5 报警电路 10

2.6 开锁电路 10

2.7 最小系统 11

第3章 程序部分 12

3.1 程序流程图 12

3.1.1 密码正误判断流程图 12

3.1.2 密码重置流程图 12

3.1.3 报警流程图 13

3.2 程序清单 13

3.2.1 主函数 13

3.2.2 LCD1602模块 18

3.2.3 24C02模块 21

3.2.4 矩阵键盘模块 26

3.2.5 报警程序 28

3.2.6 密码判断程序 30

3.2.7 密码重置程序 34

3.2.8 取消按键程序 37

3.2.9 中断程序 38

第4章 调试及运行结果 41

4.1 调试过程 41

4.2 运行结果 42

第5章 结论与展望 44

5.1 结论 44

5.2 展望 44

第1章课题背景

1.1课程设计目的

在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。

若使用传统的机械式钥匙开锁,人们常需要携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。

随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。

为了满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。

电子密码锁是一种通过密码输入来控制电路或是芯片工作(访问控制系统),从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

电子锁在安全技术防范领域,具有防盗报警功能的电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。

本设计采用以51单片机为主控芯片,结合外围电路连接,组成电子密码锁。

用户可以通过键盘输入正确的密码才能将锁打开,同时结合智能报警系统,当用户多次输入密码错误后,将会自动报警,提高了锁的安全性。

考虑到人们有可能会忘记密码,因此本设计留有一个恢复初始设置的功能,只要输入该特定的密码即可实现对密码的初始化设置。

1.2设计方案

1.2.1选题内容

密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示00字样。

当输入密码错误时,发出错误警告声音,同时显示FF字样。

当六次误码输入的条件下,产生报警电平报警。

还可以实现对密码的修改,修改成功后,蜂鸣器发出确认音。

1.2.2选题要求

选用合适的芯片和适当的存储器及接口芯片完成相应的功能。

用LED显示器显示电子锁的当前状态。

画出详细的硬件连接图。

给出程序设计思路、画出软件流程图。

给出所有程序清单并加上必要注释。

完成设计说明书(列出参考文献,所用器件型号)。

1.2.3方案选择

根据题目的要求,需要考虑以下几方面的内容:

键盘的输入、密码的判别、密码重置以及输出信号控制

键盘的输入:

本设计拟采用矩阵键盘作为用户的输入端,实现对密码的输入以及其他特殊功能的操作。

密码的判别:

利用用户输入的密码与系统自带的密码进行比较即可实现对于密码正确或者错误的判断。

密码重置:

考虑到用户的需求,密码重置包括两个部分。

一种情况是用户忘记密码,需要重新设置密码。

对于这种情况,我们事先设计好一个固定的密码作为密保,一旦用户输入该密码,系统自动把密码重置为初始密码。

另一种情况是用户主动去修改密码。

对于这种情况,只要用户输入原密码后,按下重置按钮即可设置新密码。

输出信号控制:

输出信号只有两种。

一种为正确的情况,此时控制电子锁电路工作,电子锁自动打开。

另一种为错误报警的情况,一旦用户输入错误密码次数达到3次,则密码锁自动进入强制封锁状态,用户将无法再输入密码,同时报警器也会发出警报。

1.2.3.1程序设计思路

程序分为主程序和中断服务程序两个主要部分。

主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。

在循环中,首先判断有无按键按下,若有按键则判断是否数字键还是功能键,根据按键的情况执行相应的功能。

然后根据密码是否正确的判断情况,执行相应的操作。

循环中最后将需要显示的内容通过动态扫描在数码管上显示。

中断服务程序只要实现三个状态的计时,待机时需要计时5秒,密码正确需要计时3s,密码3次输入错误需要计时10秒。

当前处于何种计时,由主程序根据密码判断结果来决定。

1.2.3.2硬件设计思路

本设计用到的硬件部分包括:

89C52单片机、矩阵键盘、LCD1602液晶显示屏、报警器、指示电路。

总体设计框架如图1-1所示:

图1-1总体设计框架

第2章硬件电路设计

2.1核心芯片

密码锁采用AT89C52芯片作为核心芯片。

这款芯片是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

本单片机具有以下特性:

•与MCS-51兼容

•4K字节可编程FLASH存储器(寿命:

1000写/擦循环)

•全静态工作:

0Hz-24KHz

•三级程序存储器保密锁定

•128*8位内部RAM

•32条可编程I/O线

•两个16位定时器/计数器

•5个中断源

•可编程串行通道

•低功耗的闲置和掉电模式

•片内振荡器和时钟电路

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

该芯片引脚图如图2–1所示:

图2-1AT89C52引脚图

实验总电路连接,如图2-2所示:

图2-2总电路连接图

2.2显示电路

显示输出选择了LCD1602液晶显示屏作为显示设备。

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。

1602采用标准的16脚接口,其中有几个特殊的引脚,将在下面进行介绍:

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E(或EN)端为使能(enable)端,高电平

(1)时读取信息,负跳变时执行指令。

第7~14脚:

D0~D7为8位双向数据端。

可以对数据进行输入或者读出。

1602控制指令如图2-3所示:

图2-31602控制指令表

其中有几个重要的指令:

指令5:

控制光标或字符移动以及方向。

指令8:

数据指针设置指令。

控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80B的RAM。

指令码=80H+地址码(0~27H,40~67H)。

指令10:

数据写入控制。

把数据写入到1602内部寄存器CGRAM或者DDRAM中。

1602液晶显示屏与单片机接口如图2-4所示:

图2-41602液晶显示屏与单片机接口

2.3矩阵键盘

在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵形式,如下图2-5所示。

图2-5矩阵键盘

单片机的整一个8位端口可以构成4*4=16个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显。

确定矩阵式键盘上任何一个键被按下通常采用行扫描法。

对于扫描法:

首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。

将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。

矩阵键盘电路连接,如图2-6所示:

图2-6矩阵键盘电路连接图

2.424C02芯片

串行E2PROM是基于I2C-BUS的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。

其引脚图如图所示:

A0,A1,A2为硬件地址,根据引脚上的电平决定当前器件的地址。

WP为写保护引脚,当该引脚高电平时器件只能读不能写。

SCL,SDA为I2C引脚。

VCC,GND是芯片的电源和地。

以ATMEL公司的AT24C02为例,该器件在读/写操作时,要做两次寻址操作,先做设备寻址(包括读/写标志操作),得到应答后,再做片内数据寻址,在片内寻址时有两种类型,16位地址寻址和8位寻址,AT24C02属于8位寻址;16位地址寻址时,将地址分成低8位和高8位两段发送,这里主要说明8位寻址的情况。

AT24C02的设备地址格式为1,0,1,0,A2,A1,A0,R/W;其中前四位1010(下面以16进制表示即0xA0)表示设备的类型,A2A1A0表示器件地址,最低位表读写;如果A0A1A2没有被其他设备占用,则在I2C总线上可挂载这样的设备8个(因为有三个引脚每个引脚有01两种表示,所以有2^3个设备地址)。

本电路中,电路连接图如图所示:

2.5报警电路

报警电路采用一个蜂鸣器来代替。

通过单片机的一个I/O口来控制。

电路连接如图2-7所示:

图2-7报警电路

当I/O口输出低电平,Q2截断,蜂鸣器不工作;当I/O口输出高电平,Q2导通,蜂鸣器发出蜂鸣声。

2.6开锁电路

通过一个电磁继电器即可实现对开关的控制。

电路连接如图2-8所示:

图2-8开锁电路

当I/O口输出低电平,Q1截断,电磁继电器不工作,锁处于关闭状态;当I/O口输出高电平,Q1截断,电磁继电器开关打下,电路接通,自动开锁。

2.7最小系统

为了使单片机正常工作,需要搭建单片机的最小系统。

对于AT89C52来说,它的最小系统需要包括以下内容:

复位电路、晶振电路。

具体电路连接如图2-9所示:

图2-9最小系统电路连接图

第3章程序部分

3.1程序流程图

3.1.1密码正误判断流程图

3.1.2密码重置流程图

3.1.3报警流程图

3.2程序清单

3.2.1主函数

#include

#include

#defineLCM_DataP0

#defineucharunsignedchar

#defineuintunsignedint

#definew6 //定义密码位数

sbitlcd1602_rs=P3^5;

sbitlcd1602_en=P3^4;

sbitScl=P2^6; //24C02串行时钟

sbitSda=P2^7; //24C02串行数据

sbitALAM=P2^3; //报警

sbitKEY=P1^0; //开锁

sbitopen_led=P1^2; //开锁指示灯

bitoperation=0; //操作标志位

bitpass=0; //密码正确标志

bitReInputEn=0; //重置输入充许标志

bits3_keydown=0; //3秒按键标志位

bitkey_disable=0; //锁定键盘标志

unsignedcharcountt0,second; //t0中断计数器,秒计数器

voidDelay5Ms(void);

unsignedcharcodea[]={0xFE,0xFD,0xFB,0xF7}; //控盘扫描控制表

unsignedcharcodeb[]={"0123456789"};

unsignedcharcodestart_line[] ={"password:

"};

unsignedcharcodename[] ={"===CodedLock==="}; //显示名称

unsignedcharcodeCorrect[] ={"correct"}; //输入正确

unsignedcharcodeError[] ={"error"}; //输入错误

unsignedcharcodecodepass[] ={"pass"};

unsignedcharcodeLockOpen[] ={"open"}; //OPEN

unsignedcharcodeSetNew[] ={"SetNewWordEnable"};

unsignedcharcodeInput[] ={"input:

"}; //INPUT

unsignedcharcodeResetOK[] ={"ResetPasswordOK"};

unsignedcharcodeinitword[] ={"Initpassword..."};

unsignedcharcodeEr_try[] ={"error,tryagain!

"};

unsignedcharcodeagain[] ={"inputagain"};

unsignedcharInputData[6]; //输入密码暂存区

unsignedcharCurrentPassword[6]={1,3,1,4,2,0}; //当前密码值

unsignedcharTempPassword[6];

unsignedcharN=0; //密码输入位数记数

unsignedcharErrorCont; //错误次数计数

unsignedcharCorrectCont; //正确输入计数

unsignedcharReInputCont; //重新输入计数

unsignedcharcodeinitpassword[6]={0,0,0,0,0,0};

//==============================主函数===============================

voidmain(void)

{

unsignedcharKEY2,NUM;

unsignedchari,j;

P1=0xFF;

TMOD=0x11;//定义两个16位定时器

TL0=0xB0;//置初值

TH0=0x3C;

EA=1; //开总中断

ET0=1;//开定时器1中断

TR0=0; //启动定时器0

Delay400Ms(); //启动等待,等LCM讲入工作状态

lcd_init(); //LCD初始化

write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示

for(i=0;i<16;i++)

{

write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分

}

write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示

for(i=0;i<16;i++)

{

write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号

}

write_1602com(er+9); //设置光标位置

write_1602com(0x0f); //设置光标为闪烁

Delay5Ms();//延时片刻(可不要)

N=0; //初始化数据输入位数

while

(1)

{

if(key_disable==1)

Alam_KeyUnable();

else

ALAM=1; //关报警

KEY2=keynum(); //按键检测

if(KEY2!

=0)

{

if(key_disable==1)

{

second=0;

}

else

{

NUM=coding(KEY2);

{

switch(NUM)

{

case('A'):

; break;

case('B'):

; break;

case('C'):

; break;

case('D'):

ResetPassword(); break;//重新设置密码

case('*'):

Cancel(); break;//取消当前输入

case('#'):

Ensure(); break; //确认键,

default:

{

//DisplayListChar(0,1,Input);

write_1602com(er);

for(i=0;i<16;i++)

{

write_1602dat(Input[i]);

}

operation=0;

if(N<6)

//当输入的密码少于6位时,接受输入并保存,大于6位时则无效。

{

OneAlam();

//按键提示音

//DisplayOneChar(6+N,1,'*');

for(j=0;j<=N;j++)

{

write_1602com(er+6+j);

write_1602dat(b[NUM]);

Delay5Ms();

Delay5Ms();

write_1602com(er+6+j);

write_1602dat('*');

}

InputData[N]=NUM;

N++;

}

else //输入数据位数大于6后,忽略输入

{

OneAlam();

for(j=0;j<=N;j++)

{

write_1602com(er+6+j);

write_1602dat('*');

}

N=6;

break;

}

}

}

}

}

}

}

}

3.2.2LCD1602模块

//=======================================LCD1602=============================

#defineyi0x80

//LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)

#defineer0x80+0x40

//LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)

//----------------延时函数,后面经常调用----------------------

voiddelay(uintxms)//延时函数,有参函数

{

uintx,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

}

//--------------------------写指令---------------------------

voidwrite_1602com(ucharcom)//****液晶写入指令函数****

{

lcd1602_rs=0;//数据/指令选择置为指令......

// lcd1602_rw=0;//读写选择置为写

P0=com;//送入数据

delay

(1);

lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备

delay

(1);

lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令

}

//-------------------------写数据-----------------------------

voidwrite_1602dat(uchardat)//***液晶写入数据函数****

{

lcd1602_rs=1;//数据/指令选择置为数据

// lcd1602_rw=0;//读写选择置为写

P0=dat;//送入数据

delay

(1);

lcd1602_en=1;//en置高电平,为制造下降沿做准备

delay

(1);

lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令

}

//-------------------------初始化-------------------------

voidlcd_init(void)

{

write_1602com(0x38);//设置液晶

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2