实训项目------智能密码锁--------学习笔记

一,工具实现:

stm32cubeide-1.10.1编写和protues-8.0仿真;

芯片:STM32F103R6

灯:LED-RED,LED-GREEN

电阻:RES

三极管:PNP

蜂鸣器:BUZZER

红外模块:IRLINK

串口显示模块:VIRTUAL TERMINAL

电机驱动模块:L298

直流电机:MOTOR-DC

与非:NOR

指纹模拟:KEYPAD-PHONE(后文讲)

时钟激励源

我在下文就只介绍,主要难点:按键矩阵,红外,指纹模拟,电机驱动

二,完成图:

三,实现功能:

1,按键功能:

我这里借鉴了网上的图,但这个是我理解后自己连的图。这个按键矩阵原理是,芯片PC0~PC3输出(初始高电平)PC4~PC6输入(上拉(当有低电平时强行下拉成低电平))。实现按键功能是一行输入低电平,其他三行输入高电平,当按下按键,PC0~PC3依次接收是否有低电平现象,有则记录,这个就是按键矩阵的原理。连点enter可以进入修改密码的功能,若密码多次不对会进入锁死状态,任何操作都无用,初始密码6个0,当输入超过六个0,OLED屏显示“最多输入六个”,当密码正确蜂鸣器响两次,错误响一次。

我写了按键矩阵的读取文件key.c和保存的密码key_num.c代码如下:

key.c

/*
 * key.c
 *
 *  Created on: Jan 8, 2024
 *      Author: dbq
 */
#include <key.h>
#include <key_num.h>
#include "usart.h"
#include <string.h>
#include <stdio.h>
#include "OLED.h"

int ch[7]={};
int i=0;
int rr=0;
int tt=0;
char str[10];
int d=0;
char chin[]={4,5,8,9,10,11};//密码最多六个
char chinpp[]={16,17,18,19,20,4,5};//请输入按键密码
char chinpp1[]={19,20,4,5,21,22,23,24};//按键密码保存成功
char chinpp2[]={16,17,18,25,21,22,26,4,5};//请输入要保存的密码
void revise_num(void){

}
void prinf(void){
	if(i>6){

		i=6;
		OLED_Clear();
		OLED_ShowChinese(1, 1, (uint8_t *)chin,6);
	}
	for(int z=0;z<i;z++){
		sprintf(str,"%d",(int)ch[z]);
		HAL_UART_Transmit(&huart1, (uint8_t *)str, sizeof(str), 5);
	}
	HAL_UART_Transmit(&huart1, (uint8_t *)"\r\n", 2, 5);
	HAL_Delay(1000);
}

void one_line(void){

	GPIO_PinState read;
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
	read=HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4);
	if(read==GPIO_PIN_RESET){
		ch[i]=7;
		i++;
		prinf();
	}
	read=HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5);
	if(read==GPIO_PIN_RESET){
		ch[i]=8;
		i++;
		prinf();
	}
	read=HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_6);
	if(read==GPIO_PIN_RESET){
		ch[i]=9;
		i++;
		prinf();
	}
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
}
void tow_line(void){

	GPIO_PinState read;
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
	read=HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4);
	if(read==GPIO_PIN_RESET){
		ch[i]=4;
		i+
  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值