本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx

上传人:b****2 文档编号:17266561 上传时间:2023-07-23 格式:DOCX 页数:83 大小:547.92KB
下载 相关 举报
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第1页
第1页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第2页
第2页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第3页
第3页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第4页
第4页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第5页
第5页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第6页
第6页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第7页
第7页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第8页
第8页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第9页
第9页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第10页
第10页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第11页
第11页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第12页
第12页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第13页
第13页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第14页
第14页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第15页
第15页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第16页
第16页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第17页
第17页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第18页
第18页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第19页
第19页 / 共83页
本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx_第20页
第20页 / 共83页
亲,该文档总共83页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx

《本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx》由会员分享,可在线阅读,更多相关《本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx(83页珍藏版)》请在冰点文库上搜索。

本科毕业论文基于c51多功能电子密码锁设计源程序代码.docx

本科毕业论文基于c51多功能电子密码锁设计源程序代码

摘要

摘要:

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

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

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

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

密码锁具有安全性高、成本低、功耗低、易操作等优点。

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

随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。

本次设计使用STC公司的STC89C52实现一基于单片机的电子密码锁的设计,其主要具有如下功能:

1.密码通过键盘输入,若密码正确,则将锁打开,语音提示开锁,蜂鸣器播放一段开锁音乐。

2.密码可由管理员修改设定,锁打开后才能修改密码。

修改密码之前必须再次输入密码,在输入新密码时需要二次确认,以防止误操作。

3.报警、锁定键盘功能。

密码输入错误,LCD液晶显示器会出现错误提示,同时语音提示错误信息,蜂鸣器鸣响;若密码输入错误次数达到3次,蜂鸣器报警并且锁定键盘,蜂鸣器播放一段报警音乐。

主要的设计过程:

首先,选用STC公司的单片机STC89C52,以及选用其他电子元器件。

第二步,使用AlitmDesigner设计硬件电路原理图,完成人工布线。

第三步,使用KeilC51软件编写单片机的C语言程序、仿真、软件调试。

最后,联合软、硬件调试电路板,完成本次电子综合设计。

关键词:

4×4矩阵键盘;STC89C52;ISD1760;LCD液晶显示器;密码二次确认

 

第一部分总述

一.引言

科技的发展是电子产品的应用越来越广泛,电子电路的设计也越来越重要。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。

同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发的首选控制器。

用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般锁的需要,具有一定的现实意义。

本系统采用STC公司的单片机STC89C52作为主控芯片,结合外围的矩阵键盘输入、LCD显示、报警系统和开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码且具有报警功能的电子密码锁。

用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,且密码输入错误时有提示,为了提高安全性,当密码连续输入错误三次将报警。

密码只可以由管理员自己修改、设定,锁打开后只有管理员才能修改密码。

修改之前必须先输入管理员登录密码,然后再次输入旧密码,在输入新密码时需要二次确认,以防止误操作。

二.课题内容及要求

1.设计内容:

采用LCD液晶显示,4*4的矩形键盘输入的基于单片机的电子密码锁,能够实现修改密码,纠错,确认的功能。

2.基本要求:

硬件布局基本合理,焊接比较美观,器件运用基本合理,用比较简单的电路实现修改密码、纠错、确认等基本功能。

3.提高部分:

电子密码锁能够实现管理员登陆、动态显示登陆密码、登陆密码验证,登陆成功与否给出提示、超次锁定并报警鸣示、在登陆成功的情况下管理员可以进行修改和确认密码,新密码位数不够或太简单给出提示,能在修改密码成功的情况下给出提示。

另外,可以用语音发声芯片发出相应的提示信息,并用蜂鸣器报警,播放简单的音乐段。

本方案采用一种以STC89C52为核心的单片机控制方案。

利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能,以及一些扩展功能。

第二部分硬件设计部分

一.设计总框图

图一总体设计框图

2.单片机STC89C52介绍

STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

STC89C52具体介绍如下:

①主电源引脚(2根)

VCC(Pin40):

电源输入,接+5V电源

GND(Pin20):

接地线

②外接晶振引脚(2根)

XTAL1(Pin19):

片内振荡电路的输入端

XTAL2(Pin20):

片内振荡电路的输出端

③控制引脚(4根)

RST/VPP(Pin9):

复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):

地址锁存允许信号

PSEN(Pin29):

外部存储器读选通信号

EA/VPP(Pin31):

程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)

STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(Pin39~Pin32):

8位双向I/O口线,名称为P0.0~P0.7

P1口(Pin1~Pin8):

8位准双向I/O口线,名称为P1.0~P1.7

P2口(Pin21~Pin28):

8位准双向I/O口线,名称为P2.0~P2.7

P3口(Pin10~Pin17):

8位准双向I/O口线,名称为P3.0~P3.7

STC89C52主要功能如表二所示。

表二STC89C52主要功能

主要功能特性

兼容MCS51指令系统

8K可反复擦写FlashROM

32个双向I/O口

256x8bit内部RAM

3个16位可编程定时/计数器中断

时钟频率0-24MHz

2个串行中断

可编程UART串行通道

2个外部中断源

共6个中断源

