• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的1602電子密碼鎖設(shè)計(jì)

04/17 10:00
427
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):【N03】

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的簡(jiǎn)易密碼鎖設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合矩陣鍵盤(pán)、LCD1602、LED燈、蜂鳴器,實(shí)現(xiàn)修改用戶密碼、關(guān)鎖、退格、密碼錯(cuò)誤報(bào)警等功能。

2.? 主要功能

a.本設(shè)計(jì)為了防止密碼被竊取要求在輸入密碼時(shí)在數(shù)碼管上顯示*號(hào)。

b.設(shè)計(jì)開(kāi)鎖密碼位6位密碼的電子密碼鎖。

c.能夠在密碼正確時(shí)紅燈亮,LCD1602顯示OPEN。

d.4×4的矩陣鍵盤(pán)其中包括0-9的數(shù)字鍵和A-F的功能鍵

e.本產(chǎn)品具備報(bào)警功能,當(dāng)輸入密碼錯(cuò)誤時(shí)蜂鳴器響,連續(xù)三次輸錯(cuò)密碼鎖定鍵盤(pán)。

f.密碼可以由用戶自己修改設(shè)定。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開(kāi)程序,可自行通過(guò).c和.h文件新建工程即可。

//包含頭文件
#include <REG51.h>
#include<intrins.h>
//宏定義
#define LCM_Data  P0		  //將P0口定義為L(zhǎng)CM_Data
#define uchar unsigned char 
#define uint  unsigned int
//1602的控制腳
sbit lcd1602_rs=P2^5;
sbit lcd1602_rw=P2^6;
sbit lcd1602_en=P2^7;

sbit Scl=P3^4;			//24C02串行時(shí)鐘
sbit Sda=P3^5;			//24C02串行數(shù)據(jù)

sbit ALAM = P2^1;		//報(bào)警	
sbit KEY = P3^6;		//開(kāi)鎖

bit  pass=0;			//密碼正確標(biāo)志
bit  ReInputEn=0;		//重置輸入允許標(biāo)志	
bit  s3_keydown=0;		//3秒按鍵標(biāo)志位
bit  key_disable=0;		//鎖定鍵盤(pán)標(biāo)志

unsigned char countt0,second;	//t0中斷計(jì)數(shù)器,秒計(jì)數(shù)器

void Delay5Ms(void);		//聲明延時(shí)函數(shù)

unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; 				//控盤(pán)掃描控制表
//液晶顯示數(shù)據(jù)數(shù)組
unsigned char code start_line[]	= {"password:       "};
unsigned char code name[] 	 	= {"===Coded Lock==="};	//顯示名稱
unsigned char code Correct[] 	= {"     correct    "};		//輸入正確
unsigned char code Error[]   	= {"      error     "};  	//輸入錯(cuò)誤
unsigned char code codepass[]	= {"      pass      "}; 
unsigned char code LockOpen[]	= {"      open      "};		//OPEN
unsigned char code SetNew[] 	= {"SetNewWordEnable"};
unsigned char code Input[]   	= {"input:          "};		//INPUT
unsigned char code ResetOK[] 	= {"ResetPasswordOK "};
unsigned char code initword[]	= {"Init password..."};
unsigned char code Er_try[]		= {"error,try again!"};
unsigned char code again[]		= {"input again     "};

unsigned char InputData[6];									//輸入密碼暫存區(qū)
unsigned char CurrentPassword[6]={0,0,0,0,0,0}; 			//讀取EEPROM密碼暫存數(shù)組
unsigned char TempPassword[6];
unsigned char N=0;				//密碼輸入位數(shù)記數(shù)
unsigned char ErrorCont;			//錯(cuò)誤次數(shù)計(jì)數(shù)
unsigned char CorrectCont;			//正確輸入計(jì)數(shù)
unsigned char ReInputCont; 			//重新輸入計(jì)數(shù)
unsigned char code initpassword[6]={0,0,0,0,0,0};			//輸入管理員密碼后將密碼初始為000000
unsigned char code adminpassword[6]={1,3,1,4,2,0};			//輸入管理員密碼后將密碼初始為000000


//=====================5ms延時(shí)==============================
void Delay5Ms(void)
{
	unsigned int TempCyc = 5552;
	while(TempCyc--);
}

//===================400ms延時(shí)==============================
void Delay400Ms(void)
{
 unsigned char TempCycA = 5;
 unsigned int TempCycB;
 while(TempCycA--)
 {
  TempCycB=7269;
  while(TempCycB--);
 }
}

//=============================================================================================
//================================24C02========================================================
//=============================================================================================

void mDelay(uint t) //延時(shí)
{ 
	uchar i;
   	while(t--)
   	{
   		for(i=0;i<125;i++)
   		{;}
   	}
}
   

void Nop(void)		  //空操作
{
 	_nop_();		  //僅作延時(shí)用一條語(yǔ)句大約1us
 	_nop_();
 	_nop_();
 	_nop_();
}

/*****24c02程序參照24c02時(shí)序圖*****/
/*起始條件*/

void Start(void)
{
 	Sda=1;
 	Scl=1;
 	Nop();
 	Sda=0;
 	Nop();
}


 /*停止條件*/
void Stop(void)
{
 	Sda=0;
 	Scl=1;
 	Nop();
 	Sda=1;
 	Nop();
}

/*應(yīng)答位*/
void Ack(void)
{
	Sda=0;
	Nop();
	Scl=1;
	Nop();
	Scl=0;
}

/*反向應(yīng)答位*/
void NoAck(void)
{
 	Sda=1;
 	Nop();
 	Scl=1;
 	Nop();
 	Scl=0;
}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開(kāi)文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

初始界面:

開(kāi)鎖:

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤(pán)下載鏈接:【N03】百度網(wǎng)盤(pán)下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