北京交大单片机课程设计电子密码锁设计报告.docx

上传人:b****5 文档编号:6658765 上传时间:2023-01-08 格式:DOCX 页数:19 大小:259.97KB
下载 相关 举报
北京交大单片机课程设计电子密码锁设计报告.docx_第1页
第1页 / 共19页
北京交大单片机课程设计电子密码锁设计报告.docx_第2页
第2页 / 共19页
北京交大单片机课程设计电子密码锁设计报告.docx_第3页
第3页 / 共19页
北京交大单片机课程设计电子密码锁设计报告.docx_第4页
第4页 / 共19页
北京交大单片机课程设计电子密码锁设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

北京交大单片机课程设计电子密码锁设计报告.docx

《北京交大单片机课程设计电子密码锁设计报告.docx》由会员分享,可在线阅读,更多相关《北京交大单片机课程设计电子密码锁设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

北京交大单片机课程设计电子密码锁设计报告.docx

北京交大单片机课程设计电子密码锁设计报告

单片机原理与应用

课程设计报告-电子密码锁

 

目录:

1密码锁简介:

2系统硬件电路设计

单片机电路图

显示电路图

键盘电路图

3芯片介绍

MAX7219的,管脚功能,操作指令,与单片机的连接

4程序设计框架

5在课程设计中遇到的困难及解决办法与心得体会

6程序

1,电子密码锁简介:

我使用MCS51系列单片机设计电路,运用汇编语言编程,达到用键盘输入密码,修改密码,报警并即时显示的目的。

MCS51系列单片机使用起来灵活,应用广泛。

它的直接并行互连具有一定的实用价值,能简化许多应用系统的硬件设计。

它还具有性能稳定、工作可靠、价格低廉等特点。

我是利用MCS51单片机系列AT89S52为依托,利用一块扩展4X4键盘输入密码,显示器采用MAX7219控制共阴极四位数码管和蜂鸣器。

最终使密码锁能够实现以下功能:

1、密码锁上电或复位后初始密码为0000,管理员密码是1105;

2、输入密码:

按“输入”键后可输入4位密码,按“确认”键后进行比较,当与设定密码或管理员密码一致时绿灯亮,输入正确;否则红灯亮,输入错误。

当连续3次输入错误时,红灯亮一段时间,期间发出报警的蜂鸣声,且键盘在此期间锁定。

10秒后退出报警系统,返回初始状态。

3、修改密码:

按“修改”键后,要先输入当前设定密码或管理员密码才可修改,否则退出修改模块。

当输入正确后,绿灯亮,可以修改密码。

首先输入4位数字,绿灯亮;然后再输入4位数字,当两次输入一致时,绿灯亮,修改成功。

否则,红灯亮,修改未成功,需要继续输入4位数字,只有连续输入的4位数字一致时,绿灯亮,修改成功。

退出修改密码模块。

4、存在的问题:

当复位或断电后,修改后的密码会丢失

电路设计图,包括电源,复位开关,单片机,和LED蜂鸣器

显示芯片与数码管的电路设计图

注意,这里我采用的4联共阴的数码管,所以要去掉两条线

键盘连接图,4X4

其中0-9是数字输入键,输入的是相应的数字,A为输入键,B为修改密码键,C为确认键。

3、主要芯片介绍

3.1MAX7219

MAX7219是一种高集成化的串行输入/输出的共阴极LED显示驱动器。

每片可驱动8位7段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需3根线。

MAX7219内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了MCU有限的运行时间和程序资源。

MAX7219芯片上包括BCD译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8×8静态RAM以及数个工作寄存器。

通过指令设置这些工作寄存器,可以使MAX7219进入不同的工作状态。

以下将从管脚功能、操作指令、与单片机的连接三个方面全面介绍MAX7219这个芯

3管脚功能:

(1)DIN为串行数据输入端。

CLK为上升沿时,数据被载入16b内部移位寄存器。

(2)CLK为串行时钟输入端。

其最大工作频率可达10MHz。

(3)LOAD为片选端,当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,LOAD回到高电平时,接收的数据将被锁定。

(4)DIG0~DIG7为吸收显示器共阴极电流的位驱动线。

其最大值可达500mA,关闭状态时,输出+VCC。

(5)SEGA~SEGG,DP为驱动显示器7段及小数点的输出电流,一般为40mA左右,可软件调整,关闭状态时,接入GND。

