900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 51单片机汇编密码锁(可修改密码 课程设计 含论文)!(大三上)

51单片机汇编密码锁(可修改密码 课程设计 含论文)!(大三上)

时间:2023-09-09 05:10:15

相关推荐

51单片机汇编密码锁(可修改密码 课程设计 含论文)!(大三上)

单片机课程设计

设计课题:密码锁

一上来不bb太多,提供所有文件下载地址。

点击下载所有文件(汇编51单片机密码锁(含论文、程序、AD图)单片机课程设计)

/download/weixin_43237195/10949597

在这里提醒一下,程序是百分百没有问题的,因为我课设的时候就是用这个做的,也测试了很久,最后才发出来的。如果烧录之后发现没反应,那就检查一下接线,看看那个pcb图,另外注意数码管、按键等原件是共阳还是共阴

目 录

选题背景

密码锁目的与意义

密码锁的原理

系统方案和总体结构

整体实验功能

硬件设计

实验仪器

电路原理图

软件设计

程序设计流程图

所用到的函数、功能和原理

硬软件调试过程

源程序代码

选题背景

密码锁目的与意义

随着科学技术的不断发展,在人们的生活中人们对于安全防盗器件的要求高。传统的防盗不方便携 带,安全性都比较差,满足不了我们的日常生活,随着单片机的发展,在我们的日常生活中出现了很多电子密码锁,这些技术的发展使我们的安全性得到了显著的提高。单片机产生后,我们就将这些变为智能化,我们只需要在单片机外围接一点简单的接口电路,核心的部分只能由人为的写入程序来完成。电子密码锁可以在日常生活和现在办公来完成,在我们的住在和办公的环境中有些重要的文件和报表以及一些重要的个人资料的保存等很多场所需要使用。密码锁具有安全性高,成本低,低功耗,易操作等优点, 这样极大的提高了我们的安全性。人们对安全的重视和科学技术的发展,许多电子智能锁,例如指纹识别,IC识别等已出现在我们的生活中,这些产品的特点需要一个特别的指纹或有效卡,成本相对不高。针对当前的技术和水平,电子密码锁是这类电子防盗产品的主流。

密码锁的原理

密码锁的原密码存在单片机的某几个单元里,通过矩阵按键扫描输入的密码,若密码相同,锁打卡;否则,密码错误,蜂鸣器报警。

若想改密码,先判断是否输入正确的原密码,后允许输入新的密码并显示在数码管上且替换储存原密码单元的数。

系统方案和总体结构

整体实验功能

该密码锁完成的主要功能是当输入密码时,数码管只显示“-”,当密码位输入正确完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提示。若密码不正确,禁止按键三秒,同时发出“嘀、嘀”报警声。密码锁的密码可以修改,若想改密码,先判断是否输入正确的原密码,后允许输入新的密码并显示在数码管上且替换储存原密码单元的数。

硬件设计

实验仪器

1个蜂鸣器

1个4×4矩阵按键

1个51单片机最小系统

2个LED灯

8位数码管。

电路原理图

软件设计

程序设计流程图

-

源程序代码

