本設(shè)計(jì)以STC89C52單片機(jī)為核心控制器,加上其他的模塊一起組成藍(lán)牙密碼鎖的整個(gè)系統(tǒng),其中包含中控部分、輸入部分和輸出部分。
中控部分采用了STC89C52單片機(jī),其主要作用是獲取輸入部分?jǐn)?shù)據(jù),經(jīng)過(guò)內(nèi)部處理,控制輸出部分。
輸入由五部分組成:
第一部分是DS1302時(shí)鐘模塊,通過(guò)該模塊可檢測(cè)當(dāng)前的時(shí)間;
第二部分是儲(chǔ)存模塊,采用AT24C02芯片,存儲(chǔ)按鍵輸入的信息;
第三部分是DS18B20溫度檢測(cè)模塊,通過(guò)該模塊可檢測(cè)當(dāng)前的溫度;
第四部分是4*4矩陣鍵盤(pán),按鍵主要功能有一鍵關(guān)門(mén)、顯示時(shí)間、重新設(shè)置密碼、取消鍵、確認(rèn)鍵、輸入密碼;
第五部分是供電電路,給整個(gè)系統(tǒng)進(jìn)行供電。
輸出由三部分組成:
第一部分是LCD1602顯示模塊, 通過(guò)該模塊可以顯示門(mén)的開(kāi)關(guān)狀態(tài)、輸入的密碼顯示、重置密碼時(shí)的顯示等;
第二部分是藍(lán)牙模塊,通過(guò)該模塊可連接手機(jī);
第三部分是蜂鳴器,當(dāng)鍵盤(pán)鎖定且有按鍵按下時(shí),蜂鳴器作為按鍵音提醒。
#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; //按鍵編碼標(biāo)志位變量
uchar key_num = 0; //按鍵掃描標(biāo)志位變量
uchar flag_key_en = 1; //按鍵使能標(biāo)志位變量
uchar flag_reset_password = 0; //重置密碼標(biāo)志位變量
uchar flag_reset_adminpassword = 0;
uchar flag_stat_door = 0; //門(mén)狀態(tài)標(biāo)志位
uchar flag_reset_password_num = 0; //重置密碼次數(shù)標(biāo)志位變量
uchar flag_error_num = 0; //密碼錯(cuò)誤次數(shù)標(biāo)志位變量
uchar flag_error_time = 180; //密碼錯(cuò)誤時(shí)間標(biāo)志位變量
uchar password[6] = {1,2,3,4,5,6}; //初始密碼數(shù)組
uchar adminpassword[6] = {1,2,3,4,5,6}; //初始管理員密碼數(shù)組
uchar password_input[6] = {0,0,0,0,0,0}; //輸入密碼數(shù)組
uchar password_reset[6] = {0,0,0,0,0,0}; //重置密碼數(shù)組
uchar password_num = 0; //密碼數(shù)量標(biāo)志位變量
uint time_jishi = 0; //10ms計(jì)時(shí)變量
/**********************************
函數(shù)聲明
**********************************/
void Delay_function(uint x); //延時(shí)函數(shù)
void Key_function(void); //按鍵函數(shù)
void Ensure_function(void); //確定函數(shù)
void Reset_password_function(void); //重置密碼函數(shù)
void Write_init_EEPROM();
void Timer0Init();
/****
******* 主函數(shù)
*****/
void main()
{
Timer0Init();
Uart_Init();
Ds1302_Init();
Lcd1602_Init(); //LCD1602初始化
Delay_function(50); //延時(shí)50ms
lcd1602_clean(); //清屏
Delay_function(50); //延時(shí)50ms
Init_IIC(); //總線(xiàn)初始化,拉高釋放總線(xiàn)
Delay_function(50); //延時(shí)50ms
//寫(xiě)過(guò)一次后關(guān)閉,無(wú)需重復(fù)寫(xiě)初值
// Write_init_EEPROM(); //寫(xiě)入初始密碼123456到E2PROM
// ds1302_write_time();
lcd1602_display_str(1,0,"===Coded Lock===");//初始化界面
lcd1602_display_str(2,0,"Password:");
while(1)
{
//將密碼從24C02中讀出來(lái),包括管理員密碼以及使用密碼
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(); //按鍵函數(shù)
Reset_password_function(); //重置密碼函數(shù)
//輸入密碼三次錯(cuò)誤后執(zhí)行如下程序
if(flag_error_num == 3)
{
flag_key_en = 0;
紛傳文章借鑒與此