(6)DOUT为串行数据输出端,通常直接接入下片MAX7219的DIN端。

译码方式选择

 操作代码为“09H”,操作数为“0”或“0FFH”。

选中“0”则不使用BCD译码器,在显示数字或符号时,按每段点亮与否编排传送码。

而选中“0FFH”时,则按8421标准二进制编码来代表相应的显示数字,如下:

显示内容

0

1

2

3

4

5

6

7

8

9

操作数(使用BCD译码)

00H

01H

02H

03H

04H

05H

06H

07H

08H

09H

操作数(不用BCD译码)

7EH

30H

6DH

79H

33H

5BH

5FH

70H

7FH

7BH

表1译码与不译码的比较

亮度调节选择

操作代码为“0AH”,这个指令可以用来调节显示器的亮度,改变其操作数可以改变MAX7219内部扫描脉冲的宽度,从而使电流的平均值有所变化,这个电流平均值可以从最小的1/32至最大的31/32之间进行16级调节,如表2所示。

操作数

00H

01H

02H

03H

04H

……

0CH

0DH

0EH

0FH

驱动电流

1/32

3/32

5/32

7/32

9/32

……

25/32

27/32

29/32

31/32

表2亮度调节操作数

扫描位数设定

  操作代码为“0BH”,如果所用的显示器少于8位,则应通过这条

指令设置相应的位数。

因为设置的位数如果比实际使用的位数大,就会形成“虚位”,而一旦对“虚位”进行操作,将会引起整个显示器的混乱,另外,扫描位数的设置,会影响到扫描频率的变化,相应地,显示器亮度也会随着变化,所以应该先确定扫描位数,再设置显示器亮度.

如表3所示

操作数

00H

01H

02H

03H

04H

05H

06H

07H

扫描位数(位)

1

2

3

4

5

6

7

8

表3扫描位数设定操作数

待机开关

操作代码为“0CH”,操作数为“0”或“1”。

操作数为“0”,则显示器不工作(灭灯),反之,显示器正常工作。

待机状态下,7219的工作电流仅为150μA。

显示器检测

操作代码为“0FH”,操作数为“0”或“1”。

选择操作数为“1”时,可点亮整个显示器,通常用来检查数码管及连接电路是否存在故障。

检测时,不会改变各位原有的显示数据,即检测完毕后,再送入不检测指令“0”,又可恢复显示原数据。

位操作指令

位操作指令就是对8个数码管显示内容的操作,也是2个字节,第1个字节是位的代码,如表4所示,第2个字节则根据译码方式的选择来使用表1中的编码。

操作代码

01H

02H

03H

04H

05H

06H

07H

08H

1

2

3

4

5

6

7

8

表4位的代码

上述所有指令的输入,不分先后(但每个指令2个字节的秩序不能颠倒)。

通常,前5条指令一般在上电初始化程序中加以设置,而在工作程序中,仅使用位操作指令即可。

另外,MAX7219上电时,译码方式、亮度调节、扫描位数、待机开关、显示检测等5个控制寄存器全部归零。

3.1.3与单片机的连接

MAX7219与51单片机的连接形式有2种:

一种是将MAX7219的3个输入端DIN,CLK和LOAD与51单片机的任意3个端口连接;一种则是直接与51单片机的串行接口相连。

在此次实验中,我们采用第一种连接方式,以下将只介绍第一种方式。

4、程序流程图

 

5、在课程设计中遇到的困难及解决办法

从设计到焊板子过程中遇到了很多问题,最惨的是第一块板子,用万用表测电路一切正常,可是数码光就是死活不亮,不亮不亮不亮!

查了两个下午电路也没差出哪里错误,估计是元器件的问题,十分郁闷,结果以做快的速度重新焊了一个板子,结果一切正常,明明是完全一样的电路,可是一个好用一个不好用,!

在上电复位后,我发现不论按什么键,数码管都不能显示数字,经检查后才发现没有对MAX7219进行初始化,然后编了MAX7219的初始化程序,经调用后问题得到解决。

在蜂鸣器模块中,开始发现在程序没问题的情况下出不来想要的结果,进行研究后才发现三极管在功率放大的同时也起到了非门的作用,将蜂鸣器初值置1后问题得到解决。

做为指示的发光二极管指示时不太亮,经测量电压后测得单片机输出的电压较低,加了三极管对其进行功率放大后问题得到解决。