2个读写中断口线

3级加密位

低功耗空闲和掉电模式

软件设置睡眠和唤醒功能

3.输入键盘

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。

采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。

本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。

键盘的每个按键功能在程序设计中设置。

其原理图如下:

图二矩阵键盘

每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步就要识别哪一个按键按下。

对键的识别通常有两种方法:

一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。

对照图四所示的4×4键盘,说明线反转法工作原理:

首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。

方法是:

向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。

如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。

判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。

方法是:

依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

图三按键操作面板示意图

(顺序以实际电路为准)

10个数字键用来输入密码,0键有切换模式的功能,另外6个功能键分别是:

权限键、退出键、清零键、开启键、删除键、确定键。

其中权限键的功能是设置密码修改权限,只有管理员可以登录修改密码。

退出键的功能是退出当前程序。

清零键键的功能是当前输入数据清零。

开启键的功能是退出屏幕保护界面,开启LCD显示功能:

未按下时LCD动态显示屏保图形,需要开锁时按下此键,LCD上会显示“HelloEnteryourcode”。

未输入密码时,单独按下0键具有切换模式功能,密码输入后0作为数字键。

4.LCD液晶显示

为了提高密码锁的密码显示效果能力。

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

只有按下键盘上的开启按键后,显示器才处于开启状态。

同理只有按下退出按键后显示器才处于屏保状态。

否则显示器将一直处于开启状态,当需要对密码锁进行开锁时,按下键盘上的开启按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*(设定为6个)。

当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD上显示“SuccessfullyLockIsOpened”,单片机其中P3.1引角会输出低电平,使三极管Q1导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“CodeError”,P3.1输出的是高电平,电子密码锁不能被打开。

若连续三次密码输入错误,则密码所被锁定,LCD上显示“PleaseWait….”。

若密码修改太简单,则显示“CodeIsTooSimple”。

若输入的密码大于原密码,则LCD上显示“Large”,若输入的密码小于原密码,LCD上显示“Small”。

通过LCD显示屏,可以清楚的判断出锁所处的状态。

其显示部分引脚接口如图六所示:

图四显示电路原理图

5.ISD1760语音提示

本设计采用ISD760单片60秒高保真语音录放电路进行语音操作,实时提示当前状态。

当密码连续输入3次错误之后语音芯片给出语音提示“连续3次密码输入错误,键盘已锁定”。

语音电路如图:

图五语音电路原理图

6.蜂鸣器发声

报警模块由蜂鸣器和单片机组成。

选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100mA驱动电流。

蜂鸣器电路如图七所示。

当89C52的P3.1口输出为低电平时,蜂鸣器产生蜂鸣音,89C52输出为高电平时,蜂鸣器不发声。

图六报警电路原理图

第三部分软件设计部分

一.程序流程图

图七程序流程图

二.键盘扫描设计

键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。

主要程序如下:

ucharKeyScan(void)//键盘扫描函数,使用行列逐级扫描法

{

ucharVal;

KeyPort=0xf0;//高四位置高,低四位拉低

if(KeyPort!

=0xf0)//表示有按键按下

{

delay(10);//去抖

if(KeyPort!

=0xf0)

{//表示有按键按下

KeyPort=0xfe;//检测第一行

if(KeyPort!

=0xfe)

{

Val=KeyPort&0xf0;

Val+=0x0e;

while(KeyPort!

=0xfe);

delay(10);//去抖

while(KeyPort!

=0xfe);

returnVal;

}

KeyPort=0xfd;//检测第二行

if(KeyPort!

=0xfd)

{

Val=KeyPort&0xf0;

Val+=0x0d;

while(KeyPort!

=0xfd);

delay(10);//去抖

while(KeyPort!

=0xfd);

returnVal;

}

KeyPort=0xfb;//检测第三行

if(KeyPort!

=0xfb)

{

Val=KeyPort&0xf0;

Val+=0x0b;

while(KeyPort!

=0xfb);

delay(10);//去抖

while(KeyPort!

=0xfb);

returnVal;

}

KeyPort=0xf7;//检测第四行

if(KeyPort!

=0xf7)

{

Val=KeyPort&0xf0;

Val+=0x07;

while(KeyPort!

=0xf7);

delay(10);//去抖

while(KeyPort!

=0xf7);

returnVal;

}

}

}

return0xff;

}

/**********************按键值处理函数,返回扫键值******************/

ucharKeyPro(void)

{

switch(KeyScan())

{

case0xee:

return1;break;//1按下相应的键显示相对应的码值

case0xde:

return2;break;//2

case0xbe:

return3;break;//3

case0xed:

return4;break;//4

case0xdd:

return5;break;//5

case0xbd:

return6;break;//6

case0xeb:

return7;break;//7

case0xdb:

return8;break;//8

case0xbb:

return9;break;//9

case0xe7:

return10;break;//删除

case0xd7:

return0;break;//0模式

case0xb7:

return11;break;//确定

case0x7e:

return13;break;//开启

case0x7d:

return14;break;//清零

case0x7b:

return15;break;//退出

case0x77:

return16;break;//权限

default:

return12;break;

}

}

三.液晶显示设计

