本设计以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;
纷传文章借鉴与此