AT89C51单片机密码锁代码
时间: 2024-12-06 13:13:58 浏览: 25
Proteus仿真AT89C51电子密码锁
以下是一个基于AT89C51单片机的简单密码锁代码示例:
```c
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED = P1^0; // LED指示灯
sbit Buzzer = P1^1; // 蜂鸣器
uchar code Password[4] = {1, 2, 3, 4}; // 预设密码
uchar Input[4]; // 输入密码存储数组
uchar count = 0; // 输入计数
void Delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void Key_Scan() {
uchar key;
key = P3 & 0x0F; // 读取按键值
if(key != 0x0F) { // 有按键按下
Delay(10); // 消抖
if(key != 0x0F) { // 确认按键
switch(key) {
case 0x0E: key = 1; break;
case 0x0D: key = 2; break;
case 0x0B: key = 3; break;
case 0x07: key = 4; break;
}
Input[count++] = key; // 存储输入
while(!(P3 & 0x0F)); // 等待按键释放
}
}
}
void main() {
LED = 0; // 关闭LED
Buzzer = 0; // 关闭蜂鸣器
while(1) {
Key_Scan(); // 扫描按键
if(count == 4) { // 4位密码输入完成
count = 0; // 重置计数
if(Input[0] == Password[0] && Input[1] == Password[1] &&
Input[2] == Password[2] && Input[3] == Password[3]) {
// 密码正确
LED = 1; // 点亮LED
Buzzer = 1; // 启动蜂鸣器
Delay(1000); // 延时1秒
LED = 0; // 关闭LED
Buzzer = 0; // 关闭蜂鸣器
} else {
// 密码错误
LED = 1; // 点亮LED
Delay(500); // 延时0.5秒
LED = 0; // 关闭LED
}
// 清空输入数组
Input[0] = 0;
Input[1] = 0;
Input[2] = 0;
Input[3] = 0;
}
}
}
```
这段代码实现了一个简单的4位密码锁功能:
1. 使用P1.0控制LED指示灯,P1.1控制蜂鸣器。
2. 预设密码存储在Password数组中。
3. Key_Scan函数用于扫描按键输入,并将输入存储在Input数组中。
4. 当输入满4位时,程序会比较输入密码和预设密码。
5. 如果密码正确,LED会亮起,蜂鸣器响起;如果密码错误,LED会闪烁一次。
阅读全文