我开始时编写的程序只能进行密码的输入和修改,而且报警功能也不完善,后来经过与同学讨论后,加了一管理员密码并对报警模块进行了完善。

总之,过程十分艰难,不但联系了电工技巧,编程经验,就是对中发电子市场也是越来越熟悉…绝对是一次全身心,大脑和身体的全面锻炼和发展!

 

附件

源程序清单:

ORG0000H

DINBITP3.0;定义变量

CLKBITP3.1

LOADBITP3.2

AJMPMAIN

ORG0030H

MAIN:

MOVSP,#70H

SETBP3.5

SETBP3.6

SETBP3.7

LCALLPROCESS

M_Z:

MOVR1,#40H

MOVR2,#30H

M_Z1:

MOV@R1,#00H

INCR1

DJNZR2,M_Z1

MOVR1,#60H

LCALLDISPLAY

MOV55H,#01H

MOV56H,#01H

MOV57H,#00H

MOV58H,#05H

M_START:

LCALLSCAN;调用扫描程序

LCALLDELAY

MOVA,R1

CJNEA,#0EH,M_NEXT1

AJMPM_Z

M_NEXT1:

CJNEA,#0BH,M_NEXT2

AJMPINPUT

M_NEXT2:

CJNEA,#0CH,M_START

AJMPMODIFY1

SJMP$

 

;;;;;;;;;;;显示模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;MAX7219初始化子程序

PROCESS:

MOVA,#0BH;A中存入操作代码--扫描位数设定

MOVB,#03H;B中存入操作数--4位

LCALLW_7219

MOVA,#09H;译码方式选择

MOVB,#0FFH;使用BCD译码器

LCALLW_7219

MOVA,#0AH;亮度调节

MOVB,#09H;从最小的1/32至最大的31/32之间进行16级调节(00H-0FH)

LCALLW_7219

MOVA,#0CH;待机开关

MOVB,#01H;显示器正常工作

LCALLW_7219

RET

;把操作代码和操作数传送给MAX7219

W_7219:

CLRLOAD

LCALLSD_7219

MOVA,B

LCALLSD_7219

SETBLOAD

RET

;将8位数据传入MAX7219

SD_7219:

MOVR6,#08H

C_SD:

NOP

CLRCLK

RLCA

MOVDIN,C

NOP

SETBCLK

DJNZR6,C_SD

RET

;MAX7219显示子程序

DISPLAY:

MOVR4,#04H

MOVA,@R1

MOV21H,R1

MOV20H,A

ADDA,R1

MOVR0,A

C_DISP:

MOVA,@R0

MOVB,A

MOVA,R4

LCALLW_7219

DECR0

DEC@R1

DJNZR4,C_DISP

MOVR1,21H

MOVA,20H

MOV@R1,A

RET

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

;;;;;;;;;;;;;;;;;;;扫描模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;扫描程序

SCAN:

MOVR3,#0F7H;扫描初始值

MOVR1,#00H;取码数值

SCAN1:

MOVA,R3;开始扫描

LCALLMOVP;将扫描值输出到P

LCALLMOVA;读入P判断是否有按下

MOVR4,A;存到R4,判断是否放开

SETBC;C=1

MOVR5,#04H;扫描列

L1:

RLCA;将按键值左移一位元

JNCKEYIN;若C=0,有按,执行KEYIN

GO:

INCR1;将指标值加1,继续扫描下一行

DJNZR5,L1;扫描四行

MOVA,R3;载入扫描值

SETBC;C=1

RRCA;扫描下一行

MOVR3,A;存回扫描值

JCSCAN1;C=1,尚未完成扫描

AJMPSCAN;结束键盘扫描,回到SCAN

KEYIN:

MOVR7,#10消除弹跳

L2:

MOVR6,#248

DJNZR6,$

DJNZR7,L2

LCALLMOVA;读入P

XRLA,R4

JNZGO

INCR1

CJNER1,#0AH,L3

MOVR1,#00H

L3:

NOP

RET

;数值传递

MOVA:

RRCA

MOVC,P1.4

RRCA

MOVC,P1.5

RRCA

MOVC,P1.6

RRCA

MOVC,P1.7

RRCA

MOVC,P1.3

RRCA

MOVC,P1.2

RRCA

MOVC,P1.1

RRCA

MOVC,P1.0

RRCA

RET

MOVP:

RRCA

