keilproject 矩阵键盘密码锁 要求:设置密码为258664,如果输入错误会给出提示,并引导用户再次输入。输入正确蜂鸣器连续间歇性的响三声
时间: 2024-05-14 22:13:59 浏览: 12
以下是示例代码:
```c
#include <reg52.h>
sbit beep=P1^5; // 蜂鸣器连接的IO口
void delay(unsigned int t) // 延时函数,单位为毫秒
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 112; j++);
}
void main()
{
unsigned char pwd[6] = {2, 5, 8, 6, 6, 4}; // 设置的密码
unsigned char input[6]; // 用户输入的密码
unsigned char i, j;
while (1)
{
for (i = 0; i < 6; i++) // 循环读取用户输入的6个数字
{
input[i] = 0;
for (j = 0; j < 4; j++) // 每个数字有4个键对应,循环读取4个键的状态
{
switch (j)
{
case 0:
P2 = 0xfe;
if (P2_4 == 0) input[i] = 1;
break;
case 1:
P2 = 0xfd;
if (P2_4 == 0) input[i] = 2;
break;
case 2:
P2 = 0xfb;
if (P2_4 == 0) input[i] = 3;
break;
case 3:
P2 = 0xf7;
if (P2_4 == 0) input[i] = 4;
break;
}
if (input[i] != 0) // 如果已经读取到一个键的状态,则等待松开
{
while (P2_4 == 0);
delay(50); // 延时一段时间,避免误触
break;
}
}
if (input[i] == 0) // 如果6个键都没有被按下,则重新输入
{
i = 0;
break;
}
}
for (i = 0; i < 6; i++) // 检查输入的密码是否正确
{
if (input[i] != pwd[i])
{
beep = 1;
delay(100); // 蜂鸣器响一声
beep = 0;
delay(100);
break;
}
}
if (i == 6) // 如果密码输入正确,则蜂鸣器响三声
{
for (j = 0; j < 3; j++)
{
beep = 1;
delay(200);
beep = 0;
delay(200);
}
}
}
}
```
该代码使用了一个6x4的矩阵键盘,每个数字有4个键对应,分别对应数字键、确认键、取消键和清除键。用户输入完一个数字后需要按确认键,输入完整个密码后按确认键结束。如果输入错误,蜂鸣器会响一声并引导用户再次输入;如果输入正确,蜂鸣器会响三声。