课程设计:89C51单片机实现六位密码锁

您所在的位置:网站首页 密码设置什么好六位数 课程设计:89C51单片机实现六位密码锁

课程设计:89C51单片机实现六位密码锁

2024-07-11 13:30| 来源: 网络整理| 查看: 265

全部内容为本人原创! 其中代码程序仅为该课程设计中的一种方法,对有兴趣修改、完善的同学表示欢迎! 注:由于各模块代码在编写时相互交融,因此将各模块代码独立显示出来较为困难且观赏性差,因此代码展示仅有最后的总代码展示

本程序功能: 1.设置6位密码,密码通过键盘输入,若密码正确,则指示灯亮。 2.密码可以由用户自己修改设定,锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时需要二次确认,以防止误操作。 3.报警、锁定键盘功能。密码输入错误显示器会出现错误提示,若密码输入错误次数超过三次,蜂鸣器报警、指示灯闪烁、锁定键盘,约8s后解除锁定和数码管、蜂鸣器报警。

编写程序前构思完成总体流程图:在这里插入图片描述 之后在仿真软件上完成单片机原理图: 在这里插入图片描述 本作品的主要构成部分主要包括80C51单片机、矩阵按键、LED灯、蜂鸣器、八位数码管显示器。 其中,矩阵按键与八位数码管显示器为重点。

首先介绍矩阵按键模块: 密码的输入用矩阵键盘实现,包括数字键和功能键。 如图一所示,矩阵键盘的每一条水平线与垂直线的交叉处不相通,二十通过一个按键来连接,利用这种行列式矩阵只需要N条行线和M条列线即可组成由N×M个按键的键盘。 在这里插入图片描述 在这里插入图片描述 本次设计需要0-9九个数字键、清零键、确认键和一个重置密码键,所以选用4×4的矩阵按键。 在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段,还要对按键进行消抖处理。 本程序中,当六位密码全部输入完成后,按下任意键即可进行密码正误判断,并进行消抖处理。 当数字键被按下后,就要识别是哪一个按键被按下。本次设计使用的是线反转法。给行线置为0x0f,给列线置为0xf0,。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位值判断是哪一行有按键按下,这样就能够确定是哪一个按键按下了。

显示模块(包含八位数码管、LED灯): 密码显示电路由单片机、电排阻和数码管组成。。P2控制位选,P0控制段选。为了防止手动错误,数码管显示数字。 数码管显示原理: 本设计采用数码管动态显示,在极短的时间内轮流显示各个字符。利用人眼视觉暂留的特点,循环顺序变更位码,同时数据线上发送相应的显示内容,即可表现出多位数字同时显示的特点。

报警模块(包含八位数码管,LED灯与蜂鸣器) 本报警电路由三个部分组成,让密码错误次数为3次时,触发报警电路,数码管滚动显示8,蜂鸣器持续间断发出声响,矩阵键盘锁死,D1灯亮,8秒后解除报警。

本代码特点: ①在进行八位数码管动态多位的同时显示时,采用了break语句,以正在输入的位数为判断标准,如正在输入 第三位密码时,将会使1至3位密码动态循环显示,利用视觉暂留形成多位密码同时显示的效果。 ②修改密码共有四道程序,标志位分别位mark01,mark02,mark03,mark04。 第一遍为输入一遍正确密码,若密码正确mark01置1,并按密码重置键进行修改密码程序。 第二遍为重复输入原密码,若正确mark02置1同时使mark01归零。 第三遍为输入新密码,输入完六位密码后临时保存此密码,并使mark03置1,mark02归零。 第四遍为重复输入新密码,输入完成后mark04置1,mark03归零。 最后为密码判断,若新密码两次输入一致,则修改密码成功,标志位mark04归零。

注意,在进行按键程序的编写时,注意按键延时消抖与弹起! 其余基本都在代码的注释中

程序总代码:

#include #include #define uchar unsigned char #define uint unsigned int #define GPIO P1 #define count 50000 //计数值,约为0.05s #define TH (65536-count)/256 //定时器初始化设置 #define TL (65536-count)%256 sbit LSA=P2^2; //数码管位选设置 sbit LSB=P2^3; sbit LSC=P2^4; sbit bee=P1^5; sbit LED=P2^0; int key=0; //矩阵键盘按键标志 int password[6]; //输入数字数组 int right[6]={6,6,6,6,6,6}; //正确密码数组 int temporary[6]; //零时密码数组 uchar code DSY[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数字数组 void delay(int n) //延时函数 { int t; while(n--) { for(t=0;t


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3