加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的蓝牙密码锁设计

10/22 09:09
1032
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成蓝牙密码锁的整个系统,其中包含中控部分、输入部分和输出部分。

中控部分采用了STC89C52单片机,其主要作用是获取输入部分数据,经过内部处理,控制输出部分。

输入由五部分组成:
第一部分是DS1302时钟模块,通过该模块可检测当前的时间;
第二部分是储存模块,采用AT24C02芯片,存储按键输入的信息;
第三部分是DS18B20温度检测模块,通过该模块可检测当前的温度;
第四部分是4*4矩阵键盘,按键主要功能有一键关门、显示时间、重新设置密码、取消键、确认键、输入密码;
第五部分是供电电路,给整个系统进行供电。

输出由三部分组成:
第一部分是LCD1602显示模块, 通过该模块可以显示门的开关状态、输入的密码显示、重置密码时的显示等;
第二部分是蓝牙模块,通过该模块可连接手机;
第三部分是蜂鸣器,当键盘锁定且有按键按下时,蜂鸣器作为按键音提醒。

#include "main.h"

#include "lcd1602.h"

#include "key.h"

#include "IIC.h"

#include "ds18b20.h"

#include "ds1302.h"

#include "uart.h"

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

变量定义

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

extern char time_buf[8];

extern uchar uart_num;

uint temp_value;

uint randdata;

uint randdata1;

uchar TimeOutCounter = 0;

uchar LeftOrRight = 0;

uchar key_bianma = 0; //按键编码标志位变量

uchar key_num = 0; //按键扫描标志位变量

uchar flag_key_en = 1; //按键使能标志位变量

uchar flag_reset_password = 0; //重置密码标志位变量

uchar flag_reset_adminpassword = 0;

uchar flag_stat_door = 0; //门状态标志位

uchar flag_reset_password_num = 0; //重置密码次数标志位变量

uchar flag_error_num = 0; //密码错误次数标志位变量

uchar flag_error_time = 180; //密码错误时间标志位变量

uchar password[6] = {1,2,3,4,5,6}; //初始密码数组

uchar adminpassword[6] = {1,2,3,4,5,6}; //初始管理员密码数组

uchar password_input[6] = {0,0,0,0,0,0}; //输入密码数组

uchar password_reset[6] = {0,0,0,0,0,0}; //重置密码数组

uchar password_num = 0; //密码数量标志位变量

uint time_jishi = 0; //10ms计时变量

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

函数声明

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

void Delay_function(uint x); //延时函数

void Key_function(void); //按键函数

void Ensure_function(void); //确定函数

void Reset_password_function(void); //重置密码函数

void Write_init_EEPROM();

void Timer0Init();

/****

******* 主函数

*****/

void main()

{

Timer0Init();

Uart_Init();

Ds1302_Init();

Lcd1602_Init(); //LCD1602初始化

Delay_function(50); //延时50ms

lcd1602_clean(); //清屏

Delay_function(50); //延时50ms

Init_IIC(); //总线初始化,拉高释放总线

Delay_function(50); //延时50ms

//写过一次后关闭,无需重复写初值

// Write_init_EEPROM(); //写入初始密码123456到E2PROM

// ds1302_write_time();

lcd1602_display_str(1,0,"===Coded Lock===");//初始化界面

lcd1602_display_str(2,0,"Password:");

while(1)

{

//将密码从24C02中读出来,包括管理员密码以及使用密码

password[0]=read_add(1);

password[1]=read_add(2);

password[2]=read_add(3);

password[3]=read_add(4);

password[4]=read_add(5);

password[5]=read_add(6);

adminpassword[0]=read_add(7);

adminpassword[1]=read_add(8);

adminpassword[2]=read_add(9);

adminpassword[3]=read_add(10);

adminpassword[4]=read_add(11);

adminpassword[5]=read_add(12);

Key_function(); //按键函数

Reset_password_function(); //重置密码函数

//输入密码三次错误后执行如下程序

if(flag_error_num == 3)

{

flag_key_en = 0;

纷传文章借鉴与此

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