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

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

基于STM32的矩陣電子密碼鎖的Proteus仿真

07/31 08:54
2489
服務(wù)支持:
技術(shù)交流群

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

虛擬商品不可退

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

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

本設(shè)計僅供參考

基于STM32的矩陣電子密碼鎖Proteus仿真 (源碼+仿真+原理圖+PCB)
原理圖:Altium Designer
仿真圖:protues 8.9
程序編譯器:keil 5
編程語言:C語言
編號C0034

主要功能:

  1. 液晶屏幕實時顯示矩陣鍵盤輸入的密碼;
  2. 4x4矩陣鍵盤可輸入6位密碼并支持循環(huán)覆蓋;
  3. 有密碼輸入正確或錯誤的聲光提示;
  4. 帶重新輸入功能。

仿真圖(提供源文件):

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

原理圖(提供源文件):

在這里插入圖片描述

PCB(僅供參考):

在這里插入圖片描述

程序:

主函數(shù)

int main(void)
{
	uint8_t Key_Value = 27;
	uint8_t i = 0;

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  TIM3_Init(2400-1, 72-1); // 10ms
	
	Beep_Init();
	Key_Init();
	LCD_Init();
	
	LCD_write_string(0, 0, "Input Password:");
	
  while(1)
  {		
		Key_Value = Key_Scan();
			
		if(Key_Value < 10)
		{
			disp_num[i] = Key_Value;
			i++;
			if(i > 5)
				i = 0;
			
			Key_Value = 27;
		}				

		if(Key_Value == 16)
		{				
			for(i = 0; i < 6; i++)
			{
				if(disp_num[i] != password[i])
				{
					flag = 1; //輸入錯誤
					break;
				}
				else
				{
					flag = 0;
				}
			}
			
			if(flag == 1) //輸入錯誤
			{
				LCD_write_string(6, 1, Disp_NO);
				LED_Blink (3, 200);		
				BEEP_Blink(3, 200);		
				LCD_write_string(6, 1, Disp_NONE);
			}
			else          //輸入正確
			{
				LCD_write_string(6, 1, Disp_YES);
				LED_Blink (1, 500);		
				BEEP_Blink(1, 500);		
				LCD_write_string(6, 1, Disp_NONE);
			}
			
			memset(disp_num, 27, 6);
			Key_Value = 27;
			i = 0;			
		}

		if(Key_Value == 13)
		{
			memset(disp_num, 27, 6);
			Key_Value = 27;
			i = 0;			
		}

		for(uint8_t j = 0; j < 6; j++)
		{
			if(disp_num[j] > 9)
				disp_num_tmp[j] = 0;
			else
				disp_num_tmp[j] = disp_num[j];
		}
		sprintf(toDisplay, DISP_FORMAT, disp_num_tmp[0], disp_num_tmp[1], disp_num_tmp[2], disp_num_tmp[3], disp_num_tmp[4], disp_num_tmp[5]);

		HAL_Delay(20);		
  }
}

//定時器3中斷服務(wù)函數(shù)
uint8_t led_temp = 0;
void TIM3_IRQHandler(void)
{		
	 led_temp++;
	 if(led_temp > 10)
	 {
		 led_temp = 0;
		 LED1_TOG();
		 
		 LCD_write_string(0, 1, toDisplay);
	 }
		
   HAL_TIM_IRQHandler(&TIM3_Handler);
}

鍵盤驅(qū)動

#include "key4x4.h"


void Key_Init(void)
{
  GPIO_InitTypeDef GPIO_Initure;   

	X_GPIO_CLK();
	Y_GPIO_CLK();
	
/*****************************4行輸出*********************************************/
	GPIO_Initure.Pin = X1_GPIO_PIN|X2_GPIO_PIN|X3_GPIO_PIN|X4_GPIO_PIN; 				
	GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP;  	
	GPIO_Initure.Pull = GPIO_NOPULL;          
	GPIO_Initure.Speed = GPIO_SPEED_FREQ_LOW;   
	HAL_GPIO_Init(X_GPIO_PORT, &GPIO_Initure);
   
/**************************************4列輸入*************************************/
	GPIO_Initure.Pin = Y1_GPIO_PIN; 				
	GPIO_Initure.Mode = GPIO_MODE_INPUT;  	
	GPIO_Initure.Pull = GPIO_NOPULL;          
	GPIO_Initure.Speed = GPIO_SPEED_FREQ_LOW;   
	HAL_GPIO_Init(Y_GPIO_PORT, &GPIO_Initure);

	GPIO_Initure.Pin = Y2_GPIO_PIN; 				
	HAL_GPIO_Init(Y_GPIO_PORT, &GPIO_Initure);

	GPIO_Initure.Pin = Y3_GPIO_PIN; 				
	HAL_GPIO_Init(Y_GPIO_PORT, &GPIO_Initure);

	GPIO_Initure.Pin = Y4_GPIO_PIN; 				
	HAL_GPIO_Init(Y_GPIO_PORT, &GPIO_Initure);
}

