资源描述
基于STC89C51单片机的电子密码锁
学生姓名: 赵丽丽 宋 帅 高秋利
学生学号: 1104101005 1104101021 1104101001
院(系): 机电工程学院
年级专业: 11级电子信息工程1班
指导教师: 王秀山
二〇一五一月
目 录
1 绪论
1.1电子密码锁简介…………………………………………………………………………3
2 设计方案……………………………………………………………………………………4
3 主要元器件…………………………………………………………………………………5
3.1 主控芯片STC89C51………………………………………………………………………5
3.2 晶体振荡器………………………………………………………………………………5
3.3 LCD显示密码模块的设计………………………………………………………………7
3.3.1 LCD1602简介………………………………………………………………………7
3.3.2 LCD1602液晶显示模块与单片机连接电路………………………………………8
4 硬件系统设计……………………………………………………………………………9
4.1 设计原理…………………………………………………………………………………9
4.2 电源输入电路……………………………………………………………………………9
4.3 矩阵键盘…………………………………………………………………………………10
4.4 复位电路…………………………………………………………………………………10
4.5 晶振电路…………………………………………………………………………………11
4.6 报警电路…………………………………………………………………………………12
4.7 显示电路…………………………………………………………………………………12
4.8 开锁电路…………………………………………………………………………………12
4.9 电路总体构成……………………………………………………………………………13
5 软件程序设计……………………………………………………………………………14
5.1 主程序流程介绍…………………………………………………………………………14
5.2 键盘模块流程图…………………………………………………………………………15
5.3 显示模块流程图…………………………………………………………………………17
5.4 修改密码流程图…………………………………………………………………………18
5.5 开锁和报警模块流程图………………………………………………………………19
6 电子密码锁的系统调试及仿真………………………………………………………21
6.1硬件电路调试及结果分析………………………………………………………………21
6.2软件调试及功能分析……………………………………………………………………21
6.2.1调试过程……………………………………………………………………………21
6.2.2 仿真结果分………………………………………………………………………22
6.3 仿真全图…………………………………………………………………………………24
7 结论…………………………………………………………………………………………25
参考文献………………………………………………………………………………………26
附录:……………………………………………………………………………………………27
1 绪论
1.1电子密码锁简介
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点如下:
1) 保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。
2) 密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因
人员的更替而使锁的密级下降。
3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。
4) 无活动零件,不会磨损,寿命长。
5) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
6) 电子密码锁操作简单易行,一学即会。
2 设计方案
采用以单片机为核心的控制方案。
由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。基于以上因素本设计选用单片机STC89C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602液晶显示屏用于显示作用。当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确则重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确开锁后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码修改成功。
3主要元器件
3.1主控芯片STC89C51
1)STC89C51单片机的主要特性如下:
STC89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC的STC89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,STC89C51芯片引脚图如图3-1所示。
图3-1 STC89C51芯片引脚图
3.2 晶体振荡器
晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。以声卡为例,要实现对模拟信号44.1kHz或48kHz的采样,频率发生器就必须提供一个44.1kHz或48kHz的时钟频率。如果需要对这两种音频同时支持的话,声卡就需要有两颗晶振。但是现在的娱乐级声卡为了降低成本,通常都采用SCR将输出的采样频率固定在48kHz,但是SRC会对音质带来损害,而且现在的娱乐级声卡都没有很好地解决这个问题。现在应用最广泛的是石英晶体振荡器。
石英晶体振荡器是一种高精度和高稳定度的振荡器,石英晶体振荡器也称石英晶体谐振器,它用来稳定频率和选择频率,是一种可以取代LC谐振回路的晶体谐振元件。石英晶体振荡器广泛地应用在电视机、影碟机、录像机、无线通讯设备、电子钟表、单片机、数字仪器仪表等电子设备中。为数据处理设备产生时钟信号和为特定系统提供基准信号。在单片机中为其提供时钟频率。
石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片(简称为晶片,它可以是正方形、矩形或圆形等),在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。只要在晶体振子板极上施加交变电压,就会使晶片产生机械变形振动,此现象即所谓逆压电效应。当外加电压频率等于晶体谐振器的固有频率时,就会发生压电谐振,从而导致机械变形的振幅突然增大。
时钟信号用来提供单片机片内的各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。外接晶体以及电容C2和C3构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为30pF左右,晶振频率选11.0592MHz
3.3 LCD显示密码模块的设计
显示模块主要由LCD1602显示屏组成,他显示的是键盘输入的密码,以及密码正确与错误的提示。当输入密码时,出于安全性的考虑,显示的密码是有*号代替,为暗密。当输入六位密码后按下确认键,系统会与存于ROM的密码对比, 若密码错误,显示屏会显示Error,若密码正确,显示屏会显示Right。
3.3.1 LCD1602简介
1) 1602功能介绍
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
2) 1602LCD 采用标准的 14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如下表3-2所示:
表3-2 引脚功能说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
其引脚图如下图3-2所示:
图3-2 LCD1602引脚图
3) LCD寄存器的选择
表3-3 LCD寄存器的选择
E
R/W
RS
功能说明
1
1
0
写入命令寄存器
1
1
1
写入数据寄存器
1
1
0
读取忙碌标志及RAM地址
1
1
1
读取RAM数据
0
X
1
不动作
3.3.2 LCD1602液晶显示模块与单片机连接电路
图3-3 LCD1602液晶显示模块与单片机连接电路
4 硬件系统设计
4.1 设计原理
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。
本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
复位电路
振荡电路
键盘电路
开锁电路
STC89C51
单片机
显示电路
报警电路
图4-1 组成原理
4.2 电源输入电路
三端集成稳压器LM7805和LM7905是作为固定输出电压的典型应用。正常工作时,输入、输出电压差为2--3V。电容C为输入稳定电容,其作用是减小纹波,消振、抑制高频和脉冲干扰,它一般为0.1--1uF。电容C为输出稳定电容,其作用是改善负载的瞬态响应,它一般为1uF。使用三端稳压器时要根据输出电流的大小选择加散热器,否则会由于过热而无法工作到额定电流。
图4-2 电源输入电路
4.3 矩阵键盘
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置 。其大体功能(看键盘按键上的标记)及与单片机引脚接法。
图4-3 矩阵键盘
4.4 复位电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图2-8所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R11与R15分压比决定。由于R11<<R15 因此RST为高电平,CPU处于复位状态,松手后,电容C1充电,RST端电位下降,CPU脱离复位状态。R11的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电 。
图4-4 复位电路
4.5 晶振电路
STC89C51引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按下图所示方式连接。晶振、电容C2/C3及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在30pF左右。根据实际情况,本设计中采用11.0592MHZ做系统的外部晶振。电容取值为33pF。
图4-5 晶振电路
4.6 报警电路
报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P3.3引脚为低电平,三极管T3导喇叭发出噪鸣声报警。
图4-6 报警电路
4.7 显示电路
LCD1602液晶显示屏显示。
图4-7 显示电路
4.8 开锁电路
通过单片机开锁执行机构,发光二极管D1发光以替代达到开锁的目的。
图4-8 开锁电路
开锁原理:
LED发光
单片机
微控制器
STC89C51
P1.0低电平
返回
N
Y
密码正确?
图4-9 开锁原理
4.9 电路总体构成
外围电路包括电源输入部分、键盘输入部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4*4矩阵键盘,显示部分选择LCD1602液晶显示屏来完成。键盘输入模块和LCD1602液晶显示屏显示模块是最主要的两大模块,键盘主要是完成密码的输入、修改密码、消除密码等等任务。而显示模块则是主要完成输入密码的显示以及密码输入正确或者错误的提示。而剩余的就是报警模块、开锁模块以及单片机的最小系统。
图4-10 总电路图
5 软件程序设计
电子密码锁的软件设计是整个电子密码锁可靠安全运行的关键,密码锁软件程序分为主程序、延时程序、LCD1602液晶显示屏显示程序、修改密码程序、扫描键盘输入程序、报警程序。密码通过矩阵键盘输入,并且在LCD1602液晶显示屏上显示,如果输入密码正确,则可以直接开锁。如果不正确,并且3次以上输入不正确,则启动报警系统,触发蜂鸣器发声。如果要修改密码,则需要在输入基础密码判别正确后,输入修改后的密码,通过系统确认后方可修改密码。为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。而本次设计分为四大模块,分别是键盘输入模块、LCD1602液晶显示屏显示模块、开锁和报警模块以及修改密码模块,通过主程序来实现控制。
5.1主程序流程介绍
主程序主要内容是各程序模块的调用,并利用各模块进行电子密码锁功能的实现,即是键盘输入密码并在LCD1602液晶显示屏显示密码,当密码输入完成后,单片机会将输入进的密码与原单片机内部所储存的密码进行对比,如若密码正确,则代表电磁吸合器的发光二极管会发光,同时LCD1602液晶显示屏会显示出正确的密码;如若密码错误,会启动计数器计数,当错误次数超过三次时,报警系统会启动即是蜂鸣器会发出报警声,以提醒保安。流程图如图5-1所示。
开始
初始化
次数加1
输入密码
密码正确?
返回
N
Y
Y
开锁程序
开锁?
N
修改密码码?
次数>3?
报警程序
修改程序
Y
N
N
Y
图5-1 主程序流程
5.2 键盘模块流程图
键盘输入模块主要包含键盘的扫描、延时去抖、找到键值以及返回键值。键盘扫描时循环的,程序编写是会使其进入是循环,这样可以检验出是否有按键按下,如果无按键按下就会进入等待有按键按下的状态,如果有按键按下的话就进入延时去抖的步骤,这样可以肯定的确定扫描到的按键是否被按下。经过去抖之后就是确定按键的位置即是第几行和第几列,找到按键后,就是确定键值并返回按键值,每一次扫描到有键按下后,最后都要有释放闭合按键的步骤,这是为了避免影响下一次键盘的扫描和按键值的读取。流程图如图5-2所示
键盘扫描
返回键值
闭合键释放
计算键值
找到闭合键
延时去抖
有键闭合?
Y
N
图5-2 键盘模块流程
按键的消抖子程序所示:
if(press_on!=0XF0)//--按键消抖---(时间自定)
{
delay(50);
press_on=KEY_IO;
}
确定键值的子程序如下所示:
switch(row)
{
case 0xe0:row=0;break;
case 0xd0:row=1;break;
case 0xb0:row=2;break;
case 0x70:row=3;break;
}
switch(col)
{
case 0x07:col=0;break;
case 0x0b:col=1;break;
case 0x0d:col=2;break;
case 0x0e:col=3;break;
}
recieve=key_value[row][col];
}
5.3显示模块流程图
LCD显示模块的软件设计主要包含开始、初始化LCD、清除LCD、写LCD四个过程。其中写包含写数据和写字符。
写数据的部分程序:
//写数 (5位数据)
void printf_data(uchar row,uchar col,uchar count,uint dat)
{
uchar sh1,sh2,sh3,sh4,sh5;
sh5=dat/10000;
sh4=dat%10000/1000;
sh3=dat%1000/100;
sh2=dat%100/10;
sh1=dat%10;
write_adr(0x0c);
switch(row)
{
case 1:row=0x80;break;
case 2:row=0xc0;break;
default:break;
}
write_adr(row+col-1);
delay(500);
if(count>=5)
write_data(sh5+48);
if(count>=4)
write_data(sh4+48);
if(count>=3)
write_data(sh3+48);
if(count>=2)
write_data(sh2+48);
if(count>=1)
write_data(sh1+48);
写字符的小程序为:
//写一段字符
void printf_char(uchar row,uchar col,uchar Inbuffer[31])
{
uchar i;
write_adr(0x0c);
switch(row)
{
case 1:row=0x80;break;
}
流程图5-3如下:
初始化LCD
开始
清除LCD
写LCD
结束
图5-3 显示模块流程图
5.4修改密码流程图
修改密码模块主要是在输入密码正确之后,按下14键即是修改密码键就能进入修改密码界面,其流程分为四个步骤,分别为按下14键并启动定时、输入修改的密码、按下确认键11键、LCD的显示。修改密码的部分程序如下:
//改密码
void ch_word(void)
{
unsigned char recieve=0xff,b[10],j=0;
LCD_CLR();
printf_char(1,1,"new_password%d");
while(recieve!=11)
{
recieve=keypad();
delay(10000);
if(recieve<=9&&recieve>=0)
{
b[j]=recieve;
printf_data(2,j+1,1,recieve);
j++;
}
else if(recieve==12)
{
if(j!=0)
{
a[j]='\0';
printf_char(2,j," %d");
j--;
}
}
流程图如图5-4所示:
按下14键
启动定时
输入密码
存入缓冲
按下确认1111键
比较密码
调用LED
调用显示
图5-4 修改密码流程图
5.5开锁和报警模块流程图
开锁和报警模块主要任务是把从键盘输入到单片机的密码和本身保存在单片机中的密码进行对比,如果正确就开锁,如果错误的话就进行计数并显示在LCD液晶显示屏上,当输入密码的错误次数达到3次就进入报警模式,启动蜂鸣器报警。其流程图如图5-5所示。
图5-5 报警流程图
6 电子密码锁的系统调试及仿真
6.1硬件电路调试及结果分析
硬件调试首先检查电路板焊接是否有误,检查有是否出现虚焊、漏焊、线路短接、元器件引脚是否错误焊接等等问题,然后检查电路中某些元器件是否起作用,最后利用一些小程序测试LCD1602是否完好无损。
检测单片机是否工作可通过观察示波器显示的波形是否衰减,或者利用万用表测一下18,19脚的电压,应该有个2-3V就说明起振了,另外,ALE如果有信号或者有电压也说明单片机工作了。我采用利用万用表侧18、19脚的电压,其结果显示为2.3V。
检测电路有无虚焊可用万用表的二极管档来检测,当把万用表的红黑两表笔接触在焊接线路的两端后,万用表发出声音,则说明没有虚焊。检查电路是否短路也是利用同一原理。
6.2软件调试及功能分析
软件调试即是把已经写好的C语言程序载入到软件调试工具,检查软件是否有设法错误,再根据软件提示对本程序进行修改,直到没有错误再生成单片机能运行的机器码,再用51开发板或其它单片机写入工具把机器码写入单片机进行实际的程序调试,根据实际情况再对程序的不足加以修改,直到满足设计要求。本设计采用Proteus和KEIL软件进行仿真、调试,首先在在Proteus软件上进行硬件电路的描绘,其次在KEIL软件编写电子密码锁的源程序,源程序经过汇编后产生Hex文件,最后将生成的目标文件添加到单片机中仿真调试。
6.2.1调试过程
首先打开KEIL C51主程序,新建工程,新建文本框写入程序,保存,检查是否有语法错误,经反复检查无误后汇编,生成51单片机可执行的HEX文件。然后用与51开发板相匹配的写入软件把HEX文件写入单片机。
图6-1 KEIL c51调试介面
图6-2 程序写入界面
6.2.2仿真结果分析
当系统通电进入初始化状态后,LCD显示屏会显示Welcome,结果如图6-3所示。
图6-3 系统初始化
当进入输入密码阶段时,依次按下按键上的数字键1,2,3,4,5,6后,LCD显示屏显示如图6-4所示。
图6-4 输入密码阶段仿真图
当按下确定键11键后,显示屏上显示正确且二极管灯亮,表示密码正确开门,如图6-5所示。
图6-5 输入密码正确时仿真图
按下确认键后,二极管不亮且显示屏上显示Error,表示密码输入错误,门的锁不会打开。如图6-6所示。
图6-6 输入密码错误仿真图
当需要修改密码时,只需按下14键即可进入到修改密码界面,修改成功后显示success,修改错误后显示屏会显示fail。
图6-7 修改密码仿真图
图6-8 修改失败仿真图
6.3 仿真全图
图6-9 仿真全图
7 结论
本次设计通过硬件电路设计、软件编程、硬件调试、软件调试以及系统调试完成了设计要求,达到了设计目的。本次设计最终的结果如下:
n 电子密码锁通过键盘能成功进行输入密码;
n LCD液晶显示屏上能显示输入的密码;
n 能判断输入的密码是否正确并且能显示判断结果;
n 能在密码输入正确后开门;
n 能在密码输入错误次数达到三次以上后进行报警;
n 能在开门后通过一按键对原有密码进行更改;
n 能用*代替显示输入的密码数字,隐藏了密码,这实现了密码保护。
但是在实现上述功能时,也存在许多不足。第一,在密码输入正确时除了要使代表电磁吸合器的发光二极管发光以外,还应该加上语音模块,提示门开,这样更人性化一些。第二,密码输入错误次数小于三次时,也应该采取措施提醒。第三,密码修改部分,本次设计实现的不是很好,密码能进行修改但是只能修改第一个密码。第四,本次设计的电子密码锁,安全方面还可以提高进步。本设计中的报警系统只是一个简单的系统,要应用于实际生活还需要进一步改进。
电子锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。本次设计中还有待完善的地方还很多。首先,修改密码可进一步完善,实现有不管多少户住户和多少个密码,都能修改密码。其次,也是最重要的安全防问题,报警途径很多,有视屏监视和发出报警声提醒值班的保安等等。未来,电子密码锁需要大面积占据市场首先必须要突破的就是安全问题,如果解决了这个问题,电子密码锁就能在锁的行业所向披靡。最后本次设计还可以精进的地方就是输入密码错误时的处理方法。在输入密码错误次数在三次以内时,也应该采取措施。比如禁止输入三秒或者也用发声模块提醒,只要发声频率不一致就可区分。
参 考 文 献
[1] 余永权,汪明慧,黄英.单片机在控制系统中的应用[M].北京:电子工业出版社,2009
[2] 周润景,张丽敏,王伟.Altium Designer原理图与PCB设计[M].北京:电子工业出版社,2009
[3] 蒋同泽.现代移动通信系统[M].北京:电子工业出版社,1998
[4] 张毅刚.单片机原理及应用[M],北京:高等教育出版社,2003
[5] 张云.基于GSM的短消息业务协议分析[J].北京:电子工业出版社,2001
[6] 刘法治.常用电子元器件及典型芯片应用技术[M],北京:机械工业出版社,2007
[7] 张迎.单片微型计算机原理、应用及接口技术[M].国防工业出版社.2007.1
[8] 石东海.单片机数据通信技术从入门到精通[M].西安电子科技大学出版社.2007.2
附录:
PCB布局:
/********************************************************************************
功能键
S6---S15 数字键0-9
S16---更改密码 S17---更改密码完毕后确认
S18---重试密码、重新设定 S19---关闭密码锁
初始密码:000000 密码位数:6位
注意:掉电后,所设密码会丢失,重新上点时,密码恢复为原始的000000
与P1相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上
程序功能:
1、开锁:
下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时,
六位数码管依次显示小横杠。
2、更改密码:
只有当开锁(LED亮)后,该功能方可使用。
首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应
的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。
3、重试密码:
当输入密码时,密码输错后按下键S18,可重新输入六位密码。
当设置密码时,设置中途想更改密码,也可按下此键重新设置。
4、关闭密码锁:
按下S19即可将打开的密码锁关闭。
推荐初级演示步骤:输入原始密码000000---按下更改密码按键S16---按0到9设置密码---按S17
确认密码更改---按S18关闭密码锁---输入新的密码打开密码锁
*******************************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar old1,old2,old3,old4,old5,old6; //原始密码000000
uchar new1,new2,new3,new4,new5,new6; //每次MCU采集到的密码输入
uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量
uchar wei,key,temp;
bit allow,genggai,ok,wanbi,retry,close; //各个状态位
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
void delay(unsigned char i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
dula=0;
P0=table[a];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[b];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[c];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
P0=table[d];
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(5);
P0=table[e];
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(5);
P0=table[f];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(5);
}
void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
展开阅读全文