基于单片机的密码锁系统 输入密码时将密码显示*号加密隐藏

keil软件上 基于单片机开发一个门禁系统 输入密码时显示*号而不是输入的数字,从而做到隐藏密码


#include <reg51.h>
#include <stdio.h>

// 定义字符数组存储密码
char password[6] = {0};
// 预设密码为123456
char preset_pwd[6] = {"123456"};

// 函数:读取用户输入的密码
void read_pwd() {
    int i = 0;
    char ch;
    while (i < 6) {
        // 从串口读取一个字符
        ch = getchar();
        // 如果输入的是回车符,则表示输入结束
        if (ch == '\r') break;
        // 否则将输入存储到数组中,并在串口上显示*号
        password[i++] = ch;
        putchar('*');
    }
    putchar('\n');
}

// 函数:比较输入密码是否正确
int check_pwd() {
    int i;
    for (i = 0; i < 6; i++) {
        if (password[i] != preset_pwd[i]) {
            // 如果有一个字符不匹配,则认为密码输入错误
            return 0;
        }
    }
    // 如果全部匹配,则认为密码输入正确
    return 1;
}

// 主函数
void main() {
    // 初始化串口
    // ...

    // 读取用户输入的密码
    printf("Please input password: ");
    read_pwd();

    // 检查密码是否正确
    if (check_pwd()) {
        printf("Password is correct, the door is open.\n");
    }
    else {
        printf("Password is incorrect, access denied.\n");
    }

    while (1);
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/336532
  • 这篇博客也不错, 你可以看下[沁恒单片机系列]一、Keil中添加沁恒单片机型号
  • 除此之外, 这篇博客: keil5安装到中文路径,导致软件、文件打不开,或打开文件为灰色,无法编译运行中的 替换为现在的英文文件夹名称 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

  • 您还可以看一下 田德华老师的小程序·云开发实战 微信朋友圈所有功能课程中的 朋友圈显示发布的视频小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对实现基于单片机的密码锁系统,并将密码以*号加密形式显示的问题,可以通过以下步骤来完成:

    1. 确定单片机型号和所需软硬件。 在keil软件中选择单片机型号,根据系统需要确定所需的其他软硬件设备。

    2. 设计密码锁界面。 使用相应的开发板、液晶屏、按键等设备,设计并实现密码锁的基本界面,并将输入的密码以“*”号加密形式打印在屏幕上。

    3. 编写密码验证函数。 在程序中编写密码验证函数,将输入的密码与预设密码进行比较,判断其是否正确,并实现跳转到开锁界面或提示密码错误等操作。

    4. 加入防抄袭措施。 为了防止他人通过复制程序等方式泄露密码,可以在程序中加入防抄袭措施,比如对程序进行加密,或者将程序存储在只读存储器中等。

    代码示例:

    #include<reg52.h>  //引入单片机头文件
    
    sbit key1 = P2^0;   //定义按键1 端口
    sbit key2 = P2^1;   //定义按键2 端口
    sbit key3 = P2^2;   //定义按键3 端口
    sbit key4 = P2^3;   //定义按键4 端口
    
    void delayms(unsigned int ms){
        unsigned int i,j;
        for(i=0;i<ms;i++)
            for(j=0;j<1000;j++);
    }
    
    void main(){
        unsigned char pwd[4] = {'1','2','3','4'}; //预设密码,可以根据需要修改
        unsigned char inputPwd[4];  //用于存放输入的密码
        unsigned char curPos = 0;   //当前输入密码的位置
        unsigned char i = 0;    //循环计数器
        while(1){
            if(key1 == 0){  //判断按键1是否按下
                delayms(20);    //延时一段时间
                if(key1 == 0){  //再次检查按键1是否按下
                    inputPwd[curPos++] = '1';   //将字符'1'加入输入密码中
                    P1 = '*';   //将屏幕上的字符改为“*”号
                    if(curPos == 4){    //若输入完成
                        for(i=0;i<4;i++){  //比较输入密码和预设密码是否一致
                            if(inputPwd[i] != pwd[i])
                                break;
                        }
                        if(i==4)    //若一致,打开锁
                            P1 = 'O';   //在屏幕上显示“O”
                        else        //若不一致,提示密码错误
                            P1 = 'E';   //在屏幕上显示“E”
                        curPos = 0; //重置输入密码的位置
                    }
                }
            }
            if(key2 == 0){  //判断按键2是否按下,类似地进行处理
                delayms(20);
                if(key2 == 0){
                    inputPwd[curPos++] = '2';
                    P1 = '*';
                    if(curPos == 4){
                        for(i=0;i<4;i++){
                            if(inputPwd[i] != pwd[i])
                                break;
                        }
                        if(i==4)
                            P1 = 'O';
                        else
                            P1 = 'E';
                        curPos = 0;
                    }
                }
            }
            if(key3 == 0){  //判断按键3是否按下
                delayms(20);
                if(key3 == 0){  //再次检查按键3是否按下
                    inputPwd[curPos++] = '3';   //将字符'3'加入输入密码中
                    P1 = '*';   //将屏幕上的字符改为“*”号
                    if(curPos == 4){    //若输入完成
                        for(i=0;i<4;i++){  //比较输入密码和预设密码是否一致
                            if(inputPwd[i] != pwd[i])
                                break;
                        }
                        if(i==4)    //若一致,打开锁
                            P1 = 'O';   //在屏幕上显示“O”
                        else        //若不一致,提示密码错误
                            P1 = 'E';   //在屏幕上显示“E”
                        curPos = 0; //重置输入密码的位置
                    }
                }
            }
            if(key4 == 0){  //判断按键4是否按下,类似地进行处理
                delayms(20);
                if(key4 == 0){
                    inputPwd[curPos++] = '4';
                    P1 = '*';
                    if(curPos == 4){
                        for(i=0;i<4;i++){
                            if(inputPwd[i] != pwd[i])
                                break;
                        }
                        if(i==4)
                            P1 = 'O';
                        else
                            P1 = 'E';
                        curPos = 0;
                    }
                }
            }
        }
    }
    

    说明: 以上代码仅为示例,可以根据需要进行修改和完善。在代码中,使用了4个按键来输入密码,若输入完成后,将输入密码与预设密码进行比较,判断其是否正确,并在屏幕上显示相应的提示信息。在输入密码时,将输入的字符以“*”号加密形式打印在屏幕上。