电子密码锁.docx

上传人:b****6 文档编号:13766665 上传时间:2023-06-17 格式:DOCX 页数:43 大小:448.71KB
下载 相关 举报
电子密码锁.docx_第1页
第1页 / 共43页
电子密码锁.docx_第2页
第2页 / 共43页
电子密码锁.docx_第3页
第3页 / 共43页
电子密码锁.docx_第4页
第4页 / 共43页
电子密码锁.docx_第5页
第5页 / 共43页
电子密码锁.docx_第6页
第6页 / 共43页
电子密码锁.docx_第7页
第7页 / 共43页
电子密码锁.docx_第8页
第8页 / 共43页
电子密码锁.docx_第9页
第9页 / 共43页
电子密码锁.docx_第10页
第10页 / 共43页
电子密码锁.docx_第11页
第11页 / 共43页
电子密码锁.docx_第12页
第12页 / 共43页
电子密码锁.docx_第13页
第13页 / 共43页
电子密码锁.docx_第14页
第14页 / 共43页
电子密码锁.docx_第15页
第15页 / 共43页
电子密码锁.docx_第16页
第16页 / 共43页
电子密码锁.docx_第17页
第17页 / 共43页
电子密码锁.docx_第18页
第18页 / 共43页
电子密码锁.docx_第19页
第19页 / 共43页
电子密码锁.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子密码锁.docx

《电子密码锁.docx》由会员分享,可在线阅读,更多相关《电子密码锁.docx(43页珍藏版)》请在冰点文库上搜索。

电子密码锁.docx

电子密码锁

 

课程设计报告

 

主课题:

电子密码锁

报告人:

同组成员:

课设时间:

05月30日-06月10日

 

一、实现功能

1)设计一多位电子密码锁,输入密码用“0”表示,输入密码正确,显示“YES”,输入密码错误,显示“NO”,蜂鸣器响

2)具有确定键和取消键,在未确定之前可以取消,重新输入

3)连续输入三次错误密码,蜂鸣器响,显示“ERROR”键盘锁定

4)具有密码重置功能

5)显示北京时间,同时可对北京时间进行修改

二、使用硬件

1.ADUC848

ADUC848管脚图如下图所示

Pin1~4:

(P1.0~P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。

若P2、P3、P0口要作为输入,则应往相应引脚写1。

Pin5、6:

AVDD、AGND,模拟电源输入。

Pin7、8:

外部参考电压接入,Pin7接AGND。

片内DAC有2.5V内部参考,ADC有1.25V内部参考。

Pin9、10:

(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。

Pin11、12:

(P1.6、P1.7)各200uA激励电流源,可配合RTD等

做应用。

Pin13:

两路AD输入做普通输入时的电压参考端,AD输入电压不能低于此引脚电压。

Pin14:

片内DAC输出。

Pin15:

复位引脚。

Pin16、17:

单片机RS232接口的RXD(P3.0)TXD(P3.1)。

Pin18:

(P3.2)外部中断0,用于红外接收和PS/2接口。

Pin19:

(P3.3)LCD1602,LCD12864A的EN引脚,控制第一位数码管。

Pin20、21:

DVDD、DGND数字电源输入。

Pin22:

(P3.4)PS/2接口的data信号。

Pin23:

(P3.5)LCD1602和LCD12864A的RW。

Pin24:

(P3.6)LCD1602和LCD12864A的RS。

Pin25:

LCD12864A的CS1。

Pin26:

IIC接口时钟信号。

Pin27:

IIC接口data信号。

Pin28:

(P2.0)SPI接口时钟信号。

Pin29:

(P2.1)SPI接口MOSI信号、控制第6位数码管的位码。

Pin30:

(P2.2)SPI接口MISO信号、控制第7位数码管的位码。

Pin31:

(P2.3)SPI接口SS信号、控制第8位数码管的位码;P2.0~3也作为4X4矩阵式键盘的扫描输出信号、步进电机的控制信号、数码管第数码管第6、7、8位位码。

但是SPI、4X4矩阵式键盘、步进电机、数码管第6、7、8位功能不能同时实现。

Pin32、Pin33:

接外部32.768KHz晶振。

Pin34、Pin35:

DVDD、DGND。

Pin36:

(P2.4)LCD12864A的CS2。

Pin37:

(P2.5)内部PWM模块输出,控制红外LED。

Pin38:

(P2.6)内部PWM模块输出,控制蜂鸣器。

Pin39:

(P2.7)内部PWM模块的外部时钟输入(也可以用内部时钟)。

Pin40:

EA,低电平有效,正常使用时拉低。

Pin41:

PSEN,在此引脚电平为低时按复位键进入debug模式,可以下载和调试程序。

Pin42:

ALE。

Pin47、Pin48:

DGND、DVDD。

Pin43、44、45、46、49、50、51、52:

P0口、LCD1602和LCD12864的数据总线,数码管的段码。

2.电源模块

本学习板共有如下3种供电方式:

(1)5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽)。

(2)7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽)。

