普中51单片机密码锁工程

        接下来我们将实操普中51单片机中第一个相对完整的工程建立:密码锁。

        本章用到的代码以及相关原理大多来自于笔者的上一篇文章,如果不熟悉的可以移步至上一篇文章查看相应信息。

        首先再次熟悉一下独立按键的电路图:

         我们开始要做的依然是创建实现键盘扫描的文件:MatrixKey.c和MatrixKey.h:

         在主函数文件中我们就可以直接调用这个繁琐的函数以简化主函数的过程。

        我们要实现的主要功能是判断输入的密码是否正确以及对于已输入密码的更改,这些过程均在液晶显示屏上呈现,所以我们依然要用到LCD1602函数库(B站江协)以及Delay函数(按键消抖)。

        我们可以事先定义一个变量KeyNum用于接收MatrixKey函数中的返回值,同时我们要注意的是,当先前输入了一个错误密码,并且屏幕上显示了“ERROR”后,我们再次输入正确密码后,屏幕上会显示“OKROR”,并不会只显示“OK”。这是因为信息发生了覆盖,没有发生替换。所以我要在该分支if语句内开头加入初始化屏幕的操作,并且重新配置相关内容,这在下面的代码中均有体现:

 

 

         下面是实验结果:

                  密码锁

        本章是普中51单片机基础学习中的第一个相对完整的项目,代码相对较长,希望能够帮助到大家!

普中51单片机开发板的密码锁可以通过以下步骤实现: 1. 接一个矩阵键盘或者数字键盘到开发板上,并确保能够正确读取键盘输入。 2. 在程序中定义一个预设的密码,比如 "1234"。 3. 当用户输入密码时,将每个按键的值存储在一个数组中,直到用户输入完整的密码。 4. 将用户输入的密码与预设的密码进行比较,如果匹配则开锁,否则提示密码错误。 5. 可以加入一些安全措施,比如设定连续输错密码次数上限,超过次数则锁定系统等等。 以下是一个简单的密码锁示例程序,可以根据自己的需求进行修改: ```c #include <reg51.h> #include <stdio.h> #define PASSWORD_LENGTH 4 // 设置密码长度为4位 #define MAX_ATTEMPTS 3 // 设置最大尝试次数为3次 unsigned char password[PASSWORD_LENGTH] = {'1', '2', '3', '4'}; // 预设的密码 unsigned char attempt[PASSWORD_LENGTH] = {0}; // 用户输入的密码 unsigned char attempts = 0; // 当前尝试次数 void check_password() { unsigned char i; for (i = 0; i < PASSWORD_LENGTH; i++) { if (attempt[i] != password[i]) { printf("Password incorrect!\n"); return; } } printf("Password correct! Door unlocked.\n"); // 接下来可以控制开锁电路 } void main() { unsigned char key, i; while (1) { // 读取用户输入的密码 for (i = 0; i < PASSWORD_LENGTH; i++) { key = read_key(); // 读取键盘输入的值 attempt[i] = key; printf("*"); // 显示*表示已经输入 } printf("\n"); attempts++; // 检查密码 check_password(); // 检查尝试次数 if (attempts >= MAX_ATTEMPTS) { printf("Too many attempts! System locked.\n"); // 可以加入锁定系统的代码 while (1); // 锁定系统后进入死循环 } } } ``` 注意:以上代码仅为示例,实际应用中需要根据具体情况进行修改和完善,确保安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值