由于是显示数据,所以就要用到如下几个显示子程序,分别是:

开锁状态显示子程序、密码输入及修改状态显示子程序、密码输入错误后的提示子程序。

密码在规定的时间内输入错误次数超过3次后的锁定状态显示子程序,输入密码错误的情况下清除密码子程序等。

动态显示主要程序:

voiddelay_gd(intms)

{//延时子程序

inti;

while(ms--)

{

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

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

bitlcd_bz()

{//测试LCD忙碌状态

bitresult;

rs=0;

lcdrw=1;

lcden=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80);

lcden=0;

returnresult;

}

voidlcd_wcmd(ucharcmd)

{//写入指令数据到LCD

while(lcd_bz());

rs=0;

lcdrw=0;

lcden=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

lcden=1;

_nop_();

_nop_();

_nop_();

_nop_();

lcden=0;

}

voidlcd_pos(ucharpos)

{//设定显示位置

lcd_wcmd(pos|0x80);

}

voidlcd_wdat(uchardat)

{//写入字符显示数据到LCD

while(lcd_bz());

rs=1;

lcdrw=0;

lcden=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

lcden=1;

_nop_();

_nop_();

_nop_();

_nop_();

lcden=0;

}

voidlcd_init()

{//LCD初始化设定

lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据

delay_gd

(1);

lcd_wcmd(0x0c);//显示开,关光标

delay_gd

(1);

lcd_wcmd(0x06);//移动光标

delay_gd

(1);

lcd_wcmd(0x01);//清除LCD的显示内容

//delay_gd

(1);

}

voidlcd_gundong(uchar*dis1)

{

uchari;

lcd_init();//初始化LCD

display2(date);

delay_gd(10);

lcd_wcmd(0x06);//向右移动光标

lcd_pos(0);//设置显示位置为第一行的第1个字符

i=0;

while(dis1[i]!

='\0')

{//显示字符"CQUniversity"

lcd_wdat(dis1[i]);

i++;

temp=KeyPro();

if(temp==13)break;

delay_gd(30);//控制两字之间显示速度

}

delay_gd(200);//控制停留时间

lcd_wcmd(0x01);//清除LCD的显示内容

display2(date);

}

静态显示主要程序:

voidwrite_com(ucharcom)

{

P0=com;

rs=0;

lcden=0;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidwrite_date(uchardate)

{

P0=date;

rs=1;

lcden=0;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidinit()

{

lcden=0;

write_com(0x38);

delay(10);

write_com(0x0c);

delay(10);

write_com(0x06);

delay(10);

write_com(0x01);

delay(10);

}

/************************定时中断***********************/

voidintrupt()

{TMOD=0X10;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

ET1=1;

TR1=1;

}

voidw_cht(uchardat)

{

uchardat1,dat2;

dat1=dat/10;

dat2=dat%10;

write_com(0x80+0x40+0x06);

write_date(0x30+dat1);

write_date(0x30+dat2);

}

voidT_rupt()interrupt3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

t0++;

if(t0==20)

{

t0=0;

miao--;

if(miao>0)

w_cht(miao);

else

TR1=0;

}

}

/**********************显示部分************************/

voiddisplay1(uchar*tab)

{

uchari;

write_com(0x80);

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

{write_date(*tab);

tab++;

}

}

voiddisplay2(uchar*tab)

{

uchari;

write_com(0x80+0x40);

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

{write_date(*tab);

tab++;

}

}

四.语音提示设计

使用独立按键模式,将需要播放的录音录入ISD1760芯片内部,再使用SPI程序控制方式将ISD1760芯片内部的指定地址的录音播放出来。

voidPlay(ucharnum)//形参=1放1段,2放2段,3放3段,4放4段。

16个地址是2秒。

{

if(num==0x01){StartAdr=0x001e;EndAdr=0x0028;}

elseif(num==0x02){StartAdr=0x0029;EndAdr=0x0033;}

elseif(num==0x03){StartAdr=0x0034;EndAdr=0x003c;}

elseif(num==0x04){StartAdr=0x003d;EndAdr=0x0045;}

elseif(num==0x05){StartAdr=0x0046;EndAdr=0x004f;}

elseif(num==0x06){StartAdr=0x0050;EndAdr=0x005b;}

elseif(num==0x07){StartAdr=0x005f;EndAdr=0x006b;}

elseif(num==0x08){StartAdr=0x006c;EndAdr=0x0079;}

elseif(num==0x09){StartAdr=0x007a;EndAdr=0x0087;}

elseif(num==0x0a){StartAdr=0x0088;EndAdr=0x0095;}

elseif(num==0x0b){StartAdr=0x0097;EndAdr=0x00a2;}

elseif(num==0x0c){StartAdr=0x00a3;EndAdr=0x00b1;}

elseif(num==0x0d){StartAdr=0x00b2;EndAdr=0x00c0;}

elseif(num==0x0e){StartAdr=0x00c5;EndAdr=0x00d6;}

elseif(num==0x0f){StartAdr=0x00d7;EndAdr=0x00e4;}

elseif(num==0x10){StartAdr=0x00e7;EndAdr=0x00f6;}

e

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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