单片机密码锁用于AT89C52的代码

时间: 2023-07-09 13:39:22 浏览: 54
以下是一个基于AT89C52单片机的密码锁代码示例: ``` #include <reg52.h> // 引入AT89C52的头文件 sbit rs=P2^0; // 连接LCD的RS引脚 sbit rw=P2^1; // 连接LCD的RW引脚 sbit en=P2^2; // 连接LCD的EN引脚 sbit key1=P1^0; // 连接按键1 sbit key2=P1^1; // 连接按键2 sbit key3=P1^2; // 连接按键3 sbit key4=P1^3; // 连接按键4 unsigned char code password[4] = {0x31, 0x32, 0x33, 0x34}; // 预设的4位密码,这里设置为"1234" unsigned char input[4]; // 存储用户输入的4位密码 void delay_ms(unsigned int ms) // 延时函数 { unsigned int i,j; for(i=0;i<ms;i++) { for(j=0;j<120;j++); } } void write_com(unsigned char com) // 写命令函数 { rs=0; // 将RS引脚置为0,表示写入的是命令 rw=0; // 将RW引脚置为0,表示写入的是写操作 en=1; // 将EN引脚置为1,表示使能LCD P0=com; // 将命令写入P0口 delay_ms(1); // 延时1ms en=0; // 将EN引脚置为0,表示禁能LCD } void write_data(unsigned char dat) // 写数据函数 { rs=1; // 将RS引脚置为1,表示写入的是数据 rw=0; // 将RW引脚置为0,表示写入的是写操作 en=1; // 将EN引脚置为1,表示使能LCD P0=dat; // 将数据写入P0口 delay_ms(1); // 延时1ms en=0; // 将EN引脚置为0,表示禁能LCD } void init() // LCD初始化函数 { write_com(0x38); // 设置显示模式为8位数据,2行显示,5x7点阵字符 write_com(0x0c); // 打开显示,关闭光标 write_com(0x06); // 文本显示不动,光标右移 write_com(0x01); // 清屏 write_com(0x80); // 光标移动到第一行第一列 } void main() { unsigned char i; unsigned char success=0; init(); // 初始化LCD while(1) { if(key1==0) // 如果按键1被按下 { input[0]='1'; // 将用户输入的字符存储到input数组中 write_data('*'); // 在LCD上显示星号 delay_ms(100); // 延时100ms } else if(key2==0) // 如果按键2被按下 { input[1]='2'; // 将用户输入的字符存储到input数组中 write_data('*'); // 在LCD上显示星号 delay_ms(100); // 延时100ms } else if(key3==0) // 如果按键3被按下 { input[2]='3'; // 将用户输入的字符存储到input数组中 write_data('*'); // 在LCD上显示星号 delay_ms(100); // 延时100ms } else if(key4==0) // 如果按键4被按下 { input[3]='4'; // 将用户输入的字符存储到input数组中 write_data('*'); // 在LCD上显示星号 delay_ms(100); // 延时100ms for(i=0;i<4;i++) // 检查用户输入的密码是否正确 { if(input[i]!=password[i]) // 如果有一个字符不匹配,终止循环 { break; } if(i==3) // 如果全部字符都匹配,设置success标志位并终止循环 { success=1; break; } } if(success==1) // 如果密码正确 { write_com(0x01); // 清屏 write_com(0x80); // 光标移动到第一行第一列 write_data('S'); // 在LCD上显示"Success!" write_data('u'); write_data('c'); write_data('c'); write_data('e'); write_data('s'); write_data('s'); delay_ms(2000); // 延时2秒 write_com(0x01); // 清屏 write_com(0x80); // 光标移动到第一行第一列 write_data('P'); // 在LCD上显示"Password:" write_data(' '); // 在LCD上显示一个空格 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 success=0; // 将success标志位清零,准备下一次验证 } else // 如果密码错误 { write_com(0x01); // 清屏 write_com(0x80); // 光标移动到第一行第一列 write_data('E'); // 在LCD上显示"Error!" write_data('r'); write_data('r'); write_data('o'); write_data('r'); delay_ms(2000); // 延时2秒 write_com(0x01); // 清屏 write_com(0x80); // 光标移动到第一行第一列 write_data('P'); // 在LCD上显示"Password:" write_data(' '); // 在LCD上显示一个空格 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 write_data('*'); // 在LCD上显示一个星号 for(i=0;i<4;i++) // 将input数组清零,准备下一次输入 { input[i]=0; } } } } } ``` 这个代码示例实现了一个简单的四位密码锁,用户需要依次按下预设的四个按键来输入密码,如果输入正确,LCD上会显示"Success!",并且在两秒后自动清屏;如果输入错误,LCD上会显示"Error!",并且在两秒后自动清屏。用户每次输入完成后,LCD上会重新显示"Password: ****",表示等待下一次输入。 需要注意的是,这个代码示例仅供参考,实际应用中可能需要根据具体情况进行修改和优化。另外,建议使用更加安全可靠的密码算法,避免密码被破解。

相关推荐

最新推荐

recommend-type

基于AT89C52单片机的语音录放系统实现

文中给出以单片机AT89C52为核心构成的语音录放系统原理图及软件流程。通过实验验证该语音录放系统录音和放音效果良好,单片机控制相当准确。在应用方面,将该系统作为一个模块可与其他功能电路集成,实现各种功能...
recommend-type

基于AT89C52单片机的SD卡读写设计

单片机使用12MHz的晶体振荡器时,读写速度和功耗都基本...本文详细阐述了用AT89C52单片机对SD卡进行操作的过程,提出了一种不带SD卡控制器,MCU读写SD卡的方法,实现了SD卡在电能监测及无功补偿数据采集系统中的用途。
recommend-type

基于AT89C52单片机最小系统接口电路设计

AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复擦写的程序存储器和256B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,...
recommend-type

51单片机(AT89C52)一键多功能(短按、长按)

短按(按下持续时间小于3s)一次数码管显示加1,同时流水灯计数加1。长按(按下持续时间大于3s)时,数码管显示每500ms加1,同时流水灯每500ms计数加1。
recommend-type

基于89C52单片机的新型指纹智能锁 开题报告

本次设计指纹识别电子密码锁是基于89C52单片机的新型指纹锁,由IO口拓展,与单片机实现通信,从而实现指纹的录入、存储、比对,并通过HS12864-15C液晶显示出指纹采集存储的过程和比对的结果。指纹电子密码锁安全可靠...
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

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

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