(3)USB供电(开关往下拨)。

电源模块原理图

本次使用第3种供电方式,将开关sw4第1、2脚接通(开关往下拨),电源网络DVDD连接到USB电源输入端。

3.数码管

该模块原理如图

(1)DS0~7:

数码管段码。

(2)BIT0~7:

数码管位码。

(3)MOTORA~D:

步进电机驱动信号。

(4)DISCTRL0~4:

显示控制信号,控制数码管低5位。

(5)D0~8:

单片机P0口。

本设计采用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动。

引脚复用:

数码管低5位(板上为右边5位)的位码由DISCTRL0~4控制,可单独使用,高3位的位码控制信号与SPI信号,电机驱动信号,4X4矩阵式键盘复用,使用数码管高3位时参与复用的其他功能则不能使用。

插针配置:

(1)若要使用数码管第4~0位(板上为右边5位),可以接通插针8。

(2)若要使用数码管第7~5位(板上为左边3位),可以分别接通插针5~7和9。

4.蜂鸣器

该模块原理图如图1.10所示。

本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制。

PWM1和PWM0均为片内PWM模块的输出。

蜂鸣器采用普通NPN三极管。

插针配置:

使用蜂鸣器,可以接通插针3。

 

5.按键模块

该模块原理如图

由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可。

引脚复用:

P2.0~P2.3为4X4矩阵式键盘列扫描信号,又复用作步进电机控制信号,SPI信号、P2.1~P2.3还复用为数码管第5、6、7位位码控制信号。

参与复用的一项功能使用时,其他参与复用的功能则不能使用。

插针配置:

(1)插针10上面两脚接跳线帽,4X4矩阵式键盘输入,行扫描信号为P1.0~P1.3,列扫描信号为P2.0~2.3。

(2)插针10下面两脚接跳线帽,独立按键输入,该模式有4个独立按键可用,按键扫描所用端口为P1.0~P1.3。

这4个按键为4X4矩阵键盘的左边4个按键。

6.复位与下载

复位与下载电路如图

进入下载或调试模式的步骤为:

(1)按住BTN1(downordebug按键)不要放开;

(2)按下BTN2(reset按键),然后放开BTN2(reset按键);

(3)放开BTN1(downordebug按键)。

这样单片机就进入了调试模式,可以下载或调试程序。

 

三.程序流程图:

检测按键程序流程图:

 

设置时间流程图:

输入密码流程图:

N

N

N

Y

N

Y

N

Y

修改密码流程图:

N

Y

Y

Y

 

四、源程序:

BITCNTDATA58H

ERRORCNTDATA5AH

BUFEQU2BH

SBFEQU2AH

MBFEQU29H

HBFEQU28H

ORG0000H

LJMPMAIN

ORG000BH

LJMPCLOCK0

ORG0039H

MAIN:

MOVBUF,#00H

MOVSBF,#06H

MOVMBF,#10H

MOVHBF,#02H

MOVTMOD,#11H//T0十六位

MOVTL0,#00H

MOVTH0,#1CH

SETBET0

SETBET1

SETBEA

SETBTR0

;密码初始化程序

L0:

MOVBITCNT,#00H;输入计数

MOVERRORCNT,#00H;存放错误次数

MOVR4,#08H

MOVR1,#27H

START:

MOVA,R4

MOV@R1,A

DECR1

DJNZR4,START;20H-27H存放初始密码

;检测按键程序

SCAN:

LCALLKEY0;调用键盘输入子程序

MOVR5,A

XRLA,#0BH

JZTIME;设置时间键被按下,转到TIME(设置时间程序)

MOVA,R5

XRLA,#0CH

JZENTER;输密码键被按下,转到输入密码程序

MOVA,R5

XRLA,#0DH

JZNNN1

SJMPNNN2

NNN1:

LJMPSET0;改密码键被按下,转到修改密码程序

NNN2:

LJMPSCAN;其他键被按下,无效,再扫描按键

 

;设置时间程序

TIME:

CLRTR0

B0:

LCALLINPUTTIME

MOVR6,A

CLRC

SUBBA,#03H

JCW0

SJMPB0

W0:

MOV70H,R6

B1:

LCALLINPUTTIME

W1:

MOV61H,A

MOVA,70H

SWAPA

ADDA,61H

MOVHBF,A

B2:

LCALLINPUTTIME

MOVR6,A

CLRC

SUBBA,#06H

JCW2

SJMPB2

W2:

MOV73H,R6

B3:

LCALLINPUTTIME

W3:

