单片机课程设计
设计课题:密码锁

一上来不bb太多,提供所有文件下载地址。
点击下载所有文件(汇编51单片机密码锁(含论文、程序、AD图)单片机课程设计)

https://download.csdn.net/download/weixin_43237195/10949597

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

目 录
选题背景
密码锁目的与意义
密码锁的原理
系统方案和总体结构
整体实验功能
硬件设计
实验仪器
电路原理图
软件设计
程序设计流程图
所用到的函数、功能和原理
硬软件调试过程
源程序代码

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

密码锁的原理
密码锁的原密码存在单片机的某几个单元里,通过矩阵按键扫描输入的密码,若密码相同,锁打卡;否则,密码错误,蜂鸣器报警。
若想改密码,先判断是否输入正确的原密码,后允许输入新的密码并显示在数码管上且替换储存原密码单元的数。

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

硬件设计
实验仪器
1个蜂鸣器
1个4×4矩阵按键
1个51单片机最小系统
2个LED灯
8位数码管。

电路原理图

软件设计
程序设计流程图
-

源程序代码

ORG 0000H
MOV P0,#00H
MOV P2,#0FFH
LJMP MAIN1
ORG 0100HMAIN1:MOV 21H,#00H  //所有状态清零
MOV 22H,#00H
MOV 23H,#00H
MOV 24H,#00H
MOV 25H,#00H
MOV 26H,#00H
MOV 27H,#00H
MOV 28H,#00HMOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00HMOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00HMOV 33H,#00H
MOV 50H,#00HMOV 21H,#06H  //设置初始密码
MOV 22H,#03FH
MOV 23H,#066H
MOV 24H,#05BH
MOV 25H,#06FH
MOV 26H,#05BH
MOV 27H,#066H
MOV 28H,#066HMOV R0,#51H  //两个指针清零
MOV R1,#71HMAIN:
MOV 50H,#00HACALL SAOMIAO
MOV A,50H
CJNE A,#00H,QWER  //判断是否有键盘输入
LJMP QWER3QWER:
CJNE A,#03H,QWER9  //判断是否要重置密码
JB P2.7,ERERER  //判断当前是否为改密码的状态,二者之间跳转。其中p2.7为重置密码标志位,1:正常状态;0:修改密码状态
MOV 33H,#00H
SETB P2.7MOV R0,#51H  //状态置零
MOV R1,#71H MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00HMOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00HLJMP QWER3
ERERER:
MOV 33H,#0FFH  //33h中为0ffh则为改密码状态,00h不是改密码状态,此处与上面的p2.7相比有点多余。
CLR P2.7MOV R0,#51H
MOV R1,#71H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00HMOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00HLJMP QWER3QWER9:
CJNE A,#02H,QWER8  //判断是否按了确定键
LCALL PANDUAN//调用判断函数MOV R0,#51H  //判断结束后,状态清零
MOV R1,#71HMOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00HMOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00HLJMP QWER3QWER8:
CJNE A,#01H,QWER2  //判断是否退格按键按下
CJNE R0,#51H,JIAN   //判断是否超出了八位数码管范围!这个特别重要!(低于0位)
SJMP QWER3
JIAN:
DEC R0  //退格执行语句
DEC R1
MOV @R0,#00H
MOV @R1,#00H
SJMP QWER3
QWER2:
CJNE R0,#59H,JIA  //判断是否超出了八位数码管范围!这个特别重要!(高于8位)
SJMP QWER3
JIA:
MOV @R0,#040H  //按下数字按键则累加
MOV @R1,50H
INC R0
INC R1QWER3:
SETB P2.4  //八位数码管显示函数,为动态扫描形,p2.2、3、4为138译码器ABC接口  p0为数码管控制位
SETB P2.3
SETB P2.2
MOV P0,51H
ACALL DELAY1  //一定要记得调用延迟函数,不然会出现重影的现象SETB P2.4
SETB P2.3
CLR P2.2
MOV P0,52H
ACALL DELAY1SETB P2.4
CLR P2.3
SETB P2.2
MOV P0,53H
ACALL DELAY1SETB P2.4
CLR P2.3
CLR P2.2
MOV P0,54H
ACALL DELAY1
CLR P2.4
SETB P2.3
SETB P2.2
MOV P0,55HACALL DELAY1
CLR P2.4
SETB P2.3
CLR P2.2
MOV P0,56HACALL DELAY1
CLR P2.4
CLR P2.3
SETB P2.2
MOV P0,57H
ACALL DELAY1CLR P2.4
CLR P2.3
CLR P2.2
MOV P0,58H
ACALL DELAY1LJMP MAIN   //循环回去,相当于C语言里面的while(1)PANDUAN:  //判断子函数,一位一位判断,不对则调用BEE函数,蜂鸣器报警MOV A,71H
CJNE A,21H,BEE
MOV A,72H
CJNE A,22H,BEE
MOV A,73H
CJNE A,23H,BEE
MOV A,74H
CJNE A,24H,BEE
MOV A,75H
CJNE A,25H,BEE
MOV A,76H
CJNE A,26H,BEE
MOV A,77H
CJNE A,27H,BEE
MOV A,78H
CJNE A,28H,BEE
MOV A,33HCJNE A,#0FFH,OVER  //如果都对,判断是否当前为改密码时验证原密码的状态,如果是的,则调用改密码函数,如果不是则正常打开锁(改密码的重点)
MOV 33H,#00H   //清除33h单元标志位
SETB P2.7
LCALL DELAY
LCALL DELAY  //当然如果是改密码状态则p2.7灭一下后又亮,提示用户可以输入新密码了!
LCALL DELAY
CLR P2.7
LCALL SHEZHI      //调用设置新密码函数OVER:  //正常开锁状态
CLR P2.0
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB P2.0
MOV A,33H  //清除33h单元标志位,这里为出现bug所设置的,防止其他操作
RETBEE:  //蜂鸣器报警函数,无源蜂鸣器,需要高低电平来回变
MOV 33H,#00H
SETB P2.7
MOV R5,#20
MOV R7,#0FFH
HAHAHA:
CPL P1.5
LCALL DELAYBEE
DJNZ R7,HAHAHA
MOV R7,#0FFH
DJNZ R5,HAHAHA
RETSHEZHI:  //设置新密码子函数(最难点)
MOV R0,#51H
MOV R1,#71H   //当开始清零
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00H
MOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00HSHEZHIK:
MOV 50H,#00H  //和上面的正常模式其实很相似,只是我不会嵌套上面的函数,于是重新搞了一个新的函数,没有注释的地方和上面一样
LCALL SAOMIAO
MOV A,50H
CJNE A,#00H,SHEZHI1
LJMP SHEZHI5SHEZHI1:
CJNE A,#03H,SHEZHI22  //防止用户花里胡哨操作,在改密码的时候,又突然返回了。所以全部清零,原密码不动
SETB P2.7
MOV 33H,0FFH
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00H
MOV R0,#51H
MOV 33H,#00H  //清除33h
LJMP QWER3SHEZHI22:
CJNE A,#01H,SHEZHI2  //是否退格
CJNE R0,#51H,JIAN1
SJMP SHEZHI5
JIAN1:
DEC R0
MOV @R0,#00H
SJMP SHEZHI5SHEZHI2:
CJNE A,#02H,SHEZHI3  //重点!判断是否输入了确定键,如果是的,把新密码来替换原密码
MOV 21H,51H
MOV 22H,52H
MOV 23H,53H
MOV 24H,54H   // 新密码来替换原密码
MOV 25H,55H
MOV 26H,56H
MOV 27H,57H
MOV 28H,58HMOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H  //清零,防止bug
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00H
MOV R0,#51H
SETB P2.7     //清除p2.7
LJMP QWER3SHEZHI3:
CJNE R0,#59H,JIA1
SJMP  SHEZHI5
JIA1:
MOV @R0,50H
INC R0SHEZHI5:  //数码管显示函数
SETB P2.4
SETB P2.3
SETB P2.2
MOV P0,51H
ACALL DELAY1SETB P2.4
SETB P2.3
CLR P2.2
MOV P0,52H
ACALL DELAY1SETB P2.4
CLR P2.3
SETB P2.2
MOV P0,53H
ACALL DELAY1SETB P2.4
CLR P2.3
CLR P2.2
MOV P0,54H
ACALL DELAY1CLR P2.4
SETB P2.3
SETB P2.2
MOV P0,55H
ACALL DELAY1CLR P2.4
SETB P2.3
CLR P2.2
MOV P0,56H
ACALL DELAY1CLR P2.4
CLR P2.3
SETB P2.2
MOV P0,57H
ACALL DELAY1CLR P2.4
CLR P2.3
CLR P2.2
MOV P0,58H
ACALL DELAY1LJMP SHEZHIK  //注意此时不可以跳转到主函数,因为新密码还没有输出完成,所以跳转到上面的设置新密码的函数,来接受下一位密码SAOMIAO:  //扫描矩阵键盘函数CLR P2.4
CLR P2.3
CLR P2.2
MOV P0,#00H  //这个是为了方式bug 方式键盘输入到了第八位,继续按键的话,第八位数码管会变得很亮设置的MOV P1,#0F0H
JNB P1.4,Y0
JNB P1.5,Y1
JNB P1.6,Y2
JNB P1.7,Y3
RET
Y0:
MOV P1,#0FH
MOV 30H,#00H
JNB P1.0,X0
JNB P1.1,X1
JNB P1.2,X2
JNB P1.3,X3
Y1:  //矩阵键盘原理,先扫描列再扫描行,得到的结果进入计算函数来计算对应的按键值(注意51单片机如果高电平引脚与低电平引脚短接,则低电平引脚变为高,高电平引脚不变,所以检测的时候检测1,不检测0!!!)
MOV P1,#0FH
MOV 30H,#01H
JNB P1.0,X0
JNB P1.1,X1
JNB P1.2,X2
JNB P1.3,X3
Y2:
MOV P1,#0FH
MOV 30H,#02H
JNB P1.0,X0  ·//数据暂存到30h单元
JNB P1.1,X1
JNB P1.2,X2
JNB P1.3,X3
Y3:
MOV P1,#0FH
MOV 30H,#03H
JNB P1.0,X0
JNB P1.1,X1
JNB P1.2,X2
JNB P1.3,X3
X0:
MOV 31H,#00H
ACALL DELAY
MOV P1,#0F0H
LJMP JISUAN
X1:
MOV 31H,#01H
ACALL DELAY
MOV P1,#0F0H
LJMP JISUAN
X2:
MOV 31H,#02H
ACALL DELAY
MOV P1,#0F0H
LJMP JISUAN
X3:
MOV 31H,#03H
ACALL DELAY
MOV P1,#0F0H
LJMP JISUANJISUAN:  //开始计算,分别把值给50h,这个值是指数码管显示的数值,这个一定要区别
G0:MOV A,30H
CJNE A,#00H,A0  //其中退格是#01h,确定是#02h,设置密码是#03h
MOV A,31HCJNE A,#00H,G1MOV 50H,#02H
G1: CJNE A,#01H,G2MOV 50H,#03FHMOV 70H,#040H
G2: CJNE A,#02H,A0MOV 50H,#01H
A0:MOV A,30H
CJNE A,#01H,B0
MOV A,31HCJNE A,#00H,A1MOV 50H,#04FH
A1: CJNE A,#01H,A2MOV 50H,#05BH
A2: CJNE A,#02H,B0MOV 50H,#06H
B0:MOV A,30H
CJNE A,#02H,C0
MOV A,31HCJNE A,#00H,B1MOV 50H,#07DH
B1: CJNE A,#01H,B2MOV 50H,#06DH
B2: CJNE A,#02H,C0MOV 50H, #66H
C0:MOV A,30H
CJNE A,#03H,D0
MOV A,31HCJNE A,#00H,C1MOV 50H,#06FH
C1: CJNE A,#01H,C2MOV 50H,#07FH
C2: CJNE A,#02H,C3MOV 50H,#07H
C3: CJNE A,#03H,D0MOV 50H,#03H
D0:RETDELAY1: MOV R4,#0FFH    //延迟函数
DJNZ R4,$
RETDELAYBEE:MOV R4,#50

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

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

  1. 用c语言编写的99秒表,单片机00到99秒表的课程设计 含源程序,仿真图,文档

    这是我上个月做的单片机秒表课程设计,这个课程设计是实现00到99秒的一个秒表, 并且有开始和复位功能, 用了一个星期的时间, 附件里面包含秒表的单片机源程序,proteus仿真电路图和课设文档, 都是 ...

  2. 基于51单片机的密码锁

    本次的项目是基于51单片机的密码锁,适合用来作为课程设计 主要实现了:密码锁功能,通过矩阵按键输入密码,输入范围为0-F,共有四位:同时,也可以使用更改按键更改密码,在更改时需要输入原密码来进入更改模 ...

  3. 基于51单片机蓝牙密码锁

    目录 一.项目需求 二.原理图 三.设计思路 四.实物 五.代码 资料下载地址:基于51单片机蓝牙密码锁-单片机文档类资源-CSDN下载 一.项目需求 1.采用DS1302时钟模块,通过该模块可检测当 ...

  4. 51单片机蓝牙密码锁

    51单片机蓝牙密码锁 本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成蓝牙密码锁的整个系统,其中包含中控部分.输入部分和输出部分.中控部分采用了STC89C52单片机,其主要作用是获 ...

  5. 10 51单片机汇编:让定时器产生中断(使用Keil模拟器)[系列教程之10]

    10 51单片机汇编:让定时器产生中断(使用Keil模拟器)[系列教程之10] 该系列主仓库地址:https://gitee.com/langcai1943/8051-from-boot-to-app ...

  6. 51单片机汇编入门基础代码-流水灯

    51单片机汇编代码-流水灯 一.基础指令集简介 汇编指令集是由芯片厂商制定的,其实际意义还是1和0.作为最接近硬件的程序语言,它能够帮助我们更容易理解微型计算机的运行原理.当然如果你能够对硬件有所了解 ...

  7. 【Proteus仿真】51单片机汇编数显大型交通灯控制

    [Proteus仿真]51单片机汇编数显大型交通灯控制 Proteus仿真 学汇编的人虽然 不多,但是还是有的,分享一个汇编的案例,给需要的人予以参考学习,有些时候我们还是需要懂一些汇编指令比较好. ...

  8. 51单片机——电子密码锁

    51单片机--电子密码锁 链接: link. 图片: !protues仿真 ,下面展示同样高亮的 代码片. #include<reg51.h> unsigned char zt=1; un ...

  9. 【Proteus仿真】51单片机汇编实现DS18B20+LCD1602显示

    [Proteus仿真]51单片机汇编实现DS18B20+LCD1602显示 Proteus仿真 汇编代码(.asm) ;**************************************** ...

