加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

【普中】基于51單片機(jī)的矩陣電子密碼鎖LCD1602液晶顯示 proteus仿真+程序+設(shè)計(jì)報(bào)告

07/10 09:31
3682
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 1.主要功能:
    • 講解視頻:
    • 2.仿真
    • 3. 程序代碼
    • 4. 設(shè)計(jì)報(bào)告
    • 5. 設(shè)計(jì)資料內(nèi)容清單&&下載鏈接
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【普中】基于51單片機(jī)的矩陣電子密碼鎖LCD1602液晶顯示設(shè)計(jì)( proteus仿真+程序+設(shè)計(jì)報(bào)告+講解視頻)

仿真圖proteus8.16(有低版本)

程序編譯器:keil 4/keil 5

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

設(shè)計(jì)編號(hào):P14

1.主要功能:

基于51單片機(jī)AT89C51/52(與AT89S51/52、AT89C51/52、STC89C51/52等51內(nèi)核單片機(jī)通用)

基于51單片機(jī)的密碼鎖LCD1602液晶顯示設(shè)計(jì)

1.按鍵設(shè)置6位密碼,輸入密碼若密碼正確,則鎖打開(kāi)。顯示open!開(kāi)鎖指示燈點(diǎn)亮。

2.密碼可以自己修改(6位密碼),必須是開(kāi)始狀態(tài)才能改密。為防止誤操作,修改密碼得輸入兩次。

3.若密碼輸入錯(cuò)誤次數(shù)超過(guò)3次,蜂鳴器報(bào)警并且鎖定鍵盤(pán),需復(fù)位重新開(kāi)始操作。

4.系統(tǒng)具有24C02有復(fù)位、掉電保存密碼功能。

5.需要在Proteus軟件和普中51開(kāi)發(fā)板實(shí)現(xiàn)功能驗(yàn)證。

(目前僅完全適配普中開(kāi)發(fā)板A234,其他普中開(kāi)發(fā)板型號(hào)可能需要做代碼修改或接線)

需注意仿真中51單片機(jī)芯片是兼容的,AT89C51,AT89C52是51單片機(jī)的具體型號(hào),內(nèi)核是一樣的。相同的原理圖里,無(wú)論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機(jī)芯片。

講解視頻:

仿真講解+實(shí)物演示+代碼講解

MVIMG_20240624_190619

2.仿真

開(kāi)始仿真

打開(kāi)仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開(kāi)始仿真。

1、首次使用時(shí)輸入:131420,對(duì)密碼進(jìn)行初始化,當(dāng)顯示:initpassword, 證明密碼初始化完成,此時(shí)的密碼為:000000。然后可以改密了。

(如密碼忘記就再輸入131420初始化,然后密碼就是000000)

img

2.輸入密碼正確,LCD顯示open,繼電器導(dǎo)通模擬開(kāi)鎖動(dòng)作。

img

3當(dāng)輸入密碼錯(cuò)誤后,LCD顯示error,報(bào)警并鎖定鍵盤(pán)3秒鐘。

img

3. 程序代碼

使用keil4或者keil5編譯,代碼有注釋?zhuān)梢越Y(jié)合報(bào)告理解代碼含義。


//==================================================================================================
//=======================================LCD1602====================================================
//==================================================================================================

#define yi 0x80 //LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)
#define er 0x80+0x40 //LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)


//----------------延時(shí)函數(shù),后面經(jīng)常調(diào)用----------------------
void delay(uint xms)//延時(shí)函數(shù),有參函數(shù)
{
	uint x,y;
	for(x=xms;x>0;x--)
	 for(y=110;y>0;y--);
}

