单片机课程设计密码锁.docx
《单片机课程设计密码锁.docx》由会员分享,可在线阅读,更多相关《单片机课程设计密码锁.docx(17页珍藏版)》请在冰点文库上搜索。
单片机课程设计密码锁
单片机原理及系统课程设计
专业:
自动化
班级:
姓名:
学号:
指导教师:
评语:
平时(40)
修改(30)
报告(30)
总成绩
2012年7月1日
1引言
电子密码锁是现代生活中常用的加密工具,它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。
由于电子密码锁的保密性高、使用灵活性好、安全系数高等特点,受到了广大用户的亲睐,具有报警功能的电子密码锁代替弹子锁和密码量少的机械锁是必然趋势。
本课程设计是基于AT89C51为核心的单片机控制的电子密码锁设计,能完成开锁、修改密码、密码错误报警并亮灯显示、LED显示密码等基本的密码锁功能,并通过Protues软件成功地进行了仿真。
2设计方案及原理
本文先通过仿真调试器keiluVision4软件将编写的汇编程序调试生成一个.hex文件,然后在仿真软件proteus上进行仿真。
输入密码用一个四行三列的矩阵键盘,共有12个按键,包括数字键0到9和两个功能键,即密码输入键“ENTER”和清除键“CLC”。
系统复位键也用一个按键控制,但不在4*3矩阵键盘中。
七段LED数码管显示输入密码,用74LS245驱动数码管发光显示数码,用一个黄色发光二极管代替开锁的电路,发光表示开锁。
打开电源后,显示器显示“HELLO”,设置初始密码为“123456”,只要输入的密码和它匹配,便开锁。
按“CLC”键,清除当前输入的密码。
输入6位密码后,按“ENTER”键,单片机会扫描矩阵键盘,计算出键值,与初始密码作比较,若输入正确,黄色LED灯亮,开锁;若输入密码错误,显示器显示闪烁字样“ERROR”、蜂鸣器鸣响、红色LED灯闪烁。
在keiluVision4环境下,输入程序源代码,按照系统初始化程序模块、键盘键值的读取模块、LED显示程序模块,密码比较程序和报警程序模块检查输入正确与否,调试,生成一个.hex文件,然后打开仿真软件proteus,将需要的元器件布置在合适的位置,连接各元件,载入.hex文件,点击仿真开始按键,模拟密码锁的工作过程。
3硬件设计
本设计基于AT89C51为核心的单片机控制的电子密码锁设计,本设计能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。
设计的电路框图如图1:
图1硬件设计模块框图
3.1电路设计
(1)主程序模块:
主要完成程序初始化、置中间向量、扫描有无键按下、判断密码输入是否正确,检查复位按键是否按下等,主程序的流程图如图2。
(2)密码比较及报警子程序模块:
该模块的主要功能是将输入的密码与初始密码做比较,若输入的密码正确,则模拟开锁的黄色LED灯亮,若操作错误或密码输入错误,红色LED灯闪烁并且蜂鸣器鸣响,其流程图如图3。
图2主程序流程图
图3密码比较及报警子程序流程图
3.2AT89C51功能及引脚介绍
AT89C51单片机是把中央处理器CPU、随即存储器RAM、只读存储器ROM、定时/计数器、I/O接口电路等主要计算机部件集成在一块电路芯片上的单片微型计算机,本设计中单片机应用的主要功能就是控制LED显示器的显示、报警电路以及开锁电路,还用作键盘的扫描等。
P0:
本设计中的P0口主要是控制LED数码管的段选,从P0.0到P0.7依次控制abcdefgh段,当P0口给出不同的高低电平时数码管相应的段被点亮,由于P0口作输出口时,需接上拉电阻,所以在仿真时接有8位的上拉电阻,以使LED显示器有足够的亮度。
P1:
P1口是一个内部提供上拉电阻的8位双向I/O口,在本设计中用P1.0控制开锁电路,用P1.7控制报警电路。
当P1.0输出低电平时,开锁电路被接通;当P1.7输出低电平时报警电路被接通。
P2:
本设计中的P2口控制LED数码管的位选,在仿真时显示器是一个8位的LED数码管,从右至左依次是第一位到第八位,当P2口给出不同的高低电平时,八位的LED数码管将被选择性的点亮。
由于P2口内部提供上拉电阻,因此它作为输出口使用时,无需再外接上拉电阻,直接接在显示器的位选线上。
P3:
P3口用于键盘的扫描,P3.0至P3.3口分别接键盘的行线,P3.4至P3.6接键盘的列线,当没有键按下时,六个口皆为高电平,若行线状态中有低电平,表明有键按下。
VCC:
+5V电源
VSS:
接地
RST:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
XTAL1和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
4软件设计
在proteus环境下,根据硬件电路中的各个模块,把需要的器件放置在合适的位置,并修改参数,连线,点击仿真按键进行仿真。
若输入的密码正确时则黄色LED灯亮,持续亮一段时间后返回初始界面,显示器显示“HELLO”,仿真结果如图4。
图4密码输入正确仿真图
若输入的密码错误,或者操作错误时红色LED闪烁,同时蜂鸣器鸣响报警,显示界面闪烁显示“ERROR”,仿真结果如图5
图5密码输入错误仿真图
5总结
这次课程设计提高了我综合运用所学知识的能力,通过发现、提出、分析问题最终解决实际问题。
随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,作为当代大学生,学好单片机对我们以后的生活有很大的帮助。
从选题到决定,从理论到实践,在这期间内,可以说得是苦多于甜,但是从中学到很多很多的的东西。
首先是提升了我严谨的治学态度,同时巩固了以前所学的知识,而且在模拟仿真以及程序的调试过程中,学到了很多在书本上所没有学到的东西;其次,这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的融会贯通,同时提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到很多问题,比如在汇编语言调试时困难重重,在解读程序方面也费了很多功夫,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,使我认识到了温故而知新的道理。
参考文献
[1]李华,王思明等.单片机原理及及应用[M].兰州:
兰州大学出版社,2001.
[2]张洪润.单片机应用技术教程[M].北京:
清华大学出版社,1997.
[3]黄志伟.全国大学生电子设计竞赛实训[M].北京:
北京航空航天大学出版社,2005.
[4]周润景,丁莉等.单片机分析设计与制作[M].南京:
机械工业出版社,2008.
附录
LED_BIT_1EQU30H
LED_BIT_2EQU31H
LED_BIT_3EQU32H
LED_BIT_4EQU33H
LED_BIT_5EQU34H
LED_BIT_6EQU35H
LED_BIT_7EQU36H
LED_BIT_8EQU37H
;以下6个字节存放初始密码
WORD_1EQU38H
WORD_2EQU39H
WORD_3EQU3AH
WORD_4EQU3BH
WORD_5EQU3CH
WORD_6EQU3DH
;以下6个字节存放用户输入的6位密码
KEY_1EQU3EH
KEY_2EQU3FH
KEY_3EQU40H
KEY_4EQU41H
KEY_5EQU42H
KEY_6EQU43H
;******************************************************
CNT_AEQU44H
CNT_BEQU45H
KEY_CNTEQU46H;已输出的密码位数
LINEEQU47H;按键行号
ROWEQU48H;按键列号
VALEQU49H;键值
;******************************************************
;以下为初始化程序,包括数据存储空间初始化,设置初始密码
ORG00H
SJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVCNT_A,#00H;程序初始化
MOVCNT_B,#00H
MOVKEY_CNT,#00H
MOVLINE,#00H
MOVROW,#00H
MOVVAL,#00H
SETBP1.0
MOVLED_BIT_1,#80H;段码存储区清0
MOVLED_BIT_2,#80H
MOVLED_BIT_3,#80H
MOVLED_BIT_4,#3FH
MOVLED_BIT_5,#38H
MOVLED_BIT_6,#38H
MOVLED_BIT_7,#79H
MOVLED_BIT_8,#76H
MOVKEY_1,#00H;输入密码存储区清0
MOVKEY_2,#00H
MOVKEY_3,#00H
MOVKEY_4,#00H
MOVKEY_5,#00H
MOVKEY_6,#00H
MOVWORD_1,#6;设置初始密码为"123456"
MOVWORD_2,#5
MOVWORD_3,#4
MOVWORD_4,#3
MOVWORD_5,#2
MOVWORD_6,#1
MOVTMOD,#01H
MOVTH0,#(65536-1200)/256
MOVTL0,#(65536-1200)/256
MOVIE,#82H
A0:
LCALLDISP
;***********************************************************
;以下为键盘扫描程序,计算键值并存入VAL
LSCAN:
MOVP3,#0F0H;扫描行码
L1:
JNBP3.0,L2
LCALLDLY_S
JNBP3.0,L2
MOVLINE,#00H
LJMPRSCAN
L2:
JNBP3.1,L3
LCALLDLY_S
JNBP3.1,L3
MOVLINE,#01H
LJMPRSCAN
L3:
JNBP3.2,L4
LCALLDLY_S
JNBP3.2,L4
MOVLINE,#02H
LJMPRSCAN
L4:
JNBP3.3,A0
LCALLDLY_S
JNBP3.3,A0
MOVLINE,#03H
RSCAN:
MOVP3,#0FH;扫描列码
C1:
JNBP3.4,C2
MOVROW,#00H
LJMPCALCU
C2:
JNBP3.5,C3
MOVROW,#01H
LJMPCALCU
C3:
JNBP3.6,C1
MOVROW,#02H
CALCU:
MOVA,LINE;计算键值
MOVB,#03H
MULAB
ADDA,ROW
MOVVAL,A
;**************************************************
;以下为按键处理程序,对不同的按键作出响应
CJNEA,#0AH,J1;是否为"CLR"键
MOVR1,KEY_CNT
CJNER1,#00H,J2
LCALLALARM_1
LJMPSTART
J2:
LCALLSHIFTR
DECKEY_CNT
W00:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W01
LJMPA0
W01:
MOVA,P3
CJNEA,#0F0H,W02
LJMPA0
W02:
SJMPW00
J1:
MOVA,VAL
CJNEA,#0BH,J3;判断是否为"ENTER"键
MOVR1,KEY_CNT
CJNER1,#06H,J4
MOVA,WORD_1;比较密码
CJNEA,3EH,J5
MOVA,WORD_2
CJNEA,3FH,J5
MOVA,WORD_3
CJNEA,40H,J5
MOVA,WORD_4
CJNEA,41H,J5
MOVA,WORD_5
CJNEA,42H,J5
MOVA,WORD_6
CJNEA,43H,J5
CLRP1.0
LCALLDLY_L
LJMPFINI
J5:
LCALLALARM_2
LJMPSTART
J4:
LCALLALARM_1
LJMPSTART
J3:
INCKEY_CNT;按下数字键
MOVA,KEY_CNT
CJNEA,#07H,K1
LCALLALARM_1
W10:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W11
LJMPSTART
W11:
MOVA,P3
CJNEA,#0F0H,W12
LJMPSTART
W12:
SJMPW10
LJMPSTART
LJMPSTART
K1:
LCALLSHIFTL
W20:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W21
LJMPA0
W21:
MOVA,P3
CJNEA,#0F0H,W22
LJMPA0
W22:
SJMPW20
LJMPA0
ALARM_1:
SETBTR0;操作错误报警
JBTR0,$
RET
ALARM_2:
SETBTR0;密码错误报警
JBTR0,$
LCALLDLY_L
RET
;**************************************************
;定时器中断服务程序,用于声音报警
INT_T0:
CPLP1.7
MOVLED_BIT_1,#00H
MOVLED_BIT_2,#72H
MOVLED_BIT_3,#3FH
MOVLED_BIT_4,#72H
MOVLED_BIT_5,#72H
MOVLED_BIT_6,#79H
MOVLED_BIT_7,#00H
MOVLED_BIT_8,#00H
MOVTH0,#(65536-1200)/256
MOVTL0,#(65536-1200)/256
INCCNT_A
MOVR1,CNT_A
CJNER1,#30,RETUNE
MOVCNT_A,#00H
INCCNT_B
MOVR1,CNT_B
CJNER1,#20,RETUNE
MOVCNT_A,#00H
MOVCNT_B,#00H
CLRTR0
LCALLDISP
SETBTR0
LCALLDISP
CLRTR0
LCALLDISP
SETBTR0
LCALLDISP
RETUNE:
RETI
;**************************************************
;段码,输入密码左移子程序
SHIFTL:
MOVLED_BIT_6,LED_BIT_5
MOVLED_BIT_5,LED_BIT_4
MOVLED_BIT_4,LED_BIT_3
MOVLED_BIT_3,LED_BIT_2
MOVLED_BIT_2,LED_BIT_1
MOVLED_BIT_1,#40H
MOVKEY_6,KEY_5
MOVKEY_5,KEY_4
MOVKEY_4,KEY_3
MOVKEY_3,KEY_2
MOVKEY_2,KEY_1
MOVKEY_1,VAL
RET
;**************************************************
;段码,输入密码右移子程序
SHIFTR:
MOVLED_BIT_1,LED_BIT_2
MOVLED_BIT_2,LED_BIT_3
MOVLED_BIT_3,LED_BIT_4
MOVLED_BIT_4,LED_BIT_5
MOVLED_BIT_5,LED_BIT_6
MOVLED_BIT_6,#00H
MOVKEY_1,KEY_2
MOVKEY_2,KEY_3
MOVKEY_3,KEY_4
MOVKEY_4,KEY_5
MOVKEY_5,KEY_6
MOVKEY_6,#00H
RET
;**************************************************
;以下为数码显示子程序
DISP:
CLRP2.7
MOVP0,LED_BIT_8
LCALLDLY_S
SETBP2.7
CLRP2.6
MOVP0,LED_BIT_7
LCALLDLY_S
SETBP2.6
CLRP2.5
MOVP0,LED_BIT_6
LCALLDLY_S
SETBP2.5
CLRP2.4
MOVP0,LED_BIT_5
LCALLDLY_S
SETBP2.4
CLRP2.3
MOVP0,LED_BIT_4
LCALLDLY_S
SETBP2.3
CLRP2.2
MOVP0,LED_BIT_3
LCALLDLY_S
SETBP2.2
CLRP2.1
MOVP0,LED_BIT_2
LCALLDLY_S
SETBP2.1
CLRP2.0
MOVP0,LED_BIT_1
LCALLDLY_S
SETBP2.0
RET
;**********************************************
DLY_S:
MOVR6,#10
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
DLY_L:
MOVR5,#100
D2:
MOVR6,#100
D3:
MOVR7,#248
DJNZR7,$
DJNZR6,D3
DJNZR5,D2
RET
FINI:
NOP
END