MOV64H,A

MOVA,73H

SWAPA

ADDA,64H

MOVMBF,A

B4:

LCALLINPUTTIME

MOVR6,A

CLRC

SUBBA,#06H

JCW4

SJMPB4

W4:

MOV76H,R6

B5:

LCALLINPUTTIME

W5:

MOV67H,A

MOVA,76H

SWAPA

ADDA,67H

MOVSBF,A

SETBTR0

LJMPSCAN

;输入密码程序

ENTER:

CALLCLEAR;调用存放数码管段码子程序,数码管全显示"-",表示等待密码输入状态

MOVBITCNT,#08H;输入密码程序

MOVR1,#30H;30H-37H存放数码管段码

MOVR0,#40H;40H-47H存放输入的密码

CALLINPUT;调用密码输入子程序

XRLA,#0EH;判断取消键是否被按下

JZENTER;取消键被按下,跳到ENTER重新输入密码

CALLCOMP;调用比较密码子程序

JNCNNN3;C='0',密码错误,转到L1检测按键

SJMPPASS

NNN3:

LJMPL1;C='0',密码错误,转到L1检测按键

PASS:

MOVERRORCNT,#00H;全部正确,错误次数清零

MOVR1,#30H

MOVR2,#05H

MOV@R1,#89H;30H存入"y"的段码

INCR1

MOV@R1,#61H;31H存入"e"的段码

INCR1

MOV@R1,#49H;32H存入"S"的段码

LOOP0:

INCR1;33H-37H存入全灭的段码

MOV@R1,#0FFH

DJNZR2,LOOP0

LJMPDISP1

;修改密码程序

SET0:

CALLCLEAR;调用存放数码管段码子程序,数码管全显示"-",表示等待密码输入状态

MOVBITCNT,#08H

MOVR1,#30H

MOVR0,#40H

CALLINPUT;调用输入密码子程序,输入原密码

XRLA,#0EH;判断取消键是否被按下

JZSET0;取消键被按下,跳到SET0重新输入密码

CALLCOMP;调用比较密码子程序,比较密码

JNCNNNN3

SJMPNENTER

NNNN3:

LJMPX1;C='0',密码错误,转到L1检测按键

NENTER:

MOVR1,#30H;密码正确,进入输新密码准备程序

MOVR2,#07H

MOV@R1,#71H;30H存入"F"的段码,原密码输入正确,接着输入两次新密码

LOOP1:

INCR1

MOV@R1,#0FFH

DJNZR2,LOOP1;33H-37H存入全灭的段码

MOVBITCNT,#08H;8位密码

MOVR1,#30H;30H-37H存放数码管段码

MOVR0,#50H;50H-57H暂存放新密码

CALLINPUT;调用输入密码子程序,输入新密码

XRLA,#0EH;判断取消键是否被按下

JZNENTER;取消键被按下,跳到NENTER重新输入密码

AGAIN:

CALLCLEAR

MOVR1,#30H;进入输第二次新密码准备程序

MOVR2,#07H

MOV@R1,#0F5H;30H存入"r"的段码,提示输入新密码

LOOP2:

INCR1

MOV@R1,#0FFH

DJNZR2,LOOP2;35H-37H存入全灭的段码

MOVBITCNT,#08H;确认新密码

MOVR1,#30H

MOVR0,#40H

CALLINPUT;调用输入密码子程序,再次输入新密码

XRLA,#0EH;判断取消键是否被按下

JZAGAIN;取消键被按下,跳到AGAIN重新输入密码

MOVR0,#40H;比较新密码程序

MOVA,@R0

CJNEA,50H,X5;比较第0位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N1:

INCR0

MOVA,@R0

CJNEA,51H,X5;比较第1位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N2:

INCR0

MOVA,@R0

CJNEA,52H,X5;比较第2位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N3:

INCR0

MOVA,@R0

CJNEA,53H,X5;比较第3位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N4:

INCR0

MOVA,@R0

CJNEA,54H,X5;比较第4位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N5:

INCR0

MOVA,@R0

CJNEA,55H,X5;比较第5位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N6:

INCR0

MOVA,@R0

CJNEA,56H,X5;比较第6位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

N7:

INCR0

MOVA,@R0

CJNEA,57H,X5;比较第7位新密码,相同则跳到下一位比较,错误则跳到X5,调用错误子程序

MOVR2,#08H;两次输入的密码相同,将新密码存入20H-27H单元中

MOVR1,#20H

MOVR0,#50H

LOOP3:

MOVA,@R0

MOV@R1,A

INCR1

INCR0

DJNZR2,LOOP3

MOVR1,#30H;修改成功,在数码管上显示"donE"

MOVR2,#03H

MOV@R1,#71H;30H存入"F"的段码

INCR1

