单片机课程设计电子密码锁设计Word下载.docx
《单片机课程设计电子密码锁设计Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子密码锁设计Word下载.docx(34页珍藏版)》请在冰豆网上搜索。
2.2硬件电路设计分析
本系统电路由键盘输入部分、密码存储部分、复位部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4×
4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存储部分选用内部存储器来完成。
其原理图如图2-2所示。
图2-2电子密码锁原理图
2.2.1时钟电路设计
时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的,如果单片机的时钟电路停止工作(晶振停振),那么单片机也就停止运行了。
当采用内部时钟时,连接方法如下图所示,在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法,如33PF。
如图2-3所示。
图2-3时钟电路
2.2.2复位电路设计
复位是单片机的初始化操作。
单片机启运运行时,都需要先复位,其作用是使CPU和系统中其它部件处于一个确定的初始状态,并从这个状态开始工作。
因而,复位是一个很重要的操作方式。
但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
该复位电路采用按键电平复位式复位电路。
当单片机已在运行当中时,按下复位键后松开,在复位引脚RET(9脚)脚持续出现24个振荡器脉冲周期(即2个机器周期)的高电平信号将使单片机复位。
也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
如图2-4所示。
图2-4复位电路
2.2.3矩阵键盘设计
为了加强密码的保密性,采用一个4×
4的矩阵式键盘能够任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,一般采用这种方法。
其原理图如图2-5所示。
图2-5矩阵键盘
每一行与每一列的交叉处不相同,而是经过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根列线,即可组成具有N×
M个按键的矩阵键盘。
在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就是要识别哪一个按键被按下。
对键的识别方法一般有两种:
一种是行扫描查询法;
另一种是速度较快的线反转法。
此系统中,我们采用线反转法。
首先辨别键盘中有无按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
具体方法是:
向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。
如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。
判断键盘中哪一个按键被按下一般是经过将列线逐列至低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;
如果不全为1,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。
按键的操作面板共计10个数字键和6个功能键,键盘侧面还有一个微型蜂鸣器。
键盘侧面还有一个蜂鸣器,每操作一次,它便发出声音,提示操作成功。
10个数字键用来输入密码,另外6个功能键分别是:
A查看键、B设置新密码键、C退格键、D返回键、E确认/退出键和F开启键。
其中退格键的功能是当输入密码错误的时候,清除前面已经输入的数据,重新输入。
确认键的功能是确认输入的密码。
开启键是切换到密码输入状态,输密码前需按该键才能开始输入密码。
按“F”键启动进入输入密码程序,按住“F”键不放3秒以上后进入输入密码状态。
在输入密码状态下,0-9数字键为有效键,有时间和次数限制功能:
只有三次输入密码机会,每次限制在10秒内完成,输入密码有误或每次输入密码超时,则被认为是密码输入错误。
当3次输入都错误时,程序将返回起始状态。
密码输入正确后,继电器吸合,表示锁被打开。
在密码输入正确的情况下,程序进入查看密码和修改密码状态,按“E”键退出查看密码状态。
按“B”键进入重新设置密码状态,在输入密码时,如发现输入有误,可按“C”删除后,重新输入,按“E”确认后,程序退出修改密码状态。
按“D”键或等待10秒后程序退出修改密码和查看密码状态,回到起始状态。
程序内定密码为:
1,送电开机时,只要输入内定密码便可开门,这样可预防停电后再送电时无密码可用。
当密码输入错误或密码输入时间超过规定的时间时,蜂鸣器报警。
键盘的功能如表2-1所示。
表2-1按键功能表
按键
键名
功能说明
0-9键
数字键
输入密码
A键
查看键
查看密码
B键
设置新密码键
设置新密码
C键
退格键
退格删除
D键
返回键
返回到开始界面
E键
F键
确认/退出键
开启键
确认/退出
开启密码输入
2.2.4报警控制电路
该电路采用单频音报警电路,实现单频音报警的接口电路比较简单,其发音元件一般可采用压电蜂鸣器,当在蜂鸣器两引脚上加3~15V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。
压电式蜂鸣器结构简单、耗电少,更适于在单片机系统中应用。
压电式蜂鸣器,约需10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动,P.3.1接三极管基极输入端,当P3.7输出高电平“1”时,三极管导通,蜂鸣器的通电而发音,当P3.1输出低电平“0”时,三极管截止,蜂鸣器停止发音。
其原理图如图2-6所示。
图2-6报警控制电路
2.2.5液晶显示电路
本设计的显示电路是为了给使用者以提示而设置的为了达到界面友好的目的,显示部分由液晶显示器LCD1602取代普通的数码管完成。
开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD显示“IUPUTRIGHT”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“IUPUTERROR”,P3.0输出的是高电平,电子密码锁不能打开。
经过LCD显示屏,能够清楚地判断出密码锁所处的状态。
电路图如图2-7所示。
图2-7显示电路
2.3系统软件设计
系统的软件设计采用汇编语言编码。
设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件(需事先在KeilC51中设置)。
如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。
当然也能够直接在Keil中编码。
生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。
系统的主程序如图2-8所示。
由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。
Y
N
图2-8系统主流程图
2.3.2初始化及按盘识别程序
如图2-9所示,系统的初始化包括堆栈起始地址的设定,定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化等操作。
系统初始化并读取密码完成后,液晶显示“PASSWORDCONTROL”,提示用户能够输入密码。
此时程序即不断测试按键,检查是否有按键被按下。
如果有,则进行按键识别;
如果没有按键按下,或者按下的按键没有被识别,R3赋值0FFH,并跳转至按键测试。
实际程序运行时,绝大部分时间都在测试按键,等待用户输入。
图2-9初始化及按键识别流程图
2.3.3开锁程序
首先LCD初始化,输入密码,密码正确则使开锁电路动作,引脚P2.3得到低电平使发光二极管灯亮,开锁。
开锁程序流程图如图2-10所示。
图2-10开锁流程图
2.3.4修改密码程序
如图2-11所示,能够看出,改密键的处理流程跟开锁键类似,都需检查密码是否正确,错误的话,提示重新输入,只有输入密码正确才能够进行改密。
然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD都会显示信息。
图2-11修改密码流程图
2.3.5LCD显示程序
液晶显示子程序在每次更新显示内容时都会被调用,其流程如图2-12所示。
图2-12LCD显示子程序流程图
每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为01H,即将P0口赋值01H,然后写入指令寄存器IR。
LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。
每次送一个字符的ASCII码入P0口,然后写入数据寄存器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出来。
由于显示字符串的长度不尽相同,约定每串字符以00H结尾;
程序检测到字符码为00H时,即停止写入,返回。
LCD显示的内容在下次更新前会一直保持。
2.4仿真测试结果
开机后,LCD1602显示如图2-13所示,等待按键输入。
图2-13开机界面
输入密码分两个过程:
首先必须开启密码输入功能才能输入密码,按住“F”键3秒以上才能启动进入输入密码程序,进入输入密码状态,LCD1602显示如图2-14所示:
图2-14输入界面
此时使用矩阵键盘输入密码,在输入密码状态下,0-9为有效数字键。
本系统有时间、次数限制功能,不给别人试探机会:
三次输入密码机会,每次限制在10秒内完成,输入过程如图2-15所示:
图2-15输入过程界面
当密码输入正确后,LCD显示界面如图2-16所示:
图2-16输入正确的界面
在输入密码正确的基础上能够在密码输入正确的情况下,程序进入查看密码和修改密码状态。
按“B”键进入重新设置状态,在输入新密码时,能够按“C”键删除修改,按“E”确认后,程序退出修改密码状态。
界面如图2-17所示:
图2-17修改密码的界面
按“A”键进入查看密码状态,LCD显示界面如图2-18所示:
图2-18查看密码的界面
在密码输入错误或是超过输入时间时,当错误次数为3次后,LCD回到初始界面,并锁定。
如果错误则LCD显示的界面如图2-17所示:
图2-17输入错误的界面
3总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,
在生活中能够说得是无处不在。
因此作为21世纪的大学来说掌握单片机的开发技术是十分重要的。
在着手本次课程设计时,经过查阅网络的资料,再加上请教同学和老师,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题的要求。
本次课程设计所设计的系统简单只能实现一些简单的功能,还有很多不足之处,自己所学的知识和能力有限。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,能够说得是苦多于甜,可是能够学到很多很多的的东西,同时不但能够巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
经过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,能够说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,特别是外部中断,定时/计数器和串行口,掌握的不好,应用不熟练。
经过这次课程设计之后,一定把以前所学过的知识重新温故。
电子锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,经过这次课设自己也学到了很多东西,在这一周的时间里,感谢魏明哲老师的指导和同学们的帮助,终于游逆而解。
参考文献
[1]何立民主编,单片机中级教程,北京航空航天大学出版社。
[2]丁元杰主编,单片机原理与应用,机械工业出版社。
[3]孙育才主编,MCS-51系列单片微型计算机及其应用,东南大学出版社。
附录
BEEPBITP3.1
RELAYBITP3.6
SEC10BIT20H.1
SEC3BIT20H.2
PASS_OKBIT20H.3
PASS_OLDEQU30H
PASS_NEWEQU37H
PASS_DISEQU40H;
密码显存单元
COUNTEQU47H;
50ms计数单元
SECEQU48H;
秒单元
POSEQU49H
BUSYBITP0.7
LCD_RSBITP2.0;
LCD控制管脚定义
LCD_RWBITP2.1
LCD_ENBITP2.2
DATAPORTEQUP0;
定义LCD的数据端口
LCD_XEQU29H
TIMESEQU2AH
BUSY_CHECKBIT20H.0
ORG0000H
AJMPMAIN
ORG000BH
LJMPTIMER0
ORG0050H
MAIN:
MOVSP,#60H;
设置堆栈指针
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVTMOD,#01H;
工作于方式1
MOVTH0,#4CH;
50ms定时常数
MOVTL0,#00H
SETBET0
SETBEA
MOVPASS_OLD,#01H;
内定密码值
MOVPASS_OLD+1,#01H
MOVPASS_OLD+2,#01H
MOVPASS_OLD+3,#01H
MOVPASS_OLD+4,#01H
MOVPASS_OLD+5,#01H
ACALLLCD_INIT;
LCD初始化
MAIN1:
CLRTR0
CLRSEC3
CLRSEC10
CLRPASS_OK
MOVCOUNT,#00H
MOVSEC,#00H
SETBRELAY;
继电器释放
ACALLMENU1
ACALLSTART_IN
MOVR4,#03H;
3次输入密码机会
MAIN2:
ACALLPASS_IN
ACALLPASS_COMP
MOVR5,#100;
延时1s
ACALLDELAY
JBPASS_OK,MAIN3
DJNZR4,MAIN2
AJMPMAIN1
MAIN3:
ACALLPASS_LOOK
ACALLCHANGE_PASS
JBSEC10,MAIN4
ACALLKEY_SCAN
CJNEA,#0DH,MAIN3;
判是否"
D"
按下?
MAIN4:
ACALLBEEP_BL
AJMPMAIN1
;
菜单1显示子程序(PASSWORDCONTROL)
(LEARNBYHEART)
MENU1:
MOVB,#00H
MOVDPTR,#INFO1;
指针指到信息1
ACALLW_STRING1
MOVDPTR,#INFO4;
指针指到信息4
ACALLW_STRING2
RET
菜单2显示子程序(INPUTPASSWORD)
(PASSWORD------)
MENU2:
MOVDPTR,#INFO3;
指针指到信息3
MOVDPTR,#INFO2;
指针指到信息2
菜单3显示子程序(LOOKPASSWORD)
MENU3:
MOVDPTR,#INFO7;
指针指到信息7
菜单4显示子程序(CHANGEPASSWORD)
MENU4:
MOVDPTR,#INFO8;
信息字符串表
INFO1:
DB"
PASSWORDCONTROL"
0
INFO2:
PASSWORD------"
INFO3:
INPUTPASSWORD"
INFO4:
LEARNBYHEART"
INFO5:
IUPUTRIGHT"
INFO6:
IUPUTERROR"
INFO7:
LOOKPASSWORD"
INFO8:
RESETPASSWORD"
矩阵键盘键值查找程序
键值存入R3
KEY_SCAN:
MOVP1,#0F0H;
置列线为0,行线为1
NOP
MOVA,P1;
读入P1口状态
ANLA,#0F0H;
保留高4位
MOVB,A;
保存数据
MOVP1,#0FH;
置列线为1,行线为0
ANLA,#0FH;
保留低4位
ORLA,B;
高四位与低四位重新组合
CJNEA,#0FFH,KEY_IN1;
0FFH为末按键
AJMPKEY_END
KEY_IN1:
保存键值
MOVDPTR,#KEYTABLE;
置键编码表首址
MOVR3,#0FFH;
KEY_IN2:
INCR3;
查表次数加1
MOVA,R3
MOVCA,@A+DPTR;
取出键码
CJNEA,B,KEY_IN3;
比较
MOVA,R3;
找到,取次数值
KEY_IN3:
CJNEA,#00H,KEY_IN2;
继续查;
00H为结束码
KEY_END:
键编码表
KEYTABLE:
DB0EEH,0EDH,0EBH,0E7H,0DEH
DB0DDH,0DBH,0D7H,0BEH,0BDH
DB0BBH,0B7H,07EH,07DH,07BH
DB077H,00H;
密码显示子程序
PASS_PLAY:
MOVR0,#PASS_OLD;
存放数据首地址
MOVR2,#06H;
显示6组数据
MOVLCD_X,#09H;
第9列
ACALLSET_X2;
第二行
P_PLAY:
MOVA,@R0;
取显示数据
ADDA,#30H;
转换为ASCII码
ACALLWDATA;
写数据,显示
INCR0;
修改存放数据地址
DJNZR2,P_PLAY
启动输入子程序
按F键大于3秒,方可退出此程序
START_IN:
CLRSEC3;
清3s标志位
MOVCOUNT,#00H;
清中断计数单元
S_IN1:
ACALLKEY_SCAN
CJNEA,#0FH,S_IN1