单片机电子密码锁的设计.docx

上传人:b****6 文档编号:4923343 上传时间:2022-12-11 格式:DOCX 页数:34 大小:104.18KB
下载 相关 举报
单片机电子密码锁的设计.docx_第1页
第1页 / 共34页
单片机电子密码锁的设计.docx_第2页
第2页 / 共34页
单片机电子密码锁的设计.docx_第3页
第3页 / 共34页
单片机电子密码锁的设计.docx_第4页
第4页 / 共34页
单片机电子密码锁的设计.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

单片机电子密码锁的设计.docx

《单片机电子密码锁的设计.docx》由会员分享,可在线阅读,更多相关《单片机电子密码锁的设计.docx(34页珍藏版)》请在冰豆网上搜索。

单片机电子密码锁的设计.docx

单片机电子密码锁的设计

单片机电子密码锁的设计

 

1.系统功能要求

通过学习的数电、模电、单片机原理的相关知识,利用所学的综合理论知识,设计单片机电子密码锁。

本系统由单片机系统、LCD显示器和报警系统等组成。

要求具有有键盘输入、LED数码管显示、开锁、超时报警基本的密码锁的功能,主要通过密码按键预设输入密码,,解锁后能通过按键手动复位,误输入密码三次后自动报警,鸣叫并退出,简单易懂、使用方便、安全性能高等。

2.设计方案描述

该方案采用一种是用以AT89C52为核心的单片机控制方案。

这样单片机可具有足够的空余硬件资源实现其它的扩充功能,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现最基本的密码锁功能。

其原理如图2-1所示。

AT89C52

单片机

密码输入错误退出

 

延时报警控制电路

键盘输入

 

LCD显示模块

图2-1单片机控制方案

3.系统硬件的设计

单片机电子密码锁的总电路图如图3.1。

该设计是用以AT89C52单片机为中心。

在这个设计中有8位LCD数码管的数字显示,采用的是行列键盘,比较简单易操作。

图3-1

3.1.行列键盘的设计

各按键功能为P1.0-P1.7为"0"-"7"数字键,P3.0为"8"键,P3.4为"9"键,P3.1为开锁开始键,P3.2为重输键,P3.3确认键。

p3.6时间设定,长按住为"分调整"-"时调整"-退出,短按为省电-分加1-时加1,P3.5为分或时减1,P3.7为小喇叭口。

本设计采用行列设计如图3—1—1。

图3—1—1

3.2.单片机系统

设计采用的是AT89C52单片机如图3—2—2。

该单片机性能稳定性高,成本低。

单片机引脚接口P1.0到P1.7分别接到LCD显示数码管,P2.0到P2.7通过放大器分别接到LCD数码管的另一端。

都是作为数码管显示电路输入端口,使得数码管显示各功能的结果。

图3-2—2单片机系统

3.3.报警电路的设计

报警电路图如图3—3—3所示。

密码输入值的比较主要有两个部分,密码位数与内容,任何一个条件不满足,都会产生出错信息。

利用设定的行列键盘输入密码并确认,如果连续三次出错,就会出现报警信息,LCD显示出错信息,蜂鸣器鸣叫,P3.7口红灯亮并退出开锁程序。

图3-3—3报警系统电路图

4.系统软件的设计

4.1.主程序

主程序流程图如图4-1

图4-1

4.2.键盘扫描的设计

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

4.3.开锁报警程序的设计

报警功能程序的设计方法:

设置40H-45H为原始密码存放单元(预设为123456),06H为开锁状态标志,=1为开锁状态,=0为时钟状态。

按下P3.1,确定开锁键,等待开锁开始,利用P1.0到P1.7,P3.0,P3.4数字键输入6位密码,密码输入完毕,然后按P3.3确定键。

输入正确则开锁。

当连续三次输入密码出错时,则会出现报警信息并退出开锁程序。

其程序流程如图所示4—3.

 

 

图4—3

5.系统调试

5.1.硬件调试

硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LCD显示器的点亮状况,若亮度不理想可以调整P0口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。

实验室制作时可结合示波器测试晶振及P0、P2端口的波形情况进行综合硬件测试分析。

5.2.软件调试

软件调试在Wave或KeilC51编译器下进行,源程序编译及仿真调试应分段或以子程序为单位一个一个进行,最后可结合硬件实时调试。

5.3.性能分析

由于计时中断程序中加了中断延时误差处理,所以实际计时的走时精度非常高,可满足多种场合的应用需要,另外上电时具有一个滚动显示子程序,可以方便显示制作日期等信息。

6.结论

该电子密码锁充分利用了51单片机软,硬件资源,具有开锁,三次密码错误自动退出的功能。

如果能引入了智能化分析功能,提高了系统的可靠性和安全性,应用于生活中,那将会给人们省去了用传统锁的麻烦与不安全性。