MOV@R1,#0F3H;31H存入"I"的段码

INCR1

MOV@R1,#13H;32H存入"n"的段码

INCR1

MOV@R1,#49H;33H存入"S"的段码

INCR1

MOV@R1,#91H;34H存入"H"的段码

LOOP4:

INCR1;35H-37H存入全灭的段码

MOV@R1,#0FFH

DJNZR2,LOOP4

LJMPDISP1

X1:

LJMPL1

X5:

CALLNO

LJMPNENTER

;以下是各种子程序

CLEAR:

MOVR2,#08H;40H-47H单元清零,准备存放输入的密码

MOVR0,#40H

LOP1:

MOV@R0,#00H

INCR0

DJNZR2,LOP1

;存放数码管段码子程序

X0:

MOVR1,#08H

MOVR0,#30H

LOP2:

MOV@R0,#0FDH

INCR0

DJNZR1,LOP2;30H-37H存放等待输入密码时数码管的段码"-"

RET

 

;输入时间子程序

INPUTTIME:

LCALLKEY0

MOVR5,A

XRLA,#0AH

JZINPUTTIME;无效键被按下,无效,转到INPUT,继续扫描

MOVA,R5

XRLA,#0BH

JZINPUTTIME;设置时间键被按下,

MOVA,R5

XRLA,#0CH

JZINPUTTIME;输密码键被按下,无效,继续扫描

MOVA,R5

XRLA,#0DH

JZINPUTTIME;改密码键被按下,无效,继续扫描

MOVA,R5

XRLA,#0EH

JZINPUTTIME;取消键被按下,

MOVA,R5

XRLA,#0FH

JZINPUTTIME;确定键被按下,

MOVA,R5

RET

;输入密码子程序

INPUT:

LCALLKEY1

MOVR5,A

XRLA,#0AH

JZINPUT;无效键被按下,转到INPUT

MOVA,R5

XRLA,#0BH

JZINPUT;设置时间键被按下,转到TIME(设置时间程序)

MOVA,R5

XRLA,#0CH

JZINPUT;输密码键被按下,无效,继续扫描

MOVA,R5

XRLA,#0DH

JZINPUT;改密码键被按下,无效,继续扫描

MOVA,R5

XRLA,#0EH

JZCANCEL;取消键被按下,转到ENTER(重新输入)

MOVA,R5

XRLA,#0FH

JZOK;确定键被按下,跳出子程序

MOVA,R5

MOV@R0,A;数字键被按下,存入密码

MOV@R1,#03H;输入密码用"0"表示

INCR0

INCR1

CALLDISP

DJNZBITCNT,INPUT

LOP3:

LCALLKEY1;已输入8位密码,检测按键

MOVR5,A

XRLA,#0EH

JZCANCEL;取消键被按下,转到CANCEL(取消程序)

MOVA,R5

XRLA,#0FH

JZOK

SJMPLOP3;确定键被按下,跳出子程序

OK:

RET

CANCEL:

MOVA,R5;A存放取消的键值

RET

;比较密码子程序

COMP:

MOVR0,#40H

MOVA,@R0

CJNEA,20H,X3;比较第0位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT1:

INCR0

MOVA,@R0

CJNEA,21H,X3;比较第1位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT2:

INCR0

MOVA,@R0

CJNEA,22H,X3;比较第2位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT3:

INCR0

MOVA,@R0

CJNEA,23H,X3;比较第3位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT4:

INCR0

MOVA,@R0

CJNEA,24H,X3;比较第4位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT5:

INCR0

MOVA,@R0

CJNEA,25H,X3;比较第5位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT6:

INCR0

MOVA,@R0

CJNEA,26H,X3;比较第6位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

NEXT7:

INCR0

MOVA,@R0

CJNEA,27H,X3;比较第7位密码,相同则跳到下一位比较,错误则跳到no(错误程序)

SETBC;C='1'表示密码正确

RET

X3:

CLRC;C='0'表示密码错误

INCERRORCNT;错误次数加1

CALLNO

RET

L1:

MOVA,ERRORCNT

CJNEA,#03H,NNNN1

SJMPNNNN2

NNNN1:

LJMPDISP1;错误次数不足3,则转到DISP1

NNNN2:

MOVR1,#30H;错三次,锁键盘

MOVR2,#03H

MOV@R1,#61H;30H存入"E"的段码

INCR1

MOV@R1,#0F5H;31H存入"R"的段码

INCR1

MOV@R1,#0F5H;32H存入"R"的段码

INCR1

MOV@R1,#0C5H;33H存入"0"的段码

INCR1

MOV@R1,#0F5H;34H存入"R"的段码

LOP:

INCR1;35H-37H存入全灭的段码

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

当前位置:首页 > 经管营销 > 经济市场

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

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