基于STM32单片机的简单矩阵按键密码锁系统

34 篇文章 2 订阅
22 篇文章 1 订阅

0、前言

 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉小洪学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,小洪学长分享优质毕业设计项目,今天要分享的是基于STM32单片机的简单矩阵按键密码锁系统

1、简介

基于STM32单片机的简单矩阵按键密码锁系统

1、通过输入正确密码开启继电器和菜单功能。

2、输入前三个密码时可通过显示按键查看密码输入是否正确。

3、当密码输入正确可进入菜单。

4、菜单里面可设置三个功能。

5、功能1:设置零时密码,可在需要时使用,重启后密码失效(用于朋友来访不在家,或者清洁员上门打扫等一次性密码)。

6、功能2:显示当前密码断电不丢失的密码。

7、功能3:设置密码,密码断电不丢失。

2、组成

本设计由STM32F103C8T6单片机最小系统+继电器模块+蜂鸣器报警电路+LCD1602液晶显示电路+矩阵按键电路+电源电路组成

3、实现效果

整体展示

设置零时密码,可在需要时使用

4、设计原理

4.1按键简介

通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动.按键稳定闭合时间长短是由操作人员决定的,通常都会在100ms以上,刻意快速按的话能达到40-50ms左右,很难再低了。抖动时间是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。

4.2 STM32F103C8T6简介

  1. STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。
  2. 一、STM32的主要优点:
  3. (1)使用ARM最新的、先进架构的Cortex-M3内核
  4. (2) 优异的实时性能
  5. (3) 杰出的功耗控制
  6. (4) 出众及创新的外设
  7. (5) 最大程度的集成整合
  8. (6) 易于开发,可使产品快速将进入市场
  9. 二、STM32——最佳的平台选项
  10. 对于使用同一平台进行多个项目开发而言,STM32是最
  11. 佳的选择:
  12. (1) 从仅需少量的存储空间和管脚应用到需要更多的存储空间和管脚的应用
  13. (2) 从苛求性能的应用到电池供电的应用
  14. (3) 从简单而成本敏感的应用到高端应用
  15. (4) 全系列脚对脚、外设及软件的高度兼容性,给您带来全方位的灵活性。您可以在不必修改您原始框架及软件的条件下,将您的应用升级到需要更多存储空间或精简到使用更少存储空间/ 或改用不同的封装的规格。
  16. STM32F103C8T6单片机核心板接口电路图如下图所示。

STM32单片机核心板接口原理图

5、部分核心代码

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个基于 STM32F103C8 微控制器的矩阵键盘密码锁程序的示例代码: ```c #include "stm32f10x.h" #define ROW_NUM 4 #define COL_NUM 4 GPIO_InitTypeDef GPIO_InitStructure; // 矩阵键盘的行引脚数组 GPIO_TypeDef* ROW_PORT[ROW_NUM] = {GPIOA, GPIOA, GPIOA, GPIOA}; uint16_t ROW_PIN[ROW_NUM] = {GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3}; // 矩阵键盘的列引脚数组 GPIO_TypeDef* COL_PORT[COL_NUM] = {GPIOA, GPIOA, GPIOA, GPIOA}; uint16_t COL_PIN[COL_NUM] = {GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7}; // 密码数组 uint8_t password[4] = {'1', '2', '3', '4'}; uint8_t input_password[4]; // 错误密码计数器 uint8_t error_count = 0; void delay(uint32_t time) { while(time--); } void init_GPIO() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 初始化行引脚为输出模式 for (int i = 0; i < ROW_NUM; i++) { GPIO_InitStructure.GPIO_Pin = ROW_PIN[i]; GPIO_Init(ROW_PORT[i], &GPIO_InitStructure); } GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 初始化列引脚为输入模式带下拉 for (int i = 0; i < COL_NUM; i++) { GPIO_InitStructure.GPIO_Pin = COL_PIN[i]; GPIO_Init(COL_PORT[i], &GPIO_InitStructure); } } // 读取键盘的当前按键 uint8_t read_key() { for (int i = 0; i < ROW_NUM; i++) { GPIO_ResetBits(ROW_PORT[i], ROW_PIN[i]); for (int j = 0; j < COL_NUM; j++) { if (GPIO_ReadInputDataBit(COL_PORT[j], COL_PIN[j]) == Bit_RESET) { delay(100); if (GPIO_ReadInputDataBit(COL_PORT[j], COL_PIN[j]) == Bit_RESET) { while (GPIO_ReadInputDataBit(COL_PORT[j], COL_PIN[j]) == Bit_RESET); GPIO_SetBits(ROW_PORT[i], ROW_PIN[i]); return i * COL_NUM + j + 1; } } } GPIO_SetBits(ROW_PORT[i], ROW_PIN[i]); } return 0; } int main(void) { init_GPIO(); while (1) { uint8_t key = read_key(); if (key != 0) { input_password[error_count] = key + '0'; error_count++; if (error_count == 4) { error_count = 0; // 检查密码是否正确 int correct = 1; for (int i = 0; i < 4; i++) { if (input_password[i] != password[i]) { correct = 0; break; } } if (correct) { // 密码正确的处理逻辑 // ... } else { // 密码错误的处理逻辑 // ... } } } } } ``` 这是一个简单矩阵键盘密码锁程序,使用了 STM32F103C8 微控制器和 GPIO 引脚控制。你可以根据自己的需求进行修改和扩展。注意,这只是一个示例代码,可能需要根据你的具体硬件和需求进行适配和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值