另外通过学习并设计单片机电子密码锁,使自己对课本上的知识可以应用于实际,使得理论与实际相结合,加深了自己对课本知识的更好理解。

对我们学生来说,理论与实践同样重要,这是我们以后在工作中说明自己能力的一个重要标准。

7.参考文献

[1]楼然苗,李光飞.51系列单片机设计实例(第2版)[M].北京:

北就航空航天大学出版社,2006.02.

[2]李光飞等.单片机课程设计实例指导[M].北京:

北就航空航天大学出版社,2004.09.

[3]何立民.MCS-51单片机应用系统设计[M].北航出版社,1990年

[4]霍孟友,王爱群.单片机原理与应用——学习概要及题解[M].机械工业出版社,2005年

李群芳等《单片微型计算机及接口技术》,电子工业出版社

[5]李广弟编,单片机基础.北京航天航天大学出版社,2001

 

程序

;;;;;;;;;;;;;;;;;;;;*****************************************************;;;;;;;;;;;;;;;;;;;;;

;;STC89C52RC时钟\密码锁演示程序;

;;使用新时钟电路实验板式;

;;;;;;;;;;;;;;;;;;;;******************************************************;;;;;;;;;;;;;;;;;;;;

;*********************************************************************************************;

;p3.6时间设定,长按住为"分调整"-"时调整"-退出,短按为省电-分加1-时加1,P3.5为分或时减1;

;P3.7为小喇叭口,采用共阳显示管,50H-55H为密码输入存放单元,60H-65H为开锁时倒计时单元;

;40H-45H为原始密码存放单元(预设为123456),70H-75H为显示时间单元,76H-79H为分时计时单元;

;06H为开锁状态标志,=1为开锁状态,=0为时钟状态;

;P1.0-P1.7为"0"-"7"数字键,P3.0为"8"键,P3.4为"9"键,P3.1为开锁开始键,P3.2为重输键,P3.3确认键;

;*********************************************************************************************;

DISPFIRSTEQU30H;显示首址存放单元

BELLEQUP3.7;小喇叭或蜂呜器

KSCONEQU2EH;存放开锁次数

SONGCONEQU31H;唱歌程序计数器

CONR2EQU32H;以下唱歌程序用寄存器

CONR3EQU33H

CONR4EQU34H

CONR6EQU36H

CONR7EQU37H

CONR5EQU35H;以上唱歌程序寄存器

DELAYR3EQU38H;以下延时程序用寄存器

DELAYR5EQU39H;

DELAYR6EQU3AH;

DELAYR7EQU3BH;

;

;****************************************

;;中断入口程序;;

;****************************************

;

ORG0000H;程序执行开始地址

LJMPSTART;跳到标号START执行

ORG0003H;外中断0中断程序入口

RETI;外中断0中断返回

ORG000BH;定时器T0中断程序入口

LJMPINTT0;跳至INTTO执行

ORG0013H;外中断1中断程序入口

RETI;外中断1中断返回

ORG001BH;定时器T1中断程序入口

LJMPINTT1;跳至INTT1执行

ORG0023H;串行中断程序入口地址

RETI;串行中断程序返回

;

;****************************************

;;以下程序开始;;

;****************************************

;开锁程序进入

DJS:

LCALLDS20MS

JBP3.1,START1;

WAITH111:

LCALLDISPLAY

JNBP3.1,WAITH111;等待键释放

MOVKSCON,#3;允许三次开锁

LJMPDJSST

;****************************************

;;主程序开始;;

;****************************************

;

START:

MOVSP,#80H;堆栈在80H以上

LCALLSTMEN;时钟程序初始化子程序

SETBEA;总中断开放

SETBET0;允许T0中断

SETBTR0;开启T0定时器

MOVR4,#14H;1秒定时用计数值(50MS×20)

MOVDISPFIRST,#70H;显示单元为70-75H

;LCALLMUSIC0;唱歌测试程序

;以下主程序循环

START1:

LCALLDISPLAY;调用显示子程序

JNBP3.6,SETMM1;P3.6口为0时转时间调整程序

JNBP3.1,DJS;启动开锁

AJMPSTART1;P3.6口为1时跳回START1

;

SETMM1:

LJMPSETMM;转到时间调整程序SETMM

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;1秒计时程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中断服务程序

INTT0:

PUSHACC;累加器入栈保护

PUSHPSW;状态字入栈保护

CLRET0;关T0中断允许

CLRTR0;关闭定时器T0

MOVA,#0B7H;中断响应时间同步修正

ADDA,TL0;低8位初值修正

MOVTL0,A;重装初值(低8位修正值)

MOVA,#3CH;高8位初值修正

ADDCA,TH0;

MOVTH0,A;重装初值(高8位修正值)

SETBTR0;开启定时器T0

SETBP3.6

SETBP3.5