uint8_t Key_Scan(void)
{
   uint8_t KeyVal = 27;
	 uint8_t Y1 = 0, Y2 = 0, Y3 = 0, Y4 = 0;
	
   X1_OUT(1);  //先讓X1輸出高
   X2_OUT(1);  //先讓X2輸出高
   X3_OUT(1);  //先讓X3輸出高
   X4_OUT(1);  //先讓X4輸出高


		if( (Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN()) == 0 )
		{		
			return 27; //如果X1到X4全為零則沒有按鍵按下 
		}		
		else
		{	
			HAL_Delay(5); //延時5ms去抖動
			if( (Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN()) == 0 )
				return 27;
		}

    
/*1********************************************************/	 
    X1_OUT(1); X2_OUT(0); X3_OUT(0); X4_OUT(0);
   
    Y1 = Y1_IN(); Y2 = Y2_IN(); Y3 = Y3_IN(); Y4 = Y4_IN();

		if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
        KeyVal=1;
		if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
				KeyVal=5;
		if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
				KeyVal=9;
		if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
				KeyVal=13;       
		//等待按鍵釋放
    while( (Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN()) > 0 );
		

/*2********************************************************/	 
    X1_OUT(0); X2_OUT(1); X3_OUT(0); X4_OUT(0);
        
    Y1 = Y1_IN(); Y2 = Y2_IN(); Y3 = Y3_IN(); Y4 = Y4_IN();

		if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
					KeyVal=2;
		if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
					KeyVal=6;
		if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
					KeyVal=0;
		if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
					KeyVal=14;    		
    //等待按鍵釋放
    while( (Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN()) > 0 );

		 
/*3********************************************************/	 
    X1_OUT(0); X2_OUT(0); X3_OUT(1); X4_OUT(0);

    Y1 = Y1_IN(); Y2 = Y2_IN(); Y3 = Y3_IN(); Y4 = Y4_IN();
		 
		if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
					KeyVal=3;
		if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
					KeyVal=7;
		if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
					KeyVal=11;
		if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
					KeyVal=15;		
    //等待按鍵釋放
    while( (Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN()) > 0 );

/*4********************************************************/	 
		X1_OUT(0); X2_OUT(0); X3_OUT(0); X4_OUT(1);

		Y1 = Y1_IN(); Y2 = Y2_IN(); Y3 = Y3_IN(); Y4 = Y4_IN();

		if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
            KeyVal=4;
    if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
            KeyVal=8;
    if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
            KeyVal=12;
    if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
            KeyVal=16;		
    //等待按鍵釋放
    while( ( Y1_IN() | Y2_IN() | Y3_IN() | Y4_IN() ) > 0 );

		 
		return KeyVal;
}


資料清單:

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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
ATXMEGA192D3-MH 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, 9 X 9 MM, 1 MM HEIGHT, 0.50 MM PITCH, GREEN, MO-220VMMD, MLF-64
$5.62 查看
LPC4357FET256,551 1 NXP Semiconductors LPC4357FET256 - Dual-core Cortex-M4/M0, 1 MB Flash, 136 kB SRAM, 2 HS USB with on-chip PHY, Ethernet, LCD, CAN, AES, SPIFI, SGPIO, SCT BGA 256-Pin

ECAD模型

下載ECAD模型
$15.87 查看
MK70FN1M0VMJ12R 1 Freescale Semiconductor 32-BIT, FLASH, 120MHz, RISC MICROCONTROLLER, PBGA256, 17 X 17 MM, MAPBGA-256
暫無數(shù)據(jù) 查看

相關(guān)推薦

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