如何写51单片机密码锁液晶显示屏结合按键输入“111222”的代码

如何写51单片机密码锁液晶显示屏结合按键输入“111222”的代码

针对你的问题结合chatgpt知识库请参考以下内容:
下面是一个简单的例子,展示了如何将51单片机、密码锁显示屏和按键输入结合起来实现“111222”的密码输入:

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

// 定义LCD的各引脚
sbit LCD_RS = P3^7;
sbit LCD_RW = P3^6;
sbit LCD_E  = P3^5;
sbit LCD_D4 = P2^0;
sbit LCD_D5 = P2^1;
sbit LCD_D6 = P2^2;
sbit LCD_D7 = P2^3;

// 声明函数
void LCD_Init();
void LCD_Write_Command(uchar CMD);
void LCD_Write_Data(uchar DAT);
void LCD_Display_Str(uchar row, uchar col, uchar *str);
uchar KeyDriver();
void delay_ms(uint ms);

void main() {
  uchar password[7] = "111222";  // 设置密码为111222
  uchar input[7];  // 用户输入的密码
  uchar i = 0;  // 数组下标

  LCD_Init();  // 初始化LCD显示屏
  LCD_Display_Str(1, 1, "Enter Password:");
  
  while (i < 6) {  // 用户输入六位密码
    uchar key = KeyDriver();  // 等待用户按键
    if (key != 0) {  // 如果有按键按下
      input[i] = key + '0';  // 将按键转换成字符
      LCD_Write_Data('*');  // 在LCD上以星号代替输入的数字
      i++;  // 继续输入下一个数字
      delay_ms(200);  // 延时一段时间,以免按键误触
    }
  }

  if (strcmp(input, password) == 0) {  // 如果输入密码正确
    LCD_Display_Str(2, 1, "Password Correct");  // 在LCD上显示密码正确
  } else {
    LCD_Display_Str(2, 1, "Password Error");  // 在LCD上显示密码错误
  }

  while (1);  // 循环等待
}

// 初始化LCD显示屏
void LCD_Init() {
  LCD_Write_Command(0x02);  // 回到起始位置
  LCD_Write_Command(0x28);  // 设置为2行显示,5x8点阵字符
  LCD_Write_Command(0x0c);  // 关闭光标显示
  LCD_Write_Command(0x06);  // 光标移动时不显示字符
  LCD_Write_Command(0x01);  // 清屏
}

// 向LCD中写入命令
void LCD_Write_Command(uchar CMD) {
  LCD_RS = 0;  // RS=0表示写入命令
  P2 = CMD&0xF0;
  LCD_E = 1;
  delay_ms(1);
  LCD_E = 0;
  P2 = (CMD<<4)&0xF0;
  LCD_E = 1;
  delay_ms(1);
  LCD_E = 0;
  delay_ms(1);
}

// 向LCD中写入数据
void LCD_Write_Data(uchar DAT) {
  LCD_RS = 1;  // RS=1表示写入数据
  P2 = DAT&0xF0;
  LCD_E = 1;
  delay_ms(1);
  LCD_E = 0;
  P2 = (DAT<<4)&0xF0;
  LCD_E = 1;
  delay_ms(1);
  LCD_E = 0;
  delay_ms(1);
}

// 在LCD上显示字符串
void LCD_Display_Str(uchar row, uchar col, uchar *str) {
  uint pos = 0x80 + (row-1)*0x40 + col-1;
  LCD_Write_Command(pos);  // 设置光标位置
  while (*str != '\0') {  // 显示字符串
    LCD_Write_Data(*str);
    str++;
  }
}

// 等待用户按键
uchar KeyDriver() {
  uchar keyVal;
  P1 = 0xff;  // 将P1口设置为输入状态,下拉电阻上拉
  if (P1 != 0xff) {  // 如果有按键按下
    switch(P1) {  // 判断按键值
      case(0xfe): keyVal = 1; break;
      case(0xfd): keyVal = 2; break;
      case(0xfb): keyVal = 3; break;
      case(0xf7): keyVal = 4; break;
      case(0xef): keyVal = 5; break;
      default: keyVal = 0; break;
    }
  } else {
    keyVal = 0;
  }
  return keyVal;
}

// 延时函数
void delay_ms(uint ms) {
  uint i, j;
  for (i = 0; i < ms; i++) {
    for (j = 0; j < 120; j++);
  }
}

这个例子将使用P2口控制LCD显示屏,P1口控制按键输入。在代码中,首先定义了一个密码为“111222”,同时在LCD上显示“Enter Password:”提示信息。然后程序开始等待用户输入六位密码,每次输入数字时将在LCD上以星号代替输入的数字,以保护密码安全性。当用户输入完成后,代码将比较用户输入的密码和预设密码是否相等,并在LCD上指示用户输入是否正确。