MOVP1.4,C

RRCA

MOVP1.5,C

RRCA

MOVP1.6,C

RRCA

MOVP1.7,C

RRCA

MOVP1.3,C

RRCA

MOVP1.2,C

RRCA

MOVP1.1,C

RRCA

MOVP1.0,C

RRCA

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;延时函数;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY:

MOV40H,#20

DELAY1:

MOV41H,#100

DELAY2:

MOV42H,#100

DJNZ42H,$

DJNZ41H,DELAY2

DJNZ40H,DELAY1

RET

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

;;;;;;;;;;;;;;;;;;;功能模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;输入模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INPUT:

LCALLCONFIRM

LCALLCOMP1

LJMPM_START

 

CONFIRM:

MOV50H,#04H

MOV60H,#00H

MOVR0,#61H

LOOP1:

LCALLSCAN

LCALLDELAY

MOVA,R1

MOV@R0,A

INCR0

INC60H

MOVR1,#60H

MOV6EH,R0

LCALLDISPLAY

MOVR0,6EH

DJNZ50H,LOOP1

LOOP2:

LCALLSCAN

MOVA,R1

CJNEA,#0DH,LOOP2

MOV60H,#00H

MOVR1,#60H

LCALLDISPLAY

RET

COMP1:

MOVA,61H

CJNEA,55H,NO0

MOVA,62H

CJNEA,56H,NO0

MOVA,63H

CJNEA,57H,NO0

MOVA,64H

CJNEA,58H,NO0

LCALLGREEN

LJMPTURN1

NO0:

MOVA,61H

CJNEA,51H,NO1

MOVA,62H

CJNEA,52H,NO1

MOVA,63H

CJNEA,53H,NO1

MOVA,64H

CJNEA,54H,NO1

LCALLGREEN

LJMPTURN1

NO1:

LCALLRED

INC4FH

MOVA,4FH

CJNEA,#03H,TURN1

MOV4FH,#00H

LCALLRING

TURN1:

NOP

RET

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

 

;;;;;;;;;;;;;;;;;;;修改模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MODIFY1:

LCALLCONFIRM

LCALLCOMP3

MODIFY2:

LCALLCONFIRM

LCALLGREEN

MOV6AH,61H

MOV6BH,62H

MOV6CH,63H

MOV6DH,64H

LCALLCONFIRM

LCALLCOMP2

LJMPM_START

COMP2:

MOVA,61H

CJNEA,6AH,NO2

MOVA,62H

CJNEA,6BH,NO2

MOVA,63H

CJNEA,6CH,NO2

MOVA,64H

CJNEA,6DH,NO2

LCALLGREEN

MOV51H,61H

MOV52H,62H

MOV53H,63H

MOV54H,64H

LJMPTURN2

NO2:

LCALLRED

LJMPMODIFY2

TURN2:

NOP

RET

COMP3:

MOVA,61H

CJNEA,55H,NO4

MOVA,62H

CJNEA,56H,NO4

MOVA,63H

CJNEA,57H,NO4

MOVA,64H

CJNEA,58H,NO4

LCALLGREEN

LJMPTURN3

NO4:

MOVA,61H

CJNEA,51H,NO3

MOVA,62H

CJNEA,52H,NO3

MOVA,63H

CJNEA,53H,NO3

MOVA,64H

CJNEA,54H,NO3

LCALLGREEN

LJMPTURN3

NO3:

LCALLRED

INC5AH

MOVA,5AH

CJNEA,#03H,TURN4

LCALLRING

MOV5AH,#00H

TURN4:

LJMPM_START

TURN3:

NOP

RET

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

;;;;;;;;;;;;;;;;;;;绿灯模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GREEN:

CPLP3.5

LCALLDELAY

CPLP3.5

MOV4FH,#00H

RET

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

;;;;;;;;;;;;;;;;;;;红灯模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RED:

CPLP3.6

LCALLDELAY

CPLP3.6

RET

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

;;;;;;;;;;;;;;;;;;;报警模块;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RING:

CPLP3.6

CPLP3.7

MOV4AH,#200

SND1:

MOV4BH,#200

SND2:

MOV4CH,#250

DJNZ4CH,$

DJNZ4BH,SND2

DJNZ4AH,SND1

CPLP3.6

CPLP3.7

RET

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

END

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

当前位置:首页 > 工程科技 > 信息与通信

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

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