51单片机简易按键密码锁两个独立按键控制数码管显示密码,当密码达到设定值时,呼吸灯闪烁
时间: 2024-02-05 07:45:21 浏览: 151
以下为51单片机简易按键密码锁的代码:
```c
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit D1 = P2^2;
sbit D2 = P2^3;
sbit D3 = P2^4;
sbit D4 = P2^5;
sbit B1 = P3^2;
sbit B2 = P3^3;
sbit LED = P1^0;
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uchar password[4] = {1, 2, 3, 4}; // 设置密码为1234
uchar input[4] = {0}; // 输入的密码
uchar index = 0; // 当前输入的数字索引
void delay(uint x)
{
uint i, j;
for (i = x; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(uchar num)
{
D1 = D2 = D3 = D4 = 1;
P0 = table[num];
switch (index) { // 根据当前输入的数字索引控制数码管
case 0:
D1 = 0;
break;
case 1:
D2 = 0;
break;
case 2:
D3 = 0;
break;
case 3:
D4 = 0;
break;
default:
break;
}
}
void check_password()
{
uchar i;
for (i = 0; i < 4; i++) {
if (input[i] != password[i]) // 判断输入的密码是否正确
return;
}
LED = 1; // 开启呼吸灯
while (1) {
for (i = 0; i < 255; i++) { // 呼吸灯闪烁
LED = i;
delay(5);
}
for (i = 255; i > 0; i--) {
LED = i;
delay(5);
}
}
}
void main()
{
uchar i;
while (1) {
if (!B1) { // 按下第一个按键
delay(10);
if (!B1) {
input[index++] = 1; // 输入数字1
if (index == 4) { // 输入完毕,判断密码是否正确
check_password();
index = 0;
}
}
while (!B1); // 等待按键松开
}
if (!B2) { // 按下第二个按键
delay(10);
if (!B2) {
input[index++] = 2; // 输入数字2
if (index == 4) { // 输入完毕,判断密码是否正确
check_password();
index = 0;
}
}
while (!B2); // 等待按键松开
}
for (i = 0; i < 10; i++) { // 显示当前输入的密码
display(input[index]);
delay(1);
}
}
}
```
该代码通过两个独立按键控制数码管显示输入的密码,并在输入正确的密码后开启呼吸灯闪烁。其中,密码被设置为1234,并且输入的密码必须与设置的密码完全一致才能开启呼吸灯。在输入错误的密码时,程序不会做出任何响应,直到输入正确的密码为止。
阅读全文