51单片机实现密码锁,并在数码管上显示输入的密码,密码错误时蜂鸣器发出警报

时间: 2023-12-18 11:03:08 浏览: 106
以下是一个简单的密码锁程序,使用了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(); } } ``` 本程序使用了一个循环来不断地读取按键输入,并将输入的数字显示在数码管上。当输入的数字数量达到密码长度时,程序会比较输入的密码和预设的密码是否相同,如果不同则蜂鸣器会发出警报,并清空密码输入数组和计数器以及数码管显示数组和计数器,等待重新输入。如果输入的密码和预设的密码相同,则程序会停止循环,表示密码正确。

相关推荐

最新推荐

recommend-type

密码锁设计(4×4键盘及8位数码管显示)

用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”...
recommend-type

51单片机驱动无源蜂鸣器

在学习过程中遇到如下例题:8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
recommend-type

基于FPGA的数字密码锁

自古以来人们对物品安全就十分重视,数字化的今天,电子锁正在逐步取代以往的机械锁被广泛运用在门禁、银行和保险柜。随着物联网技术的发展,人们对电子锁安全性和可靠性又提出了新的要求。本文所述的FPGA,即现场可...
recommend-type

单片机控制74HC595动态扫描数码管显示

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的...数据在SCK的上升沿输入,在RCK的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
recommend-type

51单片机并行口驱动LED数码管显示电路及程序

绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。