如何写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上指示用户输入是否正确。