STM32门禁系统

系列文章目录 

1.STM32门禁系统:整体及简易模块的简介

2.STM32门禁系统:0.96寸显示模块的简介

3.STM32门禁系统:舵机模块的简介

4.等待开发中~~~~


文章目录

目录

系列文章目录 

1.STM32门禁系统:整体及简易模块的介绍

前言

一、门禁系统简介

二、模块的介绍

1.矩阵键盘的介绍:

直接看代码吧,没啥可讲的,就是多个按键检测

2、蜂鸣器的介绍

1.这代码也不给了就是初始化蜂鸣器端口后再拉低或者拉高。

总结

下一章是0.96寸OLED模块的介绍



前言

本文章是我在学习STM32后做的第一个小项目,自我感觉文章通俗易懂,因为都是自己遇到过的问题。本文按照模块一章一章发布。

一、门禁系统简介

门禁系统采用STM32F103C6T6作为主控,有矩阵键盘模块,OLED显示模块,舵机模块,指纹模块,刷卡模块,蜂鸣器模块,WIFI模块。

二、模块的介绍

1.矩阵键盘的介绍:

直接看代码吧,没啥可讲的,就是多个按键检测

代码如下(示例):

#include "Matrix.h"

/*     定义列端口
    从列开始检测行
*/
#define COLUMN1(x)     GPIO_WriteBit(GPIOA,GPIO_Pin_0,    (BitAction)(x))      
#define COLUMN2(x)     GPIO_WriteBit(GPIOC,GPIO_Pin_15,    (BitAction)(x))     
#define COLUMN3(x)     GPIO_WriteBit(GPIOC,GPIO_Pin_14,    (BitAction)(x))    
#define    COLUMN4(x)     GPIO_WriteBit(GPIOC,GPIO_Pin_13,    (BitAction)(x))    


// 初始化所有IO口
void Matrix_Init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStruct);
    GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//拉低引脚
    
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
    GPIO_SetBits(GPIOA,GPIO_Pin_0);
    
    
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);
    GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
    
}
uint8_t Matrix_Detect()
{

    uint8_t num=0;
    COLUMN1(0);COLUMN2(1);COLUMN3(1);COLUMN4(1);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
        Delay_ms(20);
        num =16;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
        Delay_ms(20);
        num =12;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
        Delay_ms(20);
        num =8;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
        Delay_ms(20);
        num =4;
    }
    COLUMN1(1);COLUMN2(0);COLUMN3(1);COLUMN4(1);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
        Delay_ms(20);
        num =15;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
        Delay_ms(20);
        num =11;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
        Delay_ms(20);
        num =7;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
        Delay_ms(20);
        num =3;
    }
    
    
    COLUMN1(1);COLUMN2(1);COLUMN3(0);COLUMN4(1);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
        Delay_ms(20);
        num =14;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
        Delay_ms(20);
        num =10;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
        Delay_ms(20);
        num =6;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
        Delay_ms(20);
        num =2;
    }
    COLUMN1(1);COLUMN2(0);COLUMN3(1);COLUMN4(0);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
        Delay_ms(20);
        num =13;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
        Delay_ms(20);
        num =9;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
        Delay_ms(20);
        num =5;
    }
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
        Delay_ms(20);
        num =1;
    }
    
    
    return num;
    
}



2、蜂鸣器的介绍

1.这代码也不给了就是初始化蜂鸣器端口后再拉低或者拉高。
 


总结

下一章是0.96寸OLED模块的介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值