• 方案介紹
  • 附件下載
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

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

2024/07/31
3994
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

共1個文件

本設計僅供參考

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

主要功能:

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

仿真圖(提供源文件):

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

原理圖(提供源文件):

在這里插入圖片描述

PCB(僅供參考):

在這里插入圖片描述

程序:

主函數

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中斷服務函數
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);
}

鍵盤驅動

#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;
}


資料清單:

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

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
USB2514B-AEZC-TR 1 Microchip Technology Inc UNIVERSAL SERIAL BUS CONTROLLER

ECAD模型

下載ECAD模型
$3.31 查看
MKL02Z32VFG4R 1 Freescale Semiconductor RISC MICROCONTROLLER

ECAD模型

下載ECAD模型
暫無數據 查看
MCF52259CAG80 1 Rochester Electronics LLC 32-BIT, FLASH, 80MHz, RISC MICROCONTROLLER, PQFP144, 20 X 20 MM, ROHS COMPLIANT, LQFP-144
$17.28 查看
意法半導體

意法半導體

意法半導體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導體有限公司。意法半導體是世界最大的半導體公司之一,公司銷售收入在半導體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據最新的工業(yè)統(tǒng)計數據,意法半導體是全球第五大半導體廠商,在很多市場居世界領先水平。例如,意法半導體是世界第一大專用模擬芯片和電源轉換芯片制造商,世界第一大工業(yè)半導體和機頂盒芯片供應商,而且在分立器件、手機相機模塊和車用集成電路領域居世界前列.

意法半導體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導體有限公司。意法半導體是世界最大的半導體公司之一,公司銷售收入在半導體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據最新的工業(yè)統(tǒng)計數據,意法半導體是全球第五大半導體廠商,在很多市場居世界領先水平。例如,意法半導體是世界第一大專用模擬芯片和電源轉換芯片制造商,世界第一大工業(yè)半導體和機頂盒芯片供應商,而且在分立器件、手機相機模塊和車用集成電路領域居世界前列.收起

查看更多

相關推薦