ORG 0000HMOV P0,#00HMOV P2,#0FFHLJMP MAIN1ORG 0100HMAIN1:MOV 21H,#00H //所有状态清零MOV 22H,#00HMOV 23H,#00HMOV 24H,#00HMOV 25H,#00HMOV 26H,#00HMOV 27H,#00HMOV 28H,#00HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV 71H,#00HMOV 72H,#00HMOV 73H,#00HMOV 74H,#00HMOV 75H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HMOV 33H,#00HMOV 50H,#00HMOV 21H,#06H //设置初始密码MOV 22H,#03FHMOV 23H,#066HMOV 24H,#05BHMOV 25H,#06FHMOV 26H,#05BHMOV 27H,#066HMOV 28H,#066HMOV R0,#51H //两个指针清零MOV R1,#71HMAIN:MOV 50H,#00HACALL SAOMIAOMOV A,50HCJNE A,#00H,QWER //判断是否有键盘输入LJMP QWER3QWER:CJNE A,#03H,QWER9 //判断是否要重置密码JB P2.7,ERERER //判断当前是否为改密码的状态,二者之间跳转。其中p2.7为重置密码标志位,1:正常状态;0:修改密码状态MOV 33H,#00HSETB P2.7MOV R0,#51H //状态置零MOV R1,#71HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV 71H,#00HMOV 72H,#00HMOV 73H,#00HMOV 74H,#00HMOV 75H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HLJMP QWER3ERERER:MOV 33H,#0FFH //33h中为0ffh则为改密码状态,00h不是改密码状态,此处与上面的p2.7相比有点多余。CLR P2.7MOV R0,#51HMOV R1,#71HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV 71H,#00HMOV 72H,#00HMOV 73H,#00HMOV 74H,#00HMOV 75H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HLJMP QWER3QWER9:CJNE A,#02H,QWER8 //判断是否按了确定键LCALL PANDUAN//调用判断函数MOV R0,#51H //判断结束后,状态清零MOV R1,#71HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV 71H,#00HMOV 72H,#00HMOV 73H,#00HMOV 74H,#00HMOV 75H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HLJMP QWER3QWER8:CJNE A,#01H,QWER2 //判断是否退格按键按下CJNE R0,#51H,JIAN //判断是否超出了八位数码管范围!这个特别重要!(低于0位)SJMP QWER3JIAN:DEC R0 //退格执行语句DEC R1MOV @R0,#00HMOV @R1,#00HSJMP QWER3QWER2:CJNE R0,#59H,JIA //判断是否超出了八位数码管范围!这个特别重要!(高于8位)SJMP QWER3JIA:MOV @R0,#040H //按下数字按键则累加MOV @R1,50HINC R0INC R1QWER3:SETB P2.4 //八位数码管显示函数,为动态扫描形,p2.2、3、4为138译码器ABC接口 p0为数码管控制位SETB P2.3SETB P2.2MOV P0,51HACALL DELAY1 //一定要记得调用延迟函数,不然会出现重影的现象SETB P2.4SETB P2.3CLR P2.2MOV P0,52HACALL DELAY1SETB P2.4CLR P2.3SETB P2.2MOV P0,53HACALL DELAY1SETB P2.4CLR P2.3CLR P2.2MOV P0,54HACALL DELAY1CLR P2.4SETB P2.3SETB P2.2MOV P0,55HACALL DELAY1CLR P2.4SETB P2.3CLR P2.2MOV P0,56HACALL DELAY1CLR P2.4CLR P2.3SETB P2.2MOV P0,57HACALL DELAY1CLR P2.4CLR P2.3CLR P2.2MOV P0,58HACALL DELAY1LJMP MAIN //循环回去,相当于C语言里面的while(1)PANDUAN: //判断子函数,一位一位判断,不对则调用BEE函数,蜂鸣器报警MOV A,71HCJNE A,21H,BEEMOV A,72HCJNE A,22H,BEEMOV A,73HCJNE A,23H,BEEMOV A,74HCJNE A,24H,BEEMOV A,75HCJNE A,25H,BEEMOV A,76HCJNE A,26H,BEEMOV A,77HCJNE A,27H,BEEMOV A,78HCJNE A,28H,BEEMOV A,33HCJNE A,#0FFH,OVER //如果都对,判断是否当前为改密码时验证原密码的状态,如果是的,则调用改密码函数,如果不是则正常打开锁(改密码的重点)MOV 33H,#00H //清除33h单元标志位SETB P2.7 LCALL DELAYLCALL DELAY //当然如果是改密码状态则p2.7灭一下后又亮,提示用户可以输入新密码了!LCALL DELAYCLR P2.7LCALL SHEZHI //调用设置新密码函数OVER: //正常开锁状态CLR P2.0LCALL DELAYLCALL DELAYLCALL DELAYSETB P2.0MOV A,33H //清除33h单元标志位,这里为出现bug所设置的,防止其他操作RETBEE: //蜂鸣器报警函数,无源蜂鸣器,需要高低电平来回变MOV 33H,#00HSETB P2.7MOV R5,#20MOV R7,#0FFHHAHAHA:CPL P1.5LCALL DELAYBEEDJNZ R7,HAHAHAMOV R7,#0FFHDJNZ R5,HAHAHARETSHEZHI: //设置新密码子函数(最难点)MOV R0,#51HMOV R1,#71H //当开始清零MOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV 71H,#00HMOV 72H,#00HMOV 73H,#00HMOV 74H,#00HMOV 75H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HSHEZHIK:MOV 50H,#00H //和上面的正常模式其实很相似,只是我不会嵌套上面的函数,于是重新搞了一个新的函数,没有注释的地方和上面一样LCALL SAOMIAOMOV A,50HCJNE A,#00H,SHEZHI1LJMP SHEZHI5SHEZHI1:CJNE A,#03H,SHEZHI22 //防止用户花里胡哨操作,在改密码的时候,又突然返回了。所以全部清零,原密码不动SETB P2.7MOV 33H,0FFHMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV R0,#51HMOV 33H,#00H //清除33hLJMP QWER3SHEZHI22:CJNE A,#01H,SHEZHI2 //是否退格CJNE R0,#51H,JIAN1SJMP SHEZHI5JIAN1:DEC R0MOV @R0,#00HSJMP SHEZHI5SHEZHI2:CJNE A,#02H,SHEZHI3 //重点!判断是否输入了确定键,如果是的,把新密码来替换原密码MOV 21H,51HMOV 22H,52HMOV 23H,53HMOV 24H,54H // 新密码来替换原密码MOV 25H,55HMOV 26H,56HMOV 27H,57HMOV 28H,58HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00H //清零,防止bugMOV 55H,#00HMOV 56H,#00HMOV 57H,#00HMOV 58H,#00HMOV R0,#51HSETB P2.7 //清除p2.7LJMP QWER3SHEZHI3:CJNE R0,#59H,JIA1SJMP SHEZHI5JIA1:MOV @R0,50HINC R0SHEZHI5: //数码管显示函数SETB P2.4SETB P2.3SETB P2.2MOV P0,51HACALL DELAY1SETB P2.4SETB P2.3CLR P2.2MOV P0,52HACALL DELAY1SETB P2.4CLR P2.3SETB P2.2MOV P0,53HACALL DELAY1SETB P2.4CLR P2.3CLR P2.2MOV P0,54HACALL DELAY1CLR P2.4SETB P2.3SETB P2.2MOV P0,55HACALL DELAY1CLR P2.4SETB P2.3CLR P2.2MOV P0,56HACALL DELAY1CLR P2.4CLR P2.3SETB P2.2MOV P0,57HACALL DELAY1CLR P2.4CLR P2.3CLR P2.2MOV P0,58HACALL DELAY1LJMP SHEZHIK //注意此时不可以跳转到主函数,因为新密码还没有输出完成,所以跳转到上面的设置新密码的函数,来接受下一位密码SAOMIAO: //扫描矩阵键盘函数CLR P2.4CLR P2.3CLR P2.2 MOV P0,#00H //这个是为了方式bug 方式键盘输入到了第八位,继续按键的话,第八位数码管会变得很亮设置的MOV P1,#0F0H JNB P1.4,Y0JNB P1.5,Y1JNB P1.6,Y2JNB P1.7,Y3RETY0:MOV P1,#0FHMOV 30H,#00HJNB P1.0,X0JNB P1.1,X1JNB P1.2,X2JNB P1.3,X3Y1: //矩阵键盘原理,先扫描列再扫描行,得到的结果进入计算函数来计算对应的按键值(注意51单片机如果高电平引脚与低电平引脚短接,则低电平引脚变为高,高电平引脚不变,所以检测的时候检测1,不检测0!!!)MOV P1,#0FHMOV 30H,#01HJNB P1.0,X0JNB P1.1,X1JNB P1.2,X2JNB P1.3,X3Y2:MOV P1,#0FHMOV 30H,#02HJNB P1.0,X0 ·//数据暂存到30h单元JNB P1.1,X1JNB P1.2,X2JNB P1.3,X3Y3:MOV P1,#0FHMOV 30H,#03HJNB P1.0,X0JNB P1.1,X1JNB P1.2,X2JNB P1.3,X3X0:MOV 31H,#00HACALL DELAYMOV P1,#0F0HLJMP JISUANX1:MOV 31H,#01HACALL DELAYMOV P1,#0F0HLJMP JISUANX2:MOV 31H,#02HACALL DELAYMOV P1,#0F0HLJMP JISUANX3:MOV 31H,#03HACALL DELAYMOV P1,#0F0HLJMP JISUANJISUAN: //开始计算,分别把值给50h,这个值是指数码管显示的数值,这个一定要区别G0:MOV A,30HCJNE A,#00H,A0 //其中退格是#01h,确定是#02h,设置密码是#03hMOV A,31HCJNE A,#00H,G1MOV 50H,#02HG1:CJNE A,#01H,G2MOV 50H,#03FHMOV 70H,#040HG2:CJNE A,#02H,A0MOV 50H,#01HA0:MOV A,30HCJNE A,#01H,B0MOV A,31HCJNE A,#00H,A1MOV 50H,#04FHA1:CJNE A,#01H,A2MOV 50H,#05BHA2:CJNE A,#02H,B0MOV 50H,#06HB0:MOV A,30HCJNE A,#02H,C0MOV A,31HCJNE A,#00H,B1MOV 50H,#07DHB1:CJNE A,#01H,B2MOV 50H,#06DHB2:CJNE A,#02H,C0MOV 50H, #66HC0:MOV A,30HCJNE A,#03H,D0MOV A,31HCJNE A,#00H,C1MOV 50H,#06FHC1:CJNE A,#01H,C2MOV 50H,#07FHC2:CJNE A,#02H,C3MOV 50H,#07HC3:CJNE A,#03H,D0MOV 50H,#03HD0:RETDELAY1: MOV R4,#0FFH //延迟函数DJNZ R4,$RETDELAYBEE:MOV R4,#50

汇编51单片机密码锁(含论文、程序、AD图)单片机课程设计 点击下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。