最新文章

  1. Squid3反向代理安装与配置
  2. boost::safe_numerics模块相关的测试程序
  3. java xslt 数据转换_如何将xslt结果转换为Java对象?
  4. vue2.0 MintUI安装和基本使用
  5. 触发器 REFERENCING OLD AS OLD NEW AS NEW FOR EACH Row
  6. python接口自动化(二十三)--unittest断言——上(详解)
  7. http请求状态码表示的意义
  8. 天融信荣获《中国信息安全》2018年度“双推”活动两项荣誉
  9. python 判断文件夹是否存在 否则创建
  10. Linux 备份与恢复
  11. 父与子的python之旅_《父与子的编程之旅:与小卡特一起学Python》作者:Warren Sande - kindle电子书下载 - 我的书库...
  12. poi(easypoi)导出excel(xls,xlsx)后,文件打开错误或乱码的解决方法(亲测)
  13. 如何在Mac OS X中使用GeekTool设置桌面任务清单
  14. java实现机器人行走
  15. 关键词抓取规则,关键词标题SEO技巧
  16. 关于C++读取Excel表格资料后的心得
  17. AP计算机编程路上的照明灯----学校老师哈佛博士的伊利诺伊大学学生如何说
  18. 高通正式开源 aptX 和 aptX HD 编码器
  19. Excel也可以播放MV
  20. java swing实现的简单音乐播放器源码附带视频指导教程

热门文章

  1. iOS UIScrollView 无法滚动 没有弹簧效果解决方案
  2. 身为一名合格root管理员的基本防范措施 Linux系统安全及应用
  3. dfs根目录_分布式文件系统DFS详细解读
  4. 机器学习之中文处理:文言文还是白话文
  5. 抖音账号和视频都没有问题,为什么我的流量还是不好?丨国仁网络资讯
  6. 手机上面正常显示网页大小
  7. 弄明白HASH,你就弄明白区块链的一大半
  8. 【noip模拟赛1】古韵之鹊桥相会(最短路)
  9. h5页面使用html2canvas实现分享海报
  10. 能净化空气的PC电源,配置也很不错,艾湃电竞AP-550Ti体验