基于stm32f103C8T6的智能门锁设计

该文详述了一项基于STM32F103C8T6芯片的智能门锁设计,实现了键盘、指纹和RFID三种解锁方式,以及步进电机驱动的模拟开关门功能。作者分享了项目材料准备、各模块的代码实现,包括OLED显示、4x4矩阵按键、AS608指纹识别和RFID读卡的详细步骤,并提供了部分关键代码示例。

前言:

        不久前结束了硬件课设,想着也花了不少精力做这个,走了不少弯路,找了网上很多资料,但无奈都是单独的例程文件,自己不断整合调整后才得到了现在这个版本,故在此写个博客记录一下。本项目主要是基于stm32f103c8t6进行的智能门锁设计,实现了键盘解锁、指纹解锁、RFID解锁,解锁过程主要用步进电机进行模拟。

一、材料准备

       1、bom表

        注意其中的USB转TTL可以不买,视读者自身调试代码能力而定。

        另外还需要一些其他材料,比如杜邦线、面包板,各种芯片或者小原件的排针需要焊接的最好让商家焊好,不然之后调试过程就会贼痛苦(真的是血的教训)。当然,焊接能力到位的读者还可以尝试买洞洞板和导线让自己的作品更美观。

 二、模块设计

1、OLED模块

        在将芯片安装在面包板上后,我们可以先安装OLED模块以便之后其他模块的调试。因为我们买的是4针的OLED屏,代码编写的时候也要注意用对应的iic协议。

        部分代码如下:

#include "oled_iic.h"
#include "Delay.h"
#include "oledfont.h"
#include "string.h"

unsigned int HZ=0;
//返回GB16字库里汉字个数
unsigned int GB16_NUM(void)
{
  unsigned int HZ_NUM;
  unsigned char *PT;
  PT = hz_index;
  while(*PT++ != '\0')
  {
  	 HZ_NUM++;
  }

  return HZ_NUM/2;
} 

void IIC_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(OLED_SCL_RCC|OLED_SDA_RCC, ENABLE);	/* 打开GPIO时钟 */

	GPIO_InitStructure.GPIO_Pin = OLED_SCL_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  	/* 开漏输出 */
	GPIO_Init(OLED_SCL_GPIO_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = OLED_SDA_PIN;
	GPIO_Init(OLED_SDA_GPIO_PORT, &GPIO_InitStructure);

	/* 给一个停止信号, 复位IIC总线上的所有设备到待机模式 */
	IIC_Stop();
}

static void IIC_Delay(void)
{
	uint8_t i;

	/* 
	 	下面的时间是通过逻辑分析仪测试得到的。
    工作条件:CPU主频72MHz ,MDK编译环境,1级优化
  
		循环次数为10时,SCL频率 = 205KHz 
		循环次数为7时,SCL频率 = 347KHz, SCL高电平时间1.5us,SCL低电平时间2.87us 
	 	循环次数为5时,SCL频率 = 421KHz, SCL高电平时间1.25us,SCL低电平时间2.375us 
	*/
	for (i = 0; i < 10; i++);
}

/*
*********************************************************************************************************
*
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胆无敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值