DJNZR4,OUTT0;20次中断未到中断退出

ADDSS:

MOVR4,#14H;20次中断到(1秒)重赋初值

CPL07H;闹铃时间隔呜叫用

MOVR0,#71H;指向秒计时单元(71H-72H)

ACALLADD1;调用加1程序(加1秒操作)

MOVA,R3;秒数据放入A(R3为2位十进制数组合)

CLRC;清进位标志

CJNEA,#60H,ADDMM;

ADDMM:

JCOUTT0;小于60秒时中断退出

ACALLCLR0;大于或等于60秒时对秒计时单元清0

MOVR0,#77H;指向分计时单元(76H-77H)

ACALLADD1;分计时单元加1分钟

MOVA,R3;分数据放入A

CLRC;清进位标志

CJNEA,#60H,ADDHH;

ADDHH:

JCOUTT0;小于60分时中断退出

ACALLCLR0;大于或等于60分时分计时单元清0

LCALLDS20MS;正点报时

SETB08H

MOVR0,#79H;指向小时计时单元(78H-79H)

ACALLADD1;小时计时单元加1小时

MOVA,R3;时数据放入A

CLRC;清进位标志

CJNEA,#24H,HOUR;

HOUR:

JCOUTT0;小于24小时中断退出

ACALLCLR0;大于或等于24小时小时计时单元清0

OUTT0:

MOV72H,76H;中断退出时将分、时计时单元数据移

MOV73H,77H;入对应显示单元

MOV74H,78H;

MOV75H,79H;

POPPSW;恢复状态字(出栈)

POPACC;恢复累加器

SETBET0;开放T0中断

RETI;中断返回

;

;****************************************

;;闪动调时程序\秒表功能程序;;

;****************************************

;T1中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时

INTT1:

PUSHACC;中断现场保护

PUSHPSW;

JB09H,SPCC

JB06H,DJSFUN

JB03H,MMFUN;=1时秒表

MOVTL1,#0B0H;装定时器T1定时初值

MOVTH1,#3CH;

DJNZR2,INTT1OUT;0.3秒未到退出中断(50MS中断6次)

MOVR2,#06H;重装0.3秒定时用初值

CPL02H;0.3秒定时到对闪烁标志取反

JB02H,FLASH1;02H位为1时显示单元"熄灭"

MOV72H,76H;02H位为0时正常显示

MOV73H,77H;

MOV74H,78H;

MOV75H,79H;

INTT1OUT:

POPPSW;恢复现场

POPACC;

RETI;中断退出

FLASH1:

JB01H,FLASH2;01H位为1时,转小时熄灭控制

MOV72H,7AH;01H位为0时,"熄灭符"数据放入分

MOV73H,7AH;显示单元(72H-73H),将不显示分数据

MOV74H,78H;

MOV75H,79H;

AJMPINTT1OUT;转中断退出

FLASH2:

MOV72H,76H;01H位为1时,"熄灭符"数据放入小时

MOV73H,77H;显示单元(74H-75H),小时数据将不显示

MOV74H,7AH;

MOV75H,7AH;

AJMPINTT1OUT;转中断退出

;

SPCC:

INCSONGCON;中断服务,中断计数器加1

MOVTH1,#0D8H

MOVTL1,#0EFH;12M晶振,形成10毫秒中?

AJMPINTT1OUT;

DJSFUN:

LJMPDJSS

MMFUN:

CLRTR1

MOVA,#0F7H;中断响应时间同步修正,重装初值(10ms)

ADDA,TL1;低8位初值修正

MOVTL1,A;重装初值(低8位修正值)

MOVA,#0D8H;高8位初值修正

ADDCA,TH1;

MOVTH1,A;重装初值(高8位修正值)

SETBTR1;开启定时器T0

MOVR0,#61H;指向秒计时单元(71H-72H)

ACALLADD1;调用加1程序(加1秒操作)

CLRC;

MOVA,R3;

JZFSS1;加1后为00,C=0

AJMPOUTT01;加1后不为00,C=1

FSS1:

ACALLCLR0;大于或等于60秒时对秒计时单元清0

MOVR0,#63H;指向分计时单元(76H-77H)

ACALLADD1;分计时单元加1分钟

MOVA,R3;分数据放入A

CLRC;清进位标志

CJNEA,#60H,ADDHH1;

ADDHH1:

JCOUTT01;小于60分时中断退出

LCALLCLR0;大于或等于60分时分计时单元清0

MOVR0,#65H;指向小时计时单元(78H-79H)

ACALLADD1;小时计时单元加1小时

OUTT01:

POPPSW;恢复状态字(出栈)

POPACC;恢复累加器

RETI;中断返回;

;****************************************

;;加1子程序;;

;****************************************

;

;

ADD1:

MOVA,@R0;取当前计时单元数据到A

DECR0;指向前一地址

