基于C语言STC89C52单片机电子密码锁设计与仿真.docx
- 文档编号:11281261
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:36
- 大小:436.34KB
基于C语言STC89C52单片机电子密码锁设计与仿真.docx
《基于C语言STC89C52单片机电子密码锁设计与仿真.docx》由会员分享,可在线阅读,更多相关《基于C语言STC89C52单片机电子密码锁设计与仿真.docx(36页珍藏版)》请在冰豆网上搜索。
基于C语言STC89C52单片机电子密码锁设计与仿真
届别2010
学号200614060123
毕业设计
基于C语言STC89C52单片机电子
密码锁设计与仿真
姓 名
系别、专业物电系
导师姓名、职称讲师
完成时间2010-5-10
摘要
密码锁是现代生活中经常用到的工具之一,常用于各类保险柜、房门、防盗门等。
电子密码锁,克服了传统的机械式密码锁密码量少、安全性能差的缺点。
特别是使用微处理器制作的智能电子密码锁,它除具有电子密码锁的功能外,还可引入了智能化管理功能,从而使密码锁具有更高的安全性和可靠性。
本文介绍如何使用C语言编写8051单片机程序,制作智能电子密码锁。
系统由矩阵键盘、单片机系统、lcd显示器和报警系统组成。
该智能电子密码锁主要可由使用者自己设定一个6位数的密码,将密码锁上锁。
只有在按“PUTINCODES”码后12秒内输入和设定的密码相同时,才能将锁打开,否则报警,报警后只有通过使用钥匙才能打开并停止报警。
为了保证密码的更改方便与永久保存,使用了存储芯片,这样,在断电条件下,其内部密码数据则可保持100年不丢失。
本程序已经在proteus仿真以及开发板用行成功。
关键词:
电子密码锁;单片机;矩阵键盘;lcd显示器;报警
ABSTRACT
Code-Lock,oneofthetoolsusedinvarioustypesofinsurancetoresist,doors,securitydoors,isalreadyextensivelyusedinmodernlife.Theelectroniclockreplacingthetraditionalmechanicallocksovercomethelimitedpasswordnumberandthepoorsecurityofthemechanicallock.Particularly,theintelligentelectroniclockproducedbymicroprocessors,which,inadditionwithanelectroniccodelockfunction,butalsointroducingaintelligentmanagementfeaturetoletthecode-lockpossessahighersecurityandreliability.
ThisarticledescribeshowtousetheClanguageprogram8051tomaketheintelligentelectroniccode-lock.TheSystemconsistsofmatrixkeyboard,SCMsystem,lcddisplayandalarmsystemcomponents.Theintelligentelectroniclockprovidetheusertosetasix-digitpasswordhimselfandletthepasswordlocklocked.Onlyinaccordancewith"PUTINCODES"yardsinputtherightcodewithin12secondsyoucanopenthelock,oritwillalarm,afterwhichyoucanopenthelockbykeyonlyandinthesametimeitstoppingalarming.Inordertoensuretheconveniencechangingandpermanentpresevingofthecodeweusethememorychips,sothatwhenweareundertheconditionofinterruptionofpowersupply,itsinternalpassworddatacanbemaintainedwithoutlossof100years.
Thisprogramhasalreadybeensuccessfulusedinproteus-simulation,anddevelopmentboards.
Keywords:
ElectronicLocks;Microcomputer;MatrixKeyboard;LcdMonitor;Alarm
1概述
1.1电子密码锁的研究现状及前景
电子密码锁是现代生活中常用的加密工具。
它不克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。
当今的电子密码锁常使用arm[1]和单片机控制。
单片机相对arm实现较为简单,功能较为完善,因此使用单片机控制较多。
用单片机控制的密码锁常使用汇编语言编[2]写程序,显示器多数用数码管[3]。
而本文所介绍的电子密码锁使用移植性及可读性强的高级语言C语言编写,便于修改和增减功能;同时采用显示清楚,功率消耗小而且寿命长的1602液晶显示器,显示更加直观,使用更加方便。
从经济实用的角度出发,采用STC89
C52[4]单片机设计一种具有密码设置、报警功能和防止多次试探密码的电子密码锁所需成本很低。
1.2电子密码锁的基本构件及优点
1.2.1STC89C52的选择
STC89C52[5]是一种低功耗、高性能CMOS8位微控制器,具有8K可编程Flash存储器。
使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具体特点如下:
一、加密性强,很难解密或破解,解密费用很高、国内能解密的人少.
二、超强抗干扰:
三、超低功耗:
四、在系统可编程,无需编程器,可远程升级。
五、STC单片机直接替换ATMEL,PHILIPS,Winbond等产品。
1.2.2液晶显示模块的选择
液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器上。
具有功耗低,显示信息大,寿命长和抗干扰能力强等优点,在低功耗的单片机系统中得到大量使用。
液晶显示模块和键盘输入模块作为便携式仪表的通用器件,在单片机系统的开发过程中也可以作为常用的程序和电路模块进行整体设计。
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就显示黑色,这样即可显示出图形。
2系统硬件构成
2.1硬件电路主要芯片(MCS-52)
2.1.1MCS-51的引脚图
2.1.2电源及时钟引脚
1、电源引脚
电源引脚接入单片机的工作电源。
(1)Vcc(40脚):
接+5V电源;
(2)Vss(20脚):
接地。
2、时钟引脚
两个时钟引脚XTAL1、XTLA2外接晶体与片内的反向放大器构成了一个晶振器,它为单片机提供了时钟控制信号。
2个时钟引脚也可外接晶体振荡器。
(1)XTAL1:
接外部晶振一个引脚。
该引脚是内部反向放大器的输入端,这个反向放大器构成了片内振荡器。
(2)XTAL2:
接外部晶振另一端,该引脚是内部反向放大器的输出端。
采用外部时钟振荡器时,该引脚接收时钟振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。
2.1.3控制引脚
1、RST/VPD
RST该引脚是复位信号输入端,高电平有效。
当单片机运行时,若此引脚上的电压持续保持两个机器周期(24个时钟振荡周期)的高电平,单片机就会复位。
当单片机正常工作时候应该保持为0.5V低电平。
VPD为第9引脚第二功能,为备用电源的输入端。
当主电源发生故障的时候,降低到某一规定的低电平时,将+5V电源自动接入RST端,为内部RAM提供备用电源,这样可以保证RAM的数据不会丢失,从而当单片机再次开机的时候能继续正常运行。
2、ALE/
ALE为地址所存允许信号,当单片机正常工作后,ALE引脚不断地输出正脉冲信号。
当访问单片机外部存储时,ALE输出信号的负跳沿用作8位地址的锁存信号。
即使不访问外部锁存器,ALE仍有正脉冲信号输出,此频率为时钟振荡器频率的1/6.但是,每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。
因此,严格来说,用户不宜用ALE作精细的时钟或定时钟或定时信号。
ALE端可以驱动8个TTL负载。
如果想判断单片机芯片的好坏,可以用示波器查看ALE端是否有正脉冲输出。
若有正脉冲输出,那么单片机基本是正常的。
为30脚第二功能。
在对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。
3、
程序存储器允许输出控制端。
在单片机访问外部程序存储器时,此引脚输出的负脉冲作为读外部程序存储器的选通信号。
此引脚接外部程序存储器的
端。
可以驱动8个LS型TTL负载。
如果检查一个MCS-51单片机应用系统上电后,CPU能否正常到外部程序存储器读取指令,也可以用示波器查
端有无脉冲输出,如果有脉冲输出,那么说明单片机应用系统基本正常工作。
4、
/VPP
、VPP为内外程序存储器选择控制端。
当
端为高电平时,单片机访问内部程序存储器,但在PC(程序计数器)值超过4KB,将自动转向执行外部程序存储器内的程序。
当保持低电平时,则只访问外部程序存储器,不论是否有外部程序存储器。
2.1.4I/O口引脚
(1)P0口:
双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个TTL负载。
(2)P1口:
8位准双向I/O口,可驱动4个TTL负载。
(3)P2口:
8位准双向I/O口,与地址总线(高8位)复用,可以驱动4个TTL负载
(4)P3口:
8位准双向I/O口,双功能复用口,可以驱动4个TTL负载。
P1口、P2口、P3口线片内均有固定的上拉电阻,当这3个准双向I/O口作输入口使用时,要向该口先写“1”,另外准双向I/O口无高阻态。
P0口线内无固定的上拉电阻,有两个MOS管串接而成,即可以开漏输出,又可以处于高阻态的“浮空”状态,称之为双向三态I/O口。
2.21602液晶显示
液晶[6]是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器上。
它具有体积小、功耗低、显示操作简单等特点。
2.2.11602接口信号说明如下图
2.2.2主要技术参数:
2.2.3基本操作时序
读状态输入:
RS=L,R/W=H,E=H输出:
D0~D7=状态字
读数据输入:
RS=H,R/W=H,E=H输出:
无
写指令输入:
RS=L,R/W=L,E=高脉冲输出:
D0~D7=数据
写数据输入:
RS=H,R/W=L,E=高脉冲输出:
无
2.2.4RAM地址映射图
控制器内部带有80B的RAM缓存区,对应关系如下图
2.2.5.状态字说明
2.2.6.数据指针设置
控制器内部设有一个数据地址指针,用户可以通过让它们访问内部80B的RAM,如下图:
2.2.7其他设置(如下图)
2.2.8初始化设置
(1)显示模式设置
(2)显示/关及光标设置
3功能分析
3.1中断
51单片机内部一共有5个中断[7]源,也就是说,有5种情况发生时,会使单片机去处理中断程序。
对于单片机来说,中断时CPU在处理某一件A时,发生了另外一件事B,请求CPU迅速处理(中断发生);CPU暂时停止当前的工作(中断响应),转去处理事情B(中断服务);待CPU处理某一件事B完毕后,再回到原来事情A被中断的地方继续处理事情A(中断返回),这一过程称为中断,其流程图如下图。
主程序中断响应
执行
中断请求中断
断点处理
程序
继续
执行程序中断返回
单片机中断过程
3.1.152单片机6个中断源
INT0—外部中断0,有P3.2端口引入,低电平或下降沿引起。
INT1—外部中断1,有P3.3端口引入,低电平或下降沿引起。
T0—定时器、计数器0中断,有T0计数满后回零引起。
T1—定时器、计数器1中断,有T1计数满后回零引起。
T2—定时器、计数器2中断,有T2计数满后回零引起。
TI/RI—串行口中断,串行端口完成一帧字节符号发送、接收后引起。
3.1.2中断允许寄存器IE
中断允许寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是AS8H—AFH,该寄存器可以进行位寻址,即可以对该寄存器的每一位进行单独操作。
单片机复位时全部清零,各位定义见下表:
EA-全局中断允许位;
EA=1,打开全局中断,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
3.1.3中断优先级寄存器IP
中断优先级寄存器在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H—BFH,IP用来设定各个中断源属于两级中断的那一级。
单片机复位时IP自动清零。
各位定义如下表:
(--为无效位)
3.1.4定时器/计数器工作方式寄存器TMOD
定时器/计数器工作方式寄存器在特殊功能寄存器中,字节地址为89H,不能位寻址,TOMD用来确定定时器的工作方式及其功能选择。
单片机复位时TMOD全部被清零。
各位定义如下表:
TOMD的高四位用于设置定时器1,低四位用于设置定时器0,对应四位的含义如下:
GATE-门控制位。
GATE=0,定时器/计时器启动与停止仅受TCON寄存器TRX控制。
GATE=1,定时器/计时器启动与停止受TCON寄存器TRX和外部中断共同控制。
-定时器模式和计数器模式选择位。
=1,为计数模式;
=0,为定时模式。
M1M0-工作方式如下图:
定时器/计数器控制寄存器TCOND如下图:
3.1.5计算定时器初值:
定时器一旦启动,它便在原来的数值上开始叫1计数,若在程序开始时,没有设置TH0和TL0,它们的默认值为0,假设时钟频率为12Mz,12个时钟周期为一个机器周期,那么此时机器周期就是1毫秒,计满TH0和TL0就需要
个数,再来一个脉冲计数器溢出,随即向CPU申请中断。
因此溢出一次共需要65536毫秒,约等于65.5ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上计50000个数后,定时器溢出,此时刚好就是50ms中断一次,当初值需定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间了。
3.1.6中断服务程序的写法
void函数名()interrupt中断号using工作组
{
中断服务程序内容
}
通常定时器初始化过程如下:
对TOMD赋值,以确定T0和T1的工作方式。
计算初值,并将初值写入TH0、TL0或TH1、HL1。
中断方式时,对IE赋值,开放中断。
是TR0或TR1位置,启动定时器/计数器定时/或计数。
3.2键盘
键盘[8]分为编码键盘和非编码键盘。
键盘上闭合的识别有专门的硬件编码器实现,生产编码号或键值的成为编码键盘。
靠软件编写程序识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘。
3.2.1键盘输入的特点
键盘实质是一组按键开关的集合。
通常,键盘所用开关为机械弹性开关,均利用了机械触点的合、断作用。
一个电压信号通过机械触点的断开、闭合过程,其行线电压输出波形图,如下:
图中t1和t3分别为按键的闭合和断开过程的抖动时间(呈现一串负脉冲),抖动的时间长短与按键的机械特性有关,一般为5-10ms,t2为稳定的闭合期,其时间由按键的动作所决定,一般为十分之一秒到几秒,t0、t4为断开期。
3.2.2按键的确定
按键的闭合与否,反映在行线输出电压上就是呈现出高电平或低电平,如果为高电平表示断开,低电平表示按键的闭合,所以通过对行线电平的高低状态的检测,便可确定按键是否按下。
但是为了确保CPU对一次按键按下只识别一次,必须消除抖动。
3.2.3如何消除抖动
消除抖动分为硬件消抖和软件消抖,一般的情况下采用软件消抖。
在第一次检测到有按键按下时,执行延时程序,延时10ms,再次确定该键是否仍保持闭合状态,如果保持闭合状态确定的确有键按下,从而消除了抖动。
3.2.4矩阵键盘工作原理
按键设置在行、列线点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V电源上。
当无按键按下时,行线处于高电平状态,当有键按下时,行线电平状态将由与此线相连的列线电平决定。
列线电平若为低电平,则行线电平为低;列线电平为高,则行线电平也为高。
这是识别矩阵键盘是否按下关键。
由于矩阵键盘中的行、列线为多键共用,各按键均影响该键所在的行和列的电平。
因此各按键彼此将互相发生影响,所以必须将行、列线信号线配合起来并作适当处理,这样才能确定闭合键的具体位置。
3.2.5按键的识别
如上矩阵按键图。
当3好键被按下时,与此相连的行线电平将有与此键相连的列线电平决定,而行线电平在无按键按下时处于高电平状态。
如果所有的列线都处于高电平状态,那么按键是否按下,不会引起行线电平状态的变化,行线始终为高电平。
所以,让所有的列线处于高电平是没有办法识别按键的。
现在反过来,让所有的列线处于低电平,很明显,按键所在行电平将被接成低电平,根据此行电平的变化,便能判断此行一定有键按下。
但不能确定按下的键是3,因为,如果是将2、1或0之一按下,也会产生相同的结果。
所以,让所有列线处于低电平只能得出某行有键被按下的结论。
为了进一步判断到底是哪一列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线都处于高电平状态。
当第一列为低电平,其余的各列都为高电平时,因为是3键被按下,所以第1行仍处于高电平状态;当第2列为低电平,其余的各列为高电平时,同样发现第1行仍处于高电平状态。
直到让第4列为低电平时因为是3号键被按下,所以第1行的电平将由高电平转换到第4列所处的低电平,因此,确定第1行第4列交
叉点处的键即3号键被按下。
3.3
C总线
3.3.1
C总线介绍
传统的单片机外围电路扩展通常使用并行方式,即单片机与外围电路器件用8根数据线进行数据交换,再加上一些地址、控制线,占用了单片机大量的引脚,这往往不能接受。
C总线[9]是一种用于IC之间连接的总线。
它通过SDA和SCL两根线与连接到总线上的器件之间传送信息。
总线上每个节点都有一个固定的节点地址,根据地址识别每个器件,可以方便地构成多机系统和外围电路的扩展。
它的传输速率为100kb/s总线的驱动能力为400pF.
3.3.2
C总线工作原理
C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
起始和终止信号:
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式:
每一个字节必须保证是8位长度。
数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
3.3.3EEPROMAT24C02
1.AT24C02引脚功能
AT24C02引脚
各引脚功能:
1,2,3(A0、A1、A2)——可编程地址输入端。
4(GND)——电源地。
5(SDA)——串行数据输入/输出端。
6(SCL)——串行时钟输入端。
7(WP)——写保护输入端,用于硬件数据保护。
该引脚为低电平时,可以对整个存储器进行正常的读和写操作;当为高电平时,存储器只有读操作功能,不能对改存储器进行写操作。
8(Vcc)——电源正端。
2、存储结构与寻址
AT24C02的存储器容量为2KB,内部分为32页,每页8B,操作时有两种寻址方式:
芯片寻址和片内子地址寻址。
(1)芯片寻址。
AT24C02的芯片地址为1010,其他的控制字格式为1010A2A1A0R/
。
其中A2,A1,A0为可编程地址选择位。
A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码。
R/
为芯片读写控制位,该位为0,表示对芯片进行写操作;该位为1表示对芯片进行读操作。
(2)片内子地址寻址。
芯片寻址可对内部256B中的任意一个进行读写操作。
4程序分析
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint
ucharcodetable[]="WELCOME";
uchardatatable1[]="PUTINCODES";
uchardatatable3[]="STECODES";
voidwrite_com(uchar);
uchara0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5;
sbitp1_4=P1^4;//位声明
sbitp1_3=P1^3;
sbitRS=P2^4;
sbitRW=P2^5;
sbitsda=P1^2;
sbitscl=P1^1;
sbitwp=P1^0;
sbitE=P2^6;
charcount1=0;
uintnumb,i;//定义
ucharnumber,a,j,m,k,time=0;
/*******************函数声明**************************/
voiddelay(uint);
voidwrite_dat(uchar);
ucharkeyscan(void);
intconsure();
intbesure();
/**************eeprom函数声明************************/
voiddelay1();
voidstart();
voidstop();
voidrespons();
voidinit();
voidwrite_byte(uchardate);
ucharread_byte();
ucharread_add(ucharaddress);
voidwrite_add(ucharaddress,uchardate);
voiddelay2(ucharx);
/********************主函数******
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 语言 STC89C52 单片机 电子 密码锁 设计 仿真