如何实现基于51单片机的蓝牙密码锁设计呢?

控制/MCU

1813人已加入

描述

本设计以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;

EEPROM

EEPROM

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分