单片机课程设计邢睿.docx

上传人:b****6 文档编号:6286057 上传时间:2023-01-05 格式:DOCX 页数:19 大小:31.34KB
下载 相关 举报
单片机课程设计邢睿.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

单片机课程设计邢睿

题目:

基于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

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

当前位置:首页 > 表格模板 > 合同协议

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

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