//--------------------------寫(xiě)指令---------------------------
void write_1602com(uchar com)//****液晶寫(xiě)入指令函數(shù)****
{
	lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令
	lcd1602_rw=0; //讀寫(xiě)選擇置為寫(xiě)
	P0=com;//送入數(shù)據(jù)
	delay(1);
	lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
	delay(1);
	lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------寫(xiě)數(shù)據(jù)-----------------------------
void write_1602dat(uchar dat)//***液晶寫(xiě)入數(shù)據(jù)函數(shù)****
{
	lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
	lcd1602_rw=0; //讀寫(xiě)選擇置為寫(xiě)
	P0=dat;//送入數(shù)據(jù)
	delay(1);
	lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備
	delay(1);
	lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------初始化-------------------------
void lcd_init(void)
{
	write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
	write_1602com(0x0c);//開(kāi)顯示不顯示光標(biāo)
	write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移
	write_1602com(0x01);//清顯示
}
//========================================================================================
//=========================================================================================
//==============將按鍵值編碼為數(shù)值=========================
unsigned char coding(unsigned char m)	 
{
	unsigned char k;
	switch(m)
	{
		case (1): k=1;break;
		case (2): k=2;break;
		case (3): k=3;break;
		case (4): k='A';break;
		
		case (5): k=4;break;
		case (6): k=5;break;
		case (7): k=6;break;
		case (8): k='B';break;
		
		case (9): k=7;break;
		case (10): k=8;break;
		case (11): k=9;break;
		case (12): k='C';break;
		
		case (13): k='*';break;
		case (14): k=0;break;
		case (15): k='#';break;
		case (16): k='D';break;
	}
	return(k);
}
//=====================按鍵檢測(cè)并返回按鍵值===============================
void delay_uint(unsigned     int i)//延時(shí)
{
   while(i--);
}
完整代碼見(jiàn)文末下載鏈接
unsigned char keynum(void)
{
   unsigned char i, j; // 定義變量i和j分別存儲(chǔ)行列索引
   i = 0; 
   j = 0;

   // 設(shè)置P1端口的低四位輸出為0,高四位保持不變,準(zhǔn)備讀取鍵盤(pán)列信號(hào)
   P1 = 0x0f;

   // 判斷是否有鍵被按下(即P1端口的值不全為0x0f)
   if(P1 != 0x0f) {
	   // 延時(shí)去抖,等待10ms再次檢測(cè),確保按鍵穩(wěn)定
	   delay_uint(10000);

	   // 再次檢查,確認(rèn)按鍵確實(shí)被按下
	   if(P1 != 0x0f) {
		   // 根據(jù)P1的值判斷是哪一行被按下
		   switch(P1) {
			   case 0x0e: i = 3; break; // 第1行
			   case 0x0d: i = 2; break; // 第3行
			   case 0x0b: i = 1; break; // 第3行
			   case 0x07: i = 0;	   // 第4行
		   }

		   // 設(shè)置P1端口的高四位輸出為0,低四位保持不變,準(zhǔn)備讀取鍵盤(pán)行信號(hào)
		   P1 = 0xf0;

		   // 根據(jù)P1的新值判斷是哪一列被按下
		   switch(P1) {
			   case 0xe0: j = 13; break; // 第1列
			   case 0xd0: j = 9;  break; // 第2列
			   case 0xb0: j = 5;  break; // 第3列
			   case 0x70: j = 1;		 // 第4列
		   }
	   }
   }

   // 檢查新獲取的按鍵值(行列索引組合)是否與上一次的不同
   if(key != i + j) {
	   // 更新按鍵值并返回
	   key = i + j;
	   return key;
   } else {
	   // 如果按鍵值沒(méi)有變化,返回0表示沒(méi)有新按鍵事件
	   return 0;
   }
}
//=======================一聲提示音,表示有效輸入========================
void OneAlam(void)
{
	beep_cnt=1;
	beep_time=BEEP_TIME;

}
//========================二聲提示音,表示操作成功========================
void TwoAlam(void)
{
	beep_cnt=2;
	beep_time=BEEP_TIME;

}
//========================三聲提示音,表示錯(cuò)誤========================
void ThreeAlam(void)
{
	beep_cnt=3;
	beep_time=BEEP_TIME;

}
//=======================顯示提示輸入=========================
void DisplayChar(void)
{
	unsigned char i;
	if(pass==1)
	{
		//DisplayListChar(0,1,LockOpen);
		write_1602com(er);				   //在二行開(kāi)始顯示
		for(i=0;i<16;i++)
		{
			write_1602dat(LockOpen[i]);	   //顯示open 開(kāi)鎖成功
		}
	}
	else
	{
		if(N==0)
		{
			//DisplayListChar(0,1,Error);
			write_1602com(er);
			for(i=0;i<16;i++)
			{
				write_1602dat(Error[i]);	//顯示錯(cuò)誤
			}
		}
		else
		{
			//DisplayListChar(0,1,start_line);	
			write_1602com(er);
			for(i=0;i<16;i++)
			{
				write_1602dat(start_line[i]);//顯示開(kāi)始輸入	
			}
		}
	}
}

//========================重置密碼==================================================
//==================================================================================
void ResetPassword(void)
{
	unsigned char i;	
	unsigned char j;
	if(pass==0)
	{
		pass=0;			   
		DisplayChar();	   //顯示錯(cuò)誤
		ThreeAlam();	   //沒(méi)開(kāi)鎖時(shí)按下重置密碼報(bào)警3聲
	}
	else				   //開(kāi)鎖狀態(tài)下才能進(jìn)行密碼重置程序
	{
    	if(ReInputEn==1)   //開(kāi)鎖狀態(tài)下,ReInputEn置1,重置密碼允許
		{
			if(N==6)	   //輸入6位密碼
			{
				ReInputCont++;			//密碼次數(shù)計(jì)數(shù)	
				if(ReInputCont==2)		//輸入兩次密碼
				{
					for(i=0;i<6;)
					{
						if(TempPassword[i]==InputData[i])	//將兩次輸入的新密碼作對(duì)比
							i++;
						else								//如果兩次的密碼不同
						{
							//DisplayListChar(0,1,Error);
							write_1602com(er);
							for(j=0;j<16;j++)
							{
								write_1602dat(Error[j]);	//顯示錯(cuò)誤Error
							}
							ThreeAlam();			//錯(cuò)誤提示	
							pass=0;					//關(guān)鎖
							ReInputEn=0;			//關(guān)閉重置功能,
							ReInputCont=0;
							DisplayChar();
							break;
						}
					} 
					if(i==6)
					{
						//DisplayListChar(0,1,ResetOK);
						write_1602com(er);
						for(j=0;j<16;j++)
						{
							write_1602dat(ResetOK[j]);	  //密碼修改成功,顯示
						}

						TwoAlam();				//操作成功提示
					 	WrToROM(TempPassword,0,6);		//將新密碼寫(xiě)入24C02存儲(chǔ)
						ReInputEn=0;
					}
					ReInputCont=0;
					CorrectCont=0;
				}
				else					  //輸入一次密碼時(shí)
				{
					OneAlam();
					//DisplayListChar(0, 1, again); 		//顯示再次輸入一次
					write_1602com(er);
					for(j=0;j<16;j++)
					{
						write_1602dat(again[j]);			//顯示再輸入一次
					}					
					for(i=0;i<6;i++)
					{
						TempPassword[i]=InputData[i];		//將第一次輸入的數(shù)據(jù)暫存起來(lái)						
					}
				}

			N=0;						//輸入數(shù)據(jù)位數(shù)計(jì)數(shù)器清零
		   }
	    }
	}
}
//=======================輸入密碼錯(cuò)誤超過(guò)三過(guò),報(bào)警并鎖死鍵盤(pán)======================
void Alam_KeyUnable(void)
{
	P1=0x00;
	{
		beep_cnt=255;
		beep_time=BEEP_TIME;

	}
}
//=======================取消所有操作============================================
void Cancel(void)
{	
	unsigned char i;
	unsigned char j;
	//DisplayListChar(0, 1, start_line); 
	write_1602com(er);
	for(j=0;j<16;j++)
	{
		write_1602dat(start_line[j]);	  //顯示開(kāi)機(jī)輸入密碼界面
	}
	TwoAlam();				//提示音
	for(i=0;i<6;i++)
	{
		InputData[i]=0;		//將輸入密碼清零
	}
	KEY=1;					//關(guān)閉鎖
	pass=0;					//密碼正確標(biāo)志清零
	ReInputEn=0;			//重置輸入充許標(biāo)志清零
	ErrorCont=0;			//密碼錯(cuò)誤輸入次數(shù)清零
	CorrectCont=0;			//密碼正確輸入次數(shù)清零
	ReInputCont=0;			//重置密碼輸入次數(shù)清零 
	s3_keydown=0;
	key_disable=0;			//鎖定鍵盤(pán)標(biāo)志清零
	N=0;					//輸入位數(shù)計(jì)數(shù)器清零
}

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

12485字設(shè)計(jì)報(bào)告,內(nèi)容包括目錄,硬件設(shè)計(jì)、軟件設(shè)計(jì)、軟硬件框圖、調(diào)試、結(jié)論等

img

20世紀(jì)80年代后,隨著電子鎖專(zhuān)用集成電路的出現(xiàn),電子鎖的體積縮小,可靠性提高,成本較高,是適合使用在安全性要求較高的場(chǎng)合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對(duì)它的研究一直沒(méi)有明顯進(jìn)展。

目前,在西方發(fā)達(dá)國(guó)家,電子密碼鎖技術(shù)相對(duì)先進(jìn),種類(lèi)齊全,電子密碼鎖已被廣泛應(yīng)用于智能門(mén)禁系統(tǒng)中,通過(guò)多種更加安全,

更加可靠的技術(shù)實(shí)現(xiàn)大門(mén)的管理。在我國(guó)電子鎖整體水平尚處于國(guó)際上70年代左右,電子密碼鎖的成本還很高,市場(chǎng)上仍以按鍵電子鎖為主,按鍵式和卡片鑰匙式電子鎖已引進(jìn)國(guó)際先進(jìn)水平,現(xiàn)國(guó)內(nèi)有幾個(gè)廠生產(chǎn)供應(yīng)市場(chǎng)。但國(guó)內(nèi)自行研制開(kāi)發(fā)的電子鎖,其市場(chǎng)結(jié)構(gòu)尚未形成,應(yīng)用還不廣泛。國(guó)內(nèi)的不少企業(yè)也引進(jìn)了世界上先進(jìn)的技術(shù),發(fā)展前景非常可觀。希望通過(guò)不斷的努力,使電子密碼鎖在我國(guó)也能得到廣泛應(yīng)用

5. 設(shè)計(jì)資料內(nèi)容清單&&下載鏈接

資料設(shè)計(jì)資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計(jì)報(bào)告、軟硬件設(shè)計(jì)框圖等。

0、常見(jiàn)使用問(wèn)題及解決方法–必讀?。。?!

1、仿真圖

2、程序源碼注釋

3、功能要求

4、開(kāi)題報(bào)告

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

6、軟硬件流程框圖

7、燒錄工具

8、講解視頻

9、實(shí)物圖

Altium Designer 安裝破解

KEIL+proteus 單片機(jī)仿真設(shè)計(jì)教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡(jiǎn)易使用教程

單片機(jī)學(xué)習(xí)資料

普中-2&普中-3&普中-4開(kāi)發(fā)板原理圖.pdf

相關(guān)數(shù)據(jù)手冊(cè)

答辯技巧

設(shè)計(jì)報(bào)告常用描述

鼠標(biāo)雙擊打開(kāi)查找嘉盛單片機(jī)51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url

img

資料下載鏈接:

https://docs.qq.com/doc/DS2pPenNRaHB6SlR1

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
ATXMEGA256D3-AU 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, PQFP64, 14 X 14 MM, 1 MM HEIGHT, 0.80 MM HEIGHT, GREEN, PLASTIC, MS-026AEB, TQFP-64
$7.78 查看
ATXMEGA64A4U-MH 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, PQCC44, 7 X 7 MM, 1 MM HEIGHT, 0.50 MM PITCH, GREEN, PLASTIC, MO-220VKKD-3, VQFN-44
$4.89 查看
SI5338B-B-GMR 1 Silicon Laboratories Inc Processor Specific Clock Generator, 350MHz, CMOS, QFN-24

ECAD模型

下載ECAD模型
$13.39 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