使用Keil uVision5软件编程控制两个led 主程序设定6位密码 矩阵键盘输入密码正确 第一个灯亮。连续三次输入错误,第二个灯亮 c51单片机程序
时间: 2023-12-15 15:07:36 浏览: 94
c51单片机点亮第一个led灯的程序keil文件
3星 · 编辑精心推荐
好的,以下是一个基于Keil uVision5软件编写的C51单片机程序示例,实现了你所描述的功能:
```C
#include <REG52.H>
// 密码设定为123456
const unsigned char PASSWORD[6] = {1, 2, 3, 4, 5, 6};
// 矩阵键盘的行列引脚定义
#define ROWS 4
#define COLS 3
sbit ROW1 = P2^0;
sbit ROW2 = P2^1;
sbit ROW3 = P2^2;
sbit ROW4 = P2^3;
sbit COL1 = P2^4;
sbit COL2 = P2^5;
sbit COL3 = P2^6;
// LED引脚定义
sbit LED1 = P1^0;
sbit LED2 = P1^1;
// 计数器和标志位
unsigned char count = 0;
bit success = 0;
// 扫描矩阵键盘,返回按键值,0表示未按键
unsigned char getKey() {
unsigned char key = 0;
ROW1 = 0; ROW2 = 1; ROW3 = 1; ROW4 = 1;
if (COL1 == 0) key = 1;
if (COL2 == 0) key = 2;
if (COL3 == 0) key = 3;
ROW1 = 1; ROW2 = 0; ROW3 = 1; ROW4 = 1;
if (COL1 == 0) key = 4;
if (COL2 == 0) key = 5;
if (COL3 == 0) key = 6;
ROW1 = 1; ROW2 = 1; ROW3 = 0; ROW4 = 1;
if (COL1 == 0) key = 7;
if (COL2 == 0) key = 8;
if (COL3 == 0) key = 9;
ROW1 = 1; ROW2 = 1; ROW3 = 1; ROW4 = 0;
if (COL1 == 0) key = 10;
if (COL2 == 0) key = 0;
if (COL3 == 0) key = 11;
return key;
}
// 检查输入的密码是否正确
bit checkPassword(unsigned char key) {
static unsigned char index = 0;
if (key == PASSWORD[index]) {
index++;
if (index >= 6) {
index = 0;
count = 0;
return 1;
}
} else {
index = 0;
}
return 0;
}
void main() {
unsigned char key;
while (1) {
// 扫描矩阵键盘
key = getKey();
if (key != 0) {
if (checkPassword(key)) {
// 输入正确
LED1 = 1;
success = 1;
} else {
// 输入错误
count++;
if (count >= 3) {
LED2 = 1;
}
}
}
}
}
```
这个程序使用了一个名为`getKey()`的函数来扫描矩阵键盘,返回按键值。如果有按键按下,则调用`checkPassword()`函数来检查输入的密码是否正确。如果密码正确,则点亮第一个LED;如果连续三次输入错误,则点亮第二个LED。
请注意,此示例程序并未经过完整测试和优化,仅供参考。实际上,你需要根据具体的硬件和需求进行适当的修改和完善。
阅读全文