51单片机实现密码锁,并在数码管上显示输入的密码,密码错误时蜂鸣器发出警报
时间: 2023-12-18 21:03:08 浏览: 244
以下是一个简单的密码锁程序,使用了4个按键作为密码输入,使用了1个蜂鸣器作为警报器,以及1个4位数码管作为密码输入的显示器。本程序使用了C语言编写,使用Keil uVision进行编译和下载。
```c
#include <reg51.h>
// 定义按键IO口
sbit KEY1 = P3^2;
sbit KEY2 = P3^3;
sbit KEY3 = P3^4;
sbit KEY4 = P3^5;
// 定义数码管IO口
sbit DIG1 = P2^4;
sbit DIG2 = P2^5;
sbit DIG3 = P2^6;
sbit DIG4 = P2^7;
// 定义蜂鸣器IO口
sbit BUZZER = P1^5;
// 定义密码数组和密码长度
unsigned char password[] = {1, 2, 3, 4};
unsigned char password_length = 4;
// 定义密码输入数组和计数器
unsigned char input_password[4];
unsigned char input_count = 0;
// 定义数码管显示数组和计数器
unsigned char display_num[4] = {0, 0, 0, 0};
unsigned char display_count = 0;
// 定义延时函数
void delay(unsigned int n)
{
unsigned int i, j;
for(i=0;i<n;i++)
{
for(j=0;j<120;j++);
}
}
// 数码管显示函数
void display()
{
switch(display_count)
{
case 0:
DIG1 = 1;
P0 = display_num[0];
delay(1);
DIG1 = 0;
break;
case 1:
DIG2 = 1;
P0 = display_num[1];
delay(1);
DIG2 = 0;
break;
case 2:
DIG3 = 1;
P0 = display_num[2];
delay(1);
DIG3 = 0;
break;
case 3:
DIG4 = 1;
P0 = display_num[3];
delay(1);
DIG4 = 0;
break;
default:
break;
}
display_count++;
if(display_count >= 4)
{
display_count = 0;
}
}
// 主函数
void main()
{
// 初始化端口
P0 = 0x00;
P1 = 0x00;
P2 = 0x00;
P3 = 0xFF;
// 循环判断密码是否正确
while(1)
{
// 判断按键是否按下
if(KEY1 == 0)
{
// 将按键值存入密码输入数组
input_password[input_count] = 1;
input_count++;
// 显示输入的数字
display_num[3-input_count] = 1;
}
if(KEY2 == 0)
{
input_password[input_count] = 2;
input_count++;
display_num[3-input_count] = 2;
}
if(KEY3 == 0)
{
input_password[input_count] = 3;
input_count++;
display_num[3-input_count] = 3;
}
if(KEY4 == 0)
{
input_password[input_count] = 4;
input_count++;
display_num[3-input_count] = 4;
}
// 判断密码是否输入完毕
if(input_count >= password_length)
{
// 比较密码是否正确
unsigned char i;
for(i=0;i<password_length;i++)
{
if(input_password[i] != password[i])
{
// 密码错误,发出警报
BUZZER = 1;
delay(500);
BUZZER = 0;
// 清空密码输入数组和计数器
input_count = 0;
for(i=0;i<4;i++)
{
input_password[i] = 0;
}
// 清空数码管显示数组和计数器
display_count = 0;
for(i=0;i<4;i++)
{
display_num[i] = 0;
}
break;
}
}
// 密码正确,停止循环
if(i == password_length)
{
break;
}
}
// 数码管显示
display();
}
}
```
本程序使用了一个循环来不断地读取按键输入,并将输入的数字显示在数码管上。当输入的数字数量达到密码长度时,程序会比较输入的密码和预设的密码是否相同,如果不同则蜂鸣器会发出警报,并清空密码输入数组和计数器以及数码管显示数组和计数器,等待重新输入。如果输入的密码和预设的密码相同,则程序会停止循环,表示密码正确。
阅读全文