使用Keil uVision5软件编程控制两个led 主程序设定6位密码 矩阵键盘输入密码正确 第一个灯亮。连续三次输入错误,第二个灯亮 89c51单片机程序 p1引脚控制键盘 p2引脚控制灯
时间: 2023-12-15 19:06:54 浏览: 83
以下是示例代码,用于控制两个LED并通过矩阵键盘输入密码的验证:
```c
#include <reg89x51.h>
sbit LED1 = P2^0;
sbit LED2 = P2^1;
/* 定义矩阵键盘的行列引脚 */
sbit ROW1 = P1^0;
sbit ROW2 = P1^1;
sbit ROW3 = P1^2;
sbit ROW4 = P1^3;
sbit COL1 = P1^4;
sbit COL2 = P1^5;
sbit COL3 = P1^6;
/* 定义密码 */
unsigned char password[6] = {'1', '2', '3', '4', '5', '6'};
/* 定义变量用于存储输入的密码 */
unsigned char input_password[6] = {0};
/* 定义变量用于记录输入密码的位置 */
unsigned char input_index = 0;
/* 定义变量用于记录输入密码错误的次数 */
unsigned char error_count = 0;
/* 延时函数 */
void delay(unsigned int t)
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 120; j++);
}
/* 检测矩阵键盘是否有按键按下 */
unsigned char key_scan()
{
unsigned char key_value = 0xFF;
ROW1 = 0; ROW2 = 1; ROW3 = 1; ROW4 = 1; // 扫描第1行
if(COL1 == 0) { delay(5); if(COL1 == 0) key_value = '1'; }
if(COL2 == 0) { delay(5); if(COL2 == 0) key_value = '2'; }
if(COL3 == 0) { delay(5); if(COL3 == 0) key_value = '3'; }
ROW1 = 1; ROW2 = 0; ROW3 = 1; ROW4 = 1; // 扫描第2行
if(COL1 == 0) { delay(5); if(COL1 == 0) key_value = '4'; }
if(COL2 == 0) { delay(5); if(COL2 == 0) key_value = '5'; }
if(COL3 == 0) { delay(5); if(COL3 == 0) key_value = '6'; }
ROW1 = 1; ROW2 = 1; ROW3 = 0; ROW4 = 1; // 扫描第3行
if(COL1 == 0) { delay(5); if(COL1 == 0) key_value = '7'; }
if(COL2 == 0) { delay(5); if(COL2 == 0) key_value = '8'; }
if(COL3 == 0) { delay(5); if(COL3 == 0) key_value = '9'; }
ROW1 = 1; ROW2 = 1; ROW3 = 1; ROW4 = 0; // 扫描第4行
if(COL1 == 0) { delay(5); if(COL1 == 0) key_value = '*'; }
if(COL2 == 0) { delay(5); if(COL2 == 0) key_value = '0'; }
if(COL3 == 0) { delay(5); if(COL3 == 0) key_value = '#'; }
return key_value;
}
/* 将输入的密码清空 */
void clear_input_password()
{
unsigned char i;
for(i = 0; i < 6; i++)
input_password[i] = 0;
input_index = 0;
}
/* 检查输入的密码是否正确 */
bit check_password()
{
unsigned char i;
for(i = 0; i < 6; i++)
if(input_password[i] != password[i])
return 0;
return 1;
}
void main()
{
unsigned char key_value;
LED1 = 0; LED2 = 0;
while(1)
{
key_value = key_scan();
if(key_value != 0xFF) // 如果有按键按下
{
input_password[input_index] = key_value;
input_index++;
if(input_index == 6) // 输入完成
{
if(check_password()) // 密码正确
{
LED1 = 1;
error_count = 0;
clear_input_password();
}
else // 密码错误
{
error_count++;
if(error_count >= 3) // 连续三次输入错误
{
LED2 = 1;
error_count = 0;
clear_input_password();
}
else
clear_input_password();
}
}
}
}
}
```
注意:该代码仅为示例代码,请根据具体情况进行修改和完善。
阅读全文