51单片机lcd矩阵键盘密码锁程序初始6位密码
时间: 2023-11-10 13:05:06 浏览: 68
以下是一个基于51单片机和LCD矩阵键盘的简单密码锁程序,初始密码为"123456":
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P1^0; //LCD1602的接口定义
sbit RW = P1^1;
sbit EN = P1^2;
sbit k1 = P3^0; //矩阵键盘的接口定义
sbit k2 = P3^1;
sbit k3 = P3^2;
sbit k4 = P3^3;
sbit k5 = P3^4;
sbit k6 = P3^5;
sbit k7 = P3^6;
sbit k8 = P3^7;
uchar password[6] = {'1', '2', '3', '4', '5', '6'}; //初始密码
uchar input[6]; //输入的密码
uchar i = 0; //计数器
void delayms(uint x) //延时函数
{
uint i, j;
for(i = x; i > 0; i--)
for(j = 110; j > 0; j--);
}
void init() //LCD1602初始化函数
{
delayms(15);
RS = 0;
RW = 0;
EN = 1;
P0 = 0x38;
EN = 0;
delayms(5);
EN = 1;
P0 = 0x38;
EN = 0;
delayms(5);
EN = 1;
P0 = 0x38;
EN = 0;
delayms(5);
EN = 1;
P0 = 0x0C;
EN = 0;
delayms(5);
EN = 1;
P0 = 0x06;
EN = 0;
delayms(5);
EN = 1;
P0 = 0x01;
EN = 0;
delayms(5);
}
void write_com(uchar com) //写命令函数
{
RS = 0;
RW = 0;
EN = 1;
P0 = com;
EN = 0;
delayms(5);
}
void write_data(uchar dat) //写数据函数
{
RS = 1;
RW = 0;
EN = 1;
P0 = dat;
EN = 0;
delayms(5);
}
void display(uchar *s) //显示函数
{
while(*s != '\0')
write_data(*s++);
}
void main()
{
init();
write_com(0x80);
display("Enter Password:");
while(1)
{
if(k1 == 0) //按下1键
{
input[i] = '1';
i++;
delayms(10);
while(k1 == 0);
}
if(k2 == 0) //按下2键
{
input[i] = '2';
i++;
delayms(10);
while(k2 == 0);
}
if(k3 == 0) //按下3键
{
input[i] = '3';
i++;
delayms(10);
while(k3 == 0);
}
if(k4 == 0) //按下4键
{
input[i] = '4';
i++;
delayms(10);
while(k4 == 0);
}
if(k5 == 0) //按下5键
{
input[i] = '5';
i++;
delayms(10);
while(k5 == 0);
}
if(k6 == 0) //按下6键
{
input[i] = '6';
i++;
delayms(10);
while(k6 == 0);
}
if(k7 == 0) //按下7键(确认键)
{
if(i == 6) //输入了6位密码
{
uchar j;
for(j = 0; j < 6; j++)
{
if(input[j] != password[j]) //密码错误
{
write_com(0xC0);
display("Wrong Password!");
delayms(1000);
write_com(0xC0);
display("Enter Password:");
i = 0;
break;
}
}
if(j == 6) //密码正确
{
write_com(0xC0);
display("Password Correct");
delayms(1000);
write_com(0xC0);
display("Enter Password:");
i = 0;
}
}
else //输入的密码不足6位
{
write_com(0xC0);
display("Input Incomplete");
delayms(1000);
write_com(0xC0);
display("Enter Password:");
i = 0;
}
while(k7 == 0);
}
if(k8 == 0) //按下8键(清除键)
{
write_com(0xC0);
display("Enter Password:");
i = 0;
while(k8 == 0);
}
if(i >= 6) //输入的密码超过6位
{
write_com(0xC0);
display("Password Too Long");
delayms(1000);
write_com(0xC0);
display("Enter Password:");
i = 0;
}
}
}
```
注意:此代码仅供参考,具体实现要根据实际情况进行调整和优化。