SWAPA;A中数据高四位与低四位交换

ORLA,@R0;前一地址中数据放入A中低四位

ADDA,#01H;A加1操作

DAA;十进制调整

MOVR3,A;移入R3寄存器

ANLA,#0FH;高四位变0

MOV@R0,A;放回前一地址单元

MOVA,R3;取回R3中暂存数据

INCR0;指向当前地址单元

SWAPA;A中数据高四位与低四位交换

ANLA,#0FH;高四位变0

MOV@R0,A;数据放入当削地址单元中

RET;子程序返回

;

;****************************************

;;分减1子程序;;

;****************************************

;

SUB1:

MOVA,@R0;取当前计时单元数据到A

DECR0;指向前一地址

SWAPA;A中数据高四位与低四位交换

ORLA,@R0;前一地址中数据放入A中低四位

JZSUB11

DECA;A减1操作

SUB111:

MOVR3,A;移入R3寄存器

ANLA,#0FH;高四位变0

CLRC;清进位标志

SUBBA,#0AH

SUB1111:

JCSUB1110

MOV@R0,#09H;大于等于0AH,为9

SUB110:

MOVA,R3;取回R3中暂存数据

INCR0;指向当前地址单元

SWAPA;A中数据高四位与低四位交换

ANLA,#0FH;高四位变0

MOV@R0,A;数据放入当削地址单元中

RET;子程序返回

;

SUB11:

MOVA,#59H

AJMPSUB111

SUB1110:

MOVA,R3;移入R3寄存器

ANLA,#0FH;高四位变0

MOV@R0,A

AJMPSUB110

;****************************************

;;时减1子程序;;

;****************************************

;

SUBB1:

MOVA,@R0;取当前计时单元数据到A

DECR0;指向前一地址

SWAPA;A中数据高四位与低四位交换

ORLA,@R0;前一地址中数据放入A中低四位

JZSUBB11;00减1为23(小时)

DECA;A减1操作

SUBB111:

MOVR3,A;移入R3寄存器

ANLA,#0FH;高四位变0

CLRC;清进位标志

SUBBA,#0AH;时个位大于9为9

SUBB1111:

JCSUBB1110;

MOV@R0,#09H;大于等于0AH,为9

SUBB110:

MOVA,R3;取回R3中暂存数据

INCR0;指向当前地址单元

SWAPA;A中数据高四位与低四位交换

ANLA,#0FH;高四位变0

MOV@R0,A;时十位数数据放入

RET;子程序返回

;

SUBB11:

MOVA,#23H

AJMPSUBB111

SUBB1110:

MOVA,R3;时个位小于0A不处理

ANLA,#0FH;高四位变0

MOV@R0,A;个位移入

AJMPSUBB110

;****************************************

;;清零程序;;

;****************************************

;对计时单元复零用

CLR0:

CLRA;清累加器

MOV@R0,A;清当前地址单元

DECR0;指向前一地址

MOV@R0,A;前一地址单元清0

RET;子程序返回

;

;****************************************

;;时钟时间调整程序;;

;****************************************

;当调时按键按下时进入此程序

SETMM:

cLRET0;关定时器T0中断

CLRTR0;关闭定时器T0

LCALLDL1S;调用1秒延时程序

LCALLDS20MS;消抖

JBP3.6,CLOSEDIS;键按下时间小于1秒,关闭显示(省电)

MOVR2,#06H;进入调时状态,赋闪烁定时初值

MOV70H,#00H;调时时秒单元为00秒

MOV71H,#00H

SETBET1;允许T1中断

SETBTR1;开启定时器T1

SET2:

JNBP3.6,SET1;P3.6口为0(键未释放),等待

SETB00H;键释放,分调整闪烁标志置1

SET4:

JBP3.6,SET3;等待键按下

LCALLDL05S;有键按下,延时0.5秒

LCALLDS20MS;消抖

JNBP3.6,SETHH;按下时间大于0.5秒转调小时状态

MOVR0,#77H;按下时间小于0.5秒加1分钟操作

LCALLADD1;调用加1子程序

MOVA,R3;取调整单元数据

CLRC;清进位标志

CJNEA,#60H,HHH;调整单元数据与60比较

HHH:

JCSET4;调整单元数据小于60转SET4循环

LCALLCLR0;调整单元数据大于或等于60时清0

CLRC;清进位标志

AJMPSET4;跳转到SET4循环

CLOSEDIS:

SETBET0;省电(LED不显示)状态。

开T0中断

SETBTR0;开启T0定时器(开时钟)

CLOSE:

JBP3.6,CLOSE;无按键按下,等待。

LCALLDS20MS;消抖

JBP3.6,CLOSE;是干扰返回CLOSE等待

WAITH:

JNBP3.6,WAITH;等待键释放

LJMPSTART1;返回主程序(

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

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1