单片机课程设计邢睿.docx
- 文档编号:6286057
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:19
- 大小:31.34KB
单片机课程设计邢睿.docx
《单片机课程设计邢睿.docx》由会员分享,可在线阅读,更多相关《单片机课程设计邢睿.docx(19页珍藏版)》请在冰豆网上搜索。
单片机课程设计邢睿
题目:
基于51单片机的四位密码锁设计
专业:
车辆工程
班级:
机093-2
姓名:
王本江、王登志、
王海亮、王晓辉、吴强
指导老师:
姜风国
答辩日期:
2012年6月10日
第1章绪论-------------------------------3
第2章课程设计分析------------------3
第3章硬件电路设计----------------------4
3.1单片机最小系统------------------------------------------4
3.2LED显示电路设计---------------------------------------5
3.3键盘电路设计-------------------------------------------6
第4章系统软件设计---------------------------7
4.1软件总体设计思路-------------------------------------------7
4.2各子程序的设计-----------------------------------------7
第5章参考文献----------------------------------15
第6章心得体会---------------------------11
附录-------------------------------------12
附录A源程序清单--------------------------------------------17
附录B硬件原理图--------------------------------------------23
一、绪论
电子密码锁是一种通过单片机来控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
二、课程设计分析
1、任务要求:
1、密码锁由4X4键盘和4位数码管组成。
2、当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示。
若密码不正确,则可以从新输入密码。
如连续三次输入错误,则禁止输入。
2、总体开发计划如下:
通过讨论,本课程设计可划分为硬件部分与软件部分,硬件部分主要分为以下几个模块:
系统主控制模块(最小系统板),显示模块以及按键模块,这些模块都是通过单片机来控制的。
硬件电路通过PROTEUS绘制,软件部分主要是用KEIL编写程序,实现各个模块的功能,最后将KEIL编写的程序通过PROTEUS仿真。
3、系统总原理框图如下:
单片机控制方案
4、设计要实现以下的功能:
①打开电源后,显示器显示初始状态;
②设置一个初始密码,通电时只要输入此密码便可开锁;
③输入密码用矩形键盘,包括数字键和功能键:
④设置“输入”键,在每次要输入密码要先按“输入”键,否则无法输入密码,若密码与设定密码相同,提示正确信息,否则提示错误信息,连续三次输入密码错误后,锁住键盘一小时后才可以再次输入密码;
⑤设置“确定”键,用于输完密码锁时识别密码,再次按下确认键二极管闪一秒用来表示开锁;
⑥设置“取消”键,按下时返回最初的状态即点输入按键前的状态;
⑥设置“重填”键,按下时,可以重新输入密码;
⑦LED数码管显示是否输入密码及已输入的密码的位数;
三、系统硬件电路图
1、单片机最小系统
主控芯片以及晶振电路,采用12MHZ晶振,一个机器周期为1us
复位电路
本设计中,采用P0口作为LED数据输入端,P2口作为扫描端,P1外接4x4键盘。
2、数码管显示电路
本设计中采用动态显示,数码管显示电路采用了1片74LS245芯片和0.1k限流电阻接P0口作为数据输入端,PNP三极管加限流电阻接P2作为扫描端。
74LS245引脚图以及功能表:
LED数码管选用7SEG-MPX4-CA-BLUE的共阳极四位数码管,引脚图如下:
3、4x4键盘的设计
采用4x4矩阵式键盘,矩阵式键盘又称为行列式键盘,是将I/O口线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,这种设计减少键盘与单片机I/O口接线的数目。
只需要N个行线和M个列线就可以实现N*M个键的操作。
与P1口相连接。
外接5v电源和5.1k的上拉电阻,保证键盘稳定运行。
软件上采用100ms延时去抖。
四、系统的软件设计
1、软件设计思路
电子密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后识别密码的对与错,并做出相应的处理。
密码的设定,原始密码的存放地址为31H—34H,修改后的密码存放地址为41H—43H。
通电时,让数码管显示4个“—”,每次要输入密码要先进入输入状态,初始的输入状态无显示,否则无法输入密码。
还未输完4位密码时点确定、输入键没反应,如果按下取消键跳回初始状态,按下重填键返回输入初始状态,输满4位,点确定,立即识别密码。
密码正确显示4个“P”,再次按下确认键,外界的发光二极管导通闪烁1s表示开箱,然后跳回初始状态。
密码不正确时,显示4个“E”,后跳回初始状态,连续三次输入密码错误后,系统锁定,等待1h后才可在此输入密码,提高了系统的安全可靠性。
2、初始密码以及功能按键的定义:
MM1DATA31H
MM2DATA32H
MM3DATA33H
MM4DATA34H
XEQU00H
YEQU00H
WEQU00H
ZEQU00H
MOVMM1,#X
MOVMM2,#Y
MOVMM3,#W
MOVMM4,#Z;设定初始密码为“0000”
MOVR7,#03H;设定允许连续输入错误的次数
MOV35H,#0AH;输入键
MOV36H,#0BH;确认键
MOV37H,#0CH;取消键
MOV38H,#0DH;返回键
MOV39H,#0EH;无效键
MOV3AH,#0FH;无效键
3、矩阵键盘的扫描
阵式键盘又称为行列式键盘,是将I/O口线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,如图所示。
这种设计减少键盘与单片机I/O口接线的数目。
只需要N个行线和M个列线就可以实现N*M个键的操作。
行扫描法识别的原理
1)先使输出口输出FEH(首列扫描字),即使第0列为0,然后读入行状态判断行线是否有低电平;如果没有低电平,再使输出口输出FDH(第二列扫描字)。
以此类推,当行线中有状态为低电平时,则找到闭合键。
根据此时0电平所在的行号和列号得出闭合键的键号值,期计算公式为:
闭合键的键号值=行首键号+列号
2)判断闭合键是否释放
键闭合一次仅进行一次的键功能操作。
等待按键释放后去除抖动,再将键值送入累加器A中,然后执行键功能操作
具体程序如下:
LINEDATA47H;按键行号
ROWDATA48H;按键列号
;以下为键盘扫描程序,计算键值并存入A
KEY:
MOVP1,#0F0H;扫描行码
LIN1:
JNBP1.0,LIN2;该行无键按下,扫描下一行
LCALLDELAY100ms
JNBP1.0,LIN2
MOVLINE,#00H;存行号
LJMPRSCAN;扫描列,求列值
LIN2:
JNBP1.1,LIN3
LCALLDELAY100ms
JNBP1.1,LIN3
MOVLINE,#01H;存行号
LJMPRSCAN
LIN3:
JNBP1.2,LIN4
LCALLDELAY100ms
JNBP1.2,LIN4
MOVLINE,#02H;存行号
LJMPRSCAN
LIN4:
JNBP1.3,LIN1
LCALLDELAY100ms
JNBP1.3,LIN1
MOVLINE,#03H;存行号
RSCAN:
MOVP1,#0FH;扫描列码
C1:
JNBP1.4,C2
MOVROW,#00H;存列号
LJMPCALCU
C2:
JNBP1.5,C3
MOVROW,#01H;存列号
LJMPCALCU
C3:
JNBP1.6,C4
MOVROW,#02H;存列号
LJMPCALCU
C4:
JNBP1.7,C1
MOVROW,#03H
NOP
NOP
CALCU:
;计算键值
MOVA,LINE
MOVB,#04H;行值乘4+列值=键值
MULAB
ADDA,ROW
CALLDELAY100MS
RET
4、LED数码管显示
设计的是4位的密码锁,所以数码管选用7SEG-MPX4-CA-BLUE(共阳)。
⑴设置密码锁初的始状态为“————”如下图
⑵在每次要输入密码要先按“输入”键,否则无法输入密码,按下“输入”键时,不显示,则可以输入密码,如下图
通过以下程序实现:
START:
MOVP0,#0BFH;没有输入时显示"-"
MOVP2,#0F0H;4个非门都导通
CALLDELAY100MS
CALLKEY;判断是否按下输入密码键,没有按下返回主程序
CJNEA,35H,START
MAIN:
MOVP0,#0FFH;没有输入时没有显示
MOVP2,#0F0H;4个非门都导通
CALLDELAY100MS
JMPFIRST
⑶输入密码时,如果输入的是功能键,没反应,若输入的是数字键时,输入1位、2位、3位、4位密码时(不管正确与否)分别显示如下图:
通过以下程序实现:
;***********数据录入阶段*********
FIRST:
CALLKEY
CJNEA,35H,Q11;判断是否按下输入,按下没反应(继续扫描这位密码)
JMPFIRST
Q11:
CJNEA,36H,Q12;判断是否按下确定,按下没反应(继续扫描这位密码)
JMPFIRST
Q12:
CJNEA,37H,Q13;判断是否按下取消,按下返回START
JMPSTART
Q13:
CJNEA,38H,Q14;判断是否按下重填,按下返回MAIN,重新输入密码
JMPMAIN
Q14:
CJNEA,39H,Q15;判断是否按下无效键,按下没反应(继续扫描这位密码)
JMPFIRST
Q15:
CJNEA,3AH,FIRST1;判断是否按无效键,按下没反应(继续扫描这位密码)
JMPFIRST
FIRST1:
MOV41H,A;输入的第一位密码存41H
MOVP0,#00H;输入一位时,显示"8."
MOVP2,#0FEH
CALLDELAY100MS
SECOND:
CALLKEY
CJNEA,35H,Q21
JMPSECOND
Q21:
CJNEA,36H,Q22
JMPSECOND
Q22:
CJNEA,37H,Q23
JMPSTART
Q23:
CJNEA,38H,Q24
JMPMAIN
Q24:
CJNEA,39H,Q25
JMPSECOND
Q25:
CJNEA,3AH,SECOND1
JMPSECOND
SECOND1:
MOV42H,A;第二位密码存于42H
MOVP0,#00H
MOVP2,#0FCH;显示2个"8."
CALLDELAY100MS
THIRD:
CALLKEY
CJNEA,35H,Q31
JMPTHIRD
Q31:
CJNEA,36H,Q32
JMPTHIRD
Q32:
CJNEA,37H,Q33
JMPSTART
Q33:
CJNEA,38H,Q34
JMPMAIN
Q34:
CJNEA,39H,Q35
JMPTHIRD
Q35:
CJNEA,3AH,THIRD1
JMPTHIRD
THIRD1:
MOV43H,A;第三位密码存于43H
MOVP0,#00H
MOVP2,#0F8H;显示3个"8."
CALLDELAY100MS
FOURTH:
CALLKEY
CJNEA,35H,Q41
JMPFOURTH
Q41:
CJNEA,36H,Q42
JMPFOURTH
Q42:
CJNEA,37H,Q43
JMPSTART
Q43:
CJNEA,38H,Q44
JMPMAIN
Q44:
CJNEA,39H,Q45
JMPFOURTH
Q45:
CJNEA,3AH,FOURTH1
JMPFOURTH
FOURTH1:
MOV44H,A;第四位密码存于44H
MOVP0,#00H
MOVP2,#0F0H;显示4个"8."
CALLDELAY100MS
;********以上为输入四位密码,然后继续扫描按键********
FIFTH:
CALLKEY
Q51:
CJNEA,35H,Q52;判断是否按下输入,按下没反应(继续扫描这位密码)
JMPFIFTH
Q52:
CJNEA,37H,Q53;判断是否按下取消
JMPSTART
Q53:
CJNEA,38H,Q54;判断是否按下重填
JMPMAIN
Q54:
CJNEA,39H,Q55;判断是否按下无效键
JMPFIFTH
Q55:
CJNEA,3AH,Q56;判断是否按下无效键
JMPFIFTH
Q56:
CJNEA,36H,FIFTH;判断是否按下确定
JMPPR
⑷密码验证阶段以及显示
PR:
MOVA,41H
CJNEA,MM1,ERR
MOVA,42H
CJNEA,MM2,ERR
MOVA,43H
CJNEA,MM3,ERR
MOVA,44H
CJNEA,MM4,ERR
JMPPASS;判断密码正确性
ERR:
MOVP0,#86H
MOVP2,#0F0H;显示4个"E"
CALLDELAY1s
CALLDELAY1s
DJNZR7,ERR1
MOVR7,#03H
CALLDELAY1h;锁定系统1h才可继续输入密码
JMPSTART
ERR1:
JMPSTART;输入错误次数小于三次时跳回初始状态
错误时显示如下
PASS:
MOVP0,#8CH
MOVP2,#0F0H;显示4个"P"
MOVR7,#03H
CALLKEY
CJNEA,36H,PASS
CLRP2.6;灯亮一秒
CALLDELAY1s
SETBP2.6
JMPSTART
正确时显示如下:
再次按下确认键,发光二极管亮1s,再次跳回初始状态。
5、整个系统的电路图
六、参考文献
王义军,《单片机原理及应用习题与实验指导书》,中国电力出版社;
高伟,《AT89单片机原理及应用》,国防工业出版社;
兰吉昌,《51单片机设计应用百例》,机械工业出版社
张桂兰,《单片机原理与应用》,机械工业出版社
李海涛,《PIC单片机应用开发典型模块》,国防工业出版社
七、心得体会
回顾起此次单片机课程设计,让我感慨很多,从选题到定稿,从理论到实践,在整整两个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多书本上所没有学到过的知识。
两周以来,整日埋头于电路程序的设计,分析,组装,绘制,仿真,总结以及打印材料等工作,。
其实一开始真不知道该从何入手,短短几天内,在各位老师的耐心知道和同学的帮助之下,开始在脑海里有了大致的模块,就这样整天埋在图书馆,面对电脑搜索资料,一块一块的电路慢慢拼成,于是又开始查找相关的资料,分析电路,根据自己的目的有效地编制程序,对比之下有进一步的完善,在形成电路大致模块下又进一步尽可能的减小成本,知道最终电路以自己最理想的形式出现。
在本次设计的过程中,我发现很多的问题,单片机课程设计的重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉得写好一个程序不是一件简单的事情。
通过这次实习,我真正学到了不少东西,真正体会到了理论联系实际的重要性。
课堂教学考虑到大多数同学的需求,主要强调基本知识,基本理论,基本方法,基本技能。
而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。
附录(源程序清单):
MM1DATA31H
MM2DATA32H
MM3DATA33H
MM4DATA34H
LINEDATA47H;按键行号
ROWDATA48H;按键列号
XEQU00H
YEQU00H
WEQU00H
ZEQU00H
MOVMM1,#X
MOVMM2,#Y
MOVMM3,#W
MOVMM4,#Z
MOVR7,#03H
MOV35H,#0AH
MOV36H,#0BH
MOV37H,#0CH
MOV38H,#0DH
MOV39H,#0EH
MOV3AH,#0FH
;***************主程序***************
START:
MOVP0,#0BFH;没有输入时显示"-"
MOVP2,#0F0H;4个非门都导通
CALLDELAY100MS
CALLKEY;判断是否按下输入密码键,没有按下返回主程序
CJNEA,35H,START
MAIN:
MOVP0,#0FFH;没有输入时没有显示
MOVP2,#0F0H;4个非门都导通
CALLDELAY100MS
JMPFIRST
;*******************以下为键盘扫描程序,计算键值并存入A*****************
KEY:
MOVP1,#0F0H;扫描行码
LIN1:
JNBP1.0,LIN2;该行无键按下,扫描下一行
LCALLDELAY100ms
JNBP1.0,LIN2
MOVLINE,#00H;存行号
LJMPRSCAN;扫描列,求列值
LIN2:
JNBP1.1,LIN3
LCALLDELAY100ms
JNBP1.1,LIN3
MOVLINE,#01H;存行号
LJMPRSCAN
LIN3:
JNBP1.2,LIN4
LCALLDELAY100ms
JNBP1.2,LIN4
MOVLINE,#02H;存行号
LJMPRSCAN
LIN4:
JNBP1.3,LIN1
LCALLDELAY100ms
JNBP1.3,LIN1
MOVLINE,#03H;存行号
RSCAN:
MOVP1,#0FH;扫描列码
C1:
JNBP1.4,C2
MOVROW,#00H;存列号
LJMPCALCU
C2:
JNBP1.5,C3
MOVROW,#01H;存列号
LJMPCALCU
C3:
JNBP1.6,C4
MOVROW,#02H;存列号
LJMPCALCU
C4:
JNBP1.7,C1
MOVROW,#03H
NOP
NOP
CALCU:
;计算键值
MOVA,LINE
MOVB,#04H;行值乘4+列值=键值
MULAB
ADDA,ROW
CALLDELAY100MS
RET
;***********数据录入阶段*********
FIRST:
CALLKEY
CJNEA,35H,Q11;判断是否按下输入,按下没反应(继续扫描这位密码)
JMPFIRST
Q11:
CJNEA,36H,Q12;判断是否按下确定,按下没反应(继续扫描这位密码)
JMPFIRST
Q12:
CJNEA,37H,Q13;判断是否按下取消,按下返回START
JMPSTART
Q13:
CJNEA,38H,Q14;判断是否按下重填,按下返回MAIN,重新输入密码
JMPMAIN
Q14:
CJNEA,39H,Q15;判断是否按下无效键,按下没反应(继续扫描这位密码)
JMPFIRST
Q15:
CJNEA,3AH,FIRST1;判断是否按无效键,按下没反应(继续扫描这位密码)
JMPFIRST
FIRST1:
MOV41H,A;输入的第一位密码存41H
MOVP0,#00H;输入一位时,显示"8."
MOVP2,#0FEH
CALLDELAY100MS
SECOND:
CALLKEY
CJNEA,35H,Q21
JMPSECOND
Q21:
CJNEA,36H,Q22
JMPSECOND
Q22:
CJNEA,37H,Q23
JMPSTART
Q23:
CJNEA,38H,Q24
JMPMAIN
Q24:
CJNEA,39H,Q25
JMPSECOND
Q25:
CJNEA,3AH,SECOND1
JMPSECOND
SECOND1:
MOV42H,A;第二位密码存于42H
MOVP0,#00H
MOVP2,#0FCH;显示2个"8."
CALLDELAY100MS
THIRD:
CALLKEY
CJNEA,35H,Q31
JMPTHIRD
Q31:
CJNEA,36H,Q32
JMPTHIRD
Q32:
CJNEA,37H,Q33
JMPSTART
Q33:
CJNEA,38H,Q34
JMPMAIN
Q34:
CJNEA,39H,Q35
JMPTHIRD
Q35:
CJNEA,3AH,THIRD1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计