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);
}
针对实现基于单片机的密码锁系统,并将密码以*号加密形式显示的问题,可以通过以下步骤来完成:
确定单片机型号和所需软硬件。 在keil软件中选择单片机型号,根据系统需要确定所需的其他软硬件设备。
设计密码锁界面。 使用相应的开发板、液晶屏、按键等设备,设计并实现密码锁的基本界面,并将输入的密码以“*”号加密形式打印在屏幕上。
编写密码验证函数。 在程序中编写密码验证函数,将输入的密码与预设密码进行比较,判断其是否正确,并实现跳转到开锁界面或提示密码错误等操作。
加入防抄袭措施。 为了防止他人通过复制程序等方式泄露密码,可以在程序中加入防抄袭措施,比如对程序进行加密,或者将程序存储在只读存储器中等。
代码示例:
#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个按键来输入密码,若输入完成后,将输入密码与预设密码进行比较,判断其是否正确,并在屏幕上显示相应的提示信息。在输入密码时,将输入的字符以“*”号加密形式打印在屏幕上。