【Proteus仿真】【51单片机】基于51单片机密码锁

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示

2、矩阵按键​

3、掉电存储保护,修改密码,两种用户模式

4、密码输出错误提示,超过次数警报

5、密码输出正确,指示灯点亮

二、使用步骤

  • 按下开机键启动系统,LCD显示屏提示"输入密码"并显示光标闪烁‌
  • 通过4×4矩阵键盘输入数字密码(输入时以"*"号显示保密)‌
  • 按"#"键确认输入,系统验证密码‌

三、硬件资源

1、51单片机核心模块

2、按键模块

3、24C02存储模块

4、蜂鸣器模块

5、继电器模块

6、LCD1602显示模块

四、软件设计

#include <reg52.h> //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535

uchar i; //变量

sbit relay = P2^2; //继电器定义

sbit beep = P3^3; //蜂鸣器定义

sbit beiguan = P2^3; //背光

uint flag_time;

uint flag_guan;

uchar dis_smg[7]={0};

uchar password[7]={0}; //密码保存

uchar password_bj[7]={0}; //密码比较

uchar code password_r[6] = {1,2,3,1,2,3} ;

uchar code password_gl[6] = {5,2,0,0,2,5} ;

uchar password_xg[6]; //密码修改

uchar flag_password; //密码正确否

uchar flag_password_cichu1;//密码错误次数

uchar flag_200ms=1; //200毫秒的变量

uchar menu_1,menu_i;

sbit scl = P2^1; //24c02信号引脚

sbit sda = P2^0; //24c02数据引脚

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i<q;i++)

for(j=0;j<120;j++);

}

sbit rs=P2^5; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit rw=P2^6; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit e =P2^7; //片选信号 下降沿触发

/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

while(q--);

}

/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602指令函数

* 输入 : 输入的指令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

rs=0; //写指令

rw=0; //对1602写操作

P0=com; //P0口对1602写指令数据

delay_uint(25);

e=1; //e=1使能信号

delay_uint(100); //延时一下等1602完成操作

e=0;

}

/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

rs=1; //写数据

rw=0; //对1602写操作

P0=dat; //P0口对1602写数据

delay_uint(25);

e=1; //e=1使能信号

delay_uint(100); //延时一下等1602完成操作

e=0;

}

/*********************光标控制***********************/

void lcd1602_guanbiao(uchar open_off,uchar add)

{

if(open_off == 1) //开光标

{

write_com(0x80+add); //将光标移动到秒个位

write_com(0x0f); //显示光标并且闪烁

}

else

{

write_com(0x0c); //关光标

}

}

/***********************lcd1602上显示两位十进制数************************/

void write_lcd2(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add); //1602写第一行的地址

else

write_com(0x80+0x40+add); //1602写第二行的地址

write_data(0x30+date/10%10); //显示十位数

write_data(0x30+date%10); //显示个位数

}

/***********************lcd1602上显示这字符函数************************/

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add); //1602写第一行的地址

else

write_com(0x80+0x40+add); //1602写第二行的地址

while(1)

{

if(*p == '\0') break; //\0字符串的结尾标志 break结束while循环 结束写字符

write_data(*p); //写数据

p++; //指针地址加1

}

}

五、实验现象

演示视频:

相关推荐
哎呦 你干嘛~1 小时前
plc单片机485通讯
单片机·嵌入式硬件
szxinmai主板定制专家2 小时前
基于 PC 的控制技术+ethercat+linux实时系统,助力追踪标签规模化生产,支持国产化
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
泡泡糖的中文规格书5 小时前
【硬件设计】LM358DR2G中文文档深度解读:高质量翻译与芯片特性全解析
嵌入式硬件·规格说明书·电路设计·运放·中文翻译·datasheet
czwxkn6 小时前
2STM32(stdl)GPIO输入
stm32·单片机·嵌入式硬件
码农三叔7 小时前
(9-1)电源管理与能源系统:电池选择与安全
人工智能·嵌入式硬件·安全·机器人·能源·人形机器人
qq_246646199 小时前
openclaw快速安装-windows版
windows·stm32·单片机
染予10 小时前
13.AD软件操作:原理图如何导入PCB及导入常见错误
嵌入式硬件
小莞尔11 小时前
【51单片机】【protues仿真】 基于51单片机波形发生器系统
c语言·单片机·嵌入式硬件·物联网·51单片机
码农三叔11 小时前
(9-2-01)电源管理与能源系统:能耗分析与功率管理(1)步行能耗估计
人工智能·嵌入式硬件·机器人·人机交互·能源·人形机器人