STM32项目设计:基于stm32f103c8t6智能电梯系统

news2024/11/15 21:40:40

文章目录

  • 一、项目功能概述
  • 二、项目材料选择
  • 三、原理图设计
  • 四、PCB板设计
  • 五、主程序设计
  • 六、成品展示

资料链接:待更新~
哔哩哔哩视频链接:https://www.bilibili.com/video/BV17D4y1V7HG/?vd_source=e5082ef80535e952b2a4301746491be0(bilibili:化作尘my)

一、项目功能概述

1、OLED显示当前楼层、目标楼层等信息
2、可以刷卡到达指定楼层
3、可以刷指纹到达指定楼层
4、可以输入密码进入管理员模式,进行录入卡片与对应楼层信息,录入指纹与对应楼层信息,并可以修改删除指纹与卡片信息
5、用步进电机驱动上下楼层
6、用舵机控制开门关门
7、有报警功能,当密码错误、指纹错误、卡片错误,都会进行报警
8、外观用木板搭建

二、项目材料选择

1、显示选择0.96寸SPIOLED
在这里插入图片描述

2、刷卡模块选择RF522
在这里插入图片描述

3、指纹模块选择AS608
在这里插入图片描述

4、报警模块选择蜂鸣器
在这里插入图片描述

5、输入密码选择矩阵按键
在这里插入图片描述

6、电源电路选择USB接口输入,AMS1117降压芯片转3.3V给单片机供电
在这里插入图片描述
在这里插入图片描述

7、主控芯片选择STM32F103C8T6
主控芯片需要能够驱动OLED,刷卡模块、指纹模块、矩阵按键,理论上51单片机就可以满足要求,但是代码量大,内存会有比较高得要求,所以选择熟悉的stm32f103c8t6,64K FLASH内存足够存储代码与显示大量汉字。
在这里插入图片描述

三、原理图设计

1、单片机最小系统设计
在这里插入图片描述
2、电源部分设计
在这里插入图片描述
3、单片机供电与下载接口设计
在这里插入图片描述
4、指纹、按键、RFID、蜂鸣器、步进电机等电路设计
在这里插入图片描述

四、PCB板设计

在这里插入图片描述

五、主程序设计


#include "main.h"

#include <string.h>

SysTemPat sys;

#define MAXERRTIMES 5
#define usart2_baund  57600//串口2波特率,根据指纹模块波特率更改

//要写入到STM32 FLASH的字符串数组
const u8 TEXT_Buffer[]={0x17,0x23,0x6f,0x60,0,0};
#define TEXT_LENTH sizeof(TEXT_Buffer)	 		  	//数组长度	
#define SIZE TEXT_LENTH/4+((TEXT_LENTH%4)?1:0)
#define FLASH_SAVE_ADDR  0X0802C124 	//设置FLASH 保存地址(必须为偶数,且所在扇区,要大于本代码所占用到的扇区.
										//否则,写操作的时候,可能会导致擦除整个扇区,从而引起部分程序丢失.引起死机.

SysPara AS608Para;//指纹模块AS608参数
u16 ValidN;//模块内有效指纹个数
u8** kbd_tbl;

void Display_Data(void);//显示时间
void Add_FR(void);	//录指纹
void Del_FR(void);	//删除指纹
int press_FR(void);//刷指纹
void ShowErrMessage(u8 ensure);//显示确认码错误信息
int password(void);//密码锁
void SetPassworld(void);//修改密码
void starting(void);//开机界面信息
u8 MFRC522_lock(void);//刷卡解锁
u8 Add_Rfid(void);		//录入
void Set_Time(void);
void Massige(void);
void SysPartInit(void );   //系统参数初始化 
//u8 Pwd[7]="      ";  //解锁密码1
//u8 Pwd2[7]="      ";  //解锁密码2
//u8 cardid[6]={0,0,0,0,0,0};  //卡号1
int Error;  //密码验证信息


u8 DisFlag = 1,ArrowDisFlag=1;



//数字的ASCII码
uc8 numberascii[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//显示缓冲区
u8  dispnumber5buf[6];
u8  dispnumber3buf[4];
u8  dispnumber2buf[3];
//MFRC522数据区
u8  mfrc552pidbuf[18];
u8  card_pydebuf[2];
u8  card_numberbuf[5];
u8  card_key0Abuf[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u8  card_writebuf[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
u8  card_readbuf[18];
//SM05-S数据区
u8  sm05cmdbuf[15]={14,128,0,22,5,0,0,0,4,1,157,16,0,0,21};
//extern声明变量已在外部的C文件里定义,可以在主文件中使用
extern u8  sm05receivebuf[16];	//在中断C文件里定义
extern u8  sm05_OK;							//在中断C文件里定义

//u8 * week[7]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
u8 * week[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
u8 * setup[7]={"1、录入指纹","2、删除指纹","3、修改密码","4、修改时间","5、录入卡片","6、查看信息"};






 int main(void)
 {			
//	u16 set=0;
//	 u8 err=0;
//	int key_num;
	int time1;
//	int time2;		//锁屏时间
	char arrow=0;  //箭头位子
	//SysHSI_Init();
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 //串口初始化为9600
	printf("串口功能正常\r\n");
	Button4_4_Init();          //初始化与按键连接的硬件接口
	OLED_Init();    			//显示初始化
	Walkmotor_Init();        //步进电机初始化
	BEEP_Init();			//蜂鸣器初始化
	usart2_init(usart2_baund);           //初始化指纹模块
	PS_StaGPIO_Init();
	OLED_Clear(); 
	 
	starting();//开机信息  logo
//	err = RTC_Init();	  			//RTC初始化
//	if(err)
//	{
//		OLED_Clear(); 
//		Show_Str(12,13,128,20,"RTC CRY ERR!",12,0); 
//		OLED_Refresh_Gram();//更新显示
//		delay_ms(3000);
//	}
	SysPartInit();   //系统参数初始化 
	
	
	while(1)
	{
		time1++;
		if(DisFlag == 1)
		{
			OLED_ShowNum(58,20,sys.CurrFloor,1,24);//显示当前楼层
		}
		if(ArrowDisFlag == 1)
		{
			
		}
		if(sys.TgtFloor != sys.CurrFloor)//需要到达目标楼层
		{
			if(sys.TgtFloor > sys.CurrFloor)
			for(; sys.CurrFloor<sys.TgtFloor; )//上楼
			{
				sys.CurrFloor++;
				Walkmotor_ON();
				OLED_ShowNum(58,20,sys.CurrFloor,1,24);//显示当前楼层
			}else if(sys.TgtFloor < sys.CurrFloor)
			for(; sys.CurrFloor>sys.TgtFloor;)//下楼
			{
				sys.CurrFloor--;
				Walkmotor_OFF();
				OLED_ShowNum(58,20,sys.CurrFloor,1,24);//显示当前楼层
			}
		}
		if(sys.TgtFloor == sys.CurrFloor && sys.CurrFloor!=1)//如果电梯不在1楼停下,返回1楼
		{
			for(; sys.CurrFloor>1; )//下楼
			{
				sys.CurrFloor--;
				Walkmotor_OFF();
				OLED_ShowNum(58,20,sys.CurrFloor,1,24);//显示当前楼层
			}
		}
		
		/******************检测刷卡与指纹********************/
		if((time1%100)==1)
				{
					//MFRC522解锁
					time1=0;
					MFRC522_Initializtion();			
					Error=MFRC522_lock();
					if(Error==0)
					{
					}


				}
		//指纹解锁
				if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下
				{
						while(PS_Sta){
						Error=press_FR();//刷指纹
						if(Error==0)
						{
							//DisUnLock();
							//跳到解锁界面
						}	
					}
				}		
		
		
	}		
		
		 
 }
 

六、成品展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32G431——串口通信

蓝桥杯嵌入式——串口通信 目录 USART 电平标准-TTL 电平标准与 RS232 电平标准 232通信标准 USB转232 异步通信 串口配置 程序设计 重定向 串口发送函数 发送字符串 串口接收——中断 1.USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异…

集成测试最全详解,看完必须懂了

什么是集成测试 集成测试&#xff08;Integration Testing&#xff09;&#xff0c;也叫组装测试或联合测试。在单元测试的基础上&#xff0c;将所有模块按照设计要求&#xff08;如根据结构图&#xff09;组装成为子系统或系统&#xff0c;进行集成测试。 集成测试&#xff…

chatgpt的一些思考

结论国内同行对chatgpt的认识是不够的&#xff0c;太轻视这个模式的颠覆性认知chatgpt是对思维过程的仿真&#xff0c;rlhf过程就是通过强化学习方式在利用人思维过程训练模型chatgpt比搜索更通用化&#xff0c;搜索是对单个点信息的匹配&#xff0c;chatgpt是对思维链一个序列…

【python】多任务编程之线程、进程知识点详细总结

目录 多任务的执行方式 进程 概念 python多进程 线程 概念 python多线程 线程同步方式 线程等待 互斥锁 死锁 线程和进程对比 多任务的执行方式 进程 概念 python多进程 Windows下的main判断process进程类import multiprocessing import time def sing():for i i…

Unix环境高级编程_进程环境_启动代码,环境变量表,进程内存结构,库

这是《UNIX环境高级编程》第7章内容&#xff0c;这篇文章记录进程所需要的环境。 4 进程环境 程序加载到内存&#xff0c;运行起来后就成为了进程。就像人活着需要生活环境&#xff08;衣食住行的环境&#xff09;一样&#xff0c;进程也需要运行环境&#xff0c;进程所需要的…

Vue组件生命周期与钩子函数

组件生命周期 ​ 组件&#xff08;组件是可复用的 Vue 实例&#xff09;从创建到销毁的过程就是组件的生命周期&#xff0c;是一个时间段。 组件生命周期钩子函数 &#xff08;vue3与vue2生命周期钩子函数略有不同&#xff0c;本文以vue2为主&#xff09; ​ VUE 提供的生命…

科研快报 | 三代测序技术-海水微生物态,助力海水微生态及微生物基因组研究

PacBio研究专题二代测序读长偏短&#xff0c;环境宏基因组样品研究受到了很大限制。作者通过三代测序对来自地中海的冬季混合海水样本进行宏基因组测序。利用PacBio Sequel II平台的超长读长明显可以提升宏基因组的组装质量&#xff0c;又能显著提升MAGs质量。研究人员通过比较…

使用和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站&#xff1a;学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可&#xff0c;对于…

python - 科研文献作图复现1

记录阅读文献过程中&#xff0c;通过python复现原文的一些脚本 想要复现的文章原图如下所示 原文链接&#xff1a; https://file.scirp.org/Html/4-2430166_82999.htm 首先&#xff0c;对于原图进行简要观察。 这是一张折线图&#xff0c;绘制了6条不同颜色的折线来表示不同…

舆情监控软件免费下载,TOOM网络舆情监控软件服务流程?

舆情监测可以帮助个人和企业了解自己的网络形象&#xff0c;提高自我评价和评价能力&#xff0c;提升自我定位和竞争力。接下来简单了解舆情监控软件免费下载&#xff0c;TOOM网络舆情监控软件服务流程? 一、舆情监控软件免费下载 请登录TOOM舆情官网获取链接 1.企业客户&a…

SpringMVC(十三):SpringMVC拦截器介绍使用

文章目录 SpringMVC拦截器介绍使用 前言 一、拦截器使用 二、拦截器内容详解 1、preHandle方法 2、postHandle方法 3、afterCompletion方法 三、多个拦截器执行顺序 SpringMVC拦截器介绍使用 前言 在之前的系列文章里&#xff0c;我们学习了过滤器的知识。过滤器的作…

ejs模板在Express框架中的集成

在上一篇内容中已经使用了pug模板&#xff0c;那么本篇就来了解一下ejs模板在Express框架中的集成使用&#xff0c;ejs模板也是常用的模板引擎&#xff0c;支持在标签内直接编写javascript代码&#xff0c;通过javascript代码就能够生成HTML页面的&#xff0c;通过本期对ejs模板…

C++字符串全排列(递归法)和(迭代法)以及next_permutation底层原理详解

目录前言next_permutation的使用实现全排列的两种算法1. 递归法(全排列方便理解记忆的方法&#xff0c;作为备用方法)实现代码(无重复元素情况)有重复元素情况2. 迭代法(next_permutation底层原理)实现代码(有无重复不影响)前言 next_permutation/prev_permutation是C STL中的…

全国青少年软件编程(Python)等级考试一级考试真题2022年12月——持续更新.....

1.关于Python语言的注释,以下选项中描述错误的是?( ) A.Python语言有两种注释方式:单行注释和多行注释 B.Python语言的单行注释以#开头 C.Python多行注释使用###来做为标记 D.注释用于解释代码原理或者用途 正确答案:C 2.下列代码执行后最有可能绘制出的图形是?(…

网络原理(TCP/IP五层协议)(三)

目录4.滑动窗口(效率机制)5.流量控制(安全机制)6.拥塞控制(安全机制)7.延迟应答(效率机制)8.捎带应答(效率机制)9.面向字节流10.TCP的异常处理4.滑动窗口(效率机制) 滑动窗口存在的意义就是在保证可靠性的前提下&#xff0c;尽量提高传输效率。 在这里可以看到&#xff0c;由于…

JSP 学生成绩管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 学生成绩管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为SQLServer2008&#x…

layui 富文本layedit编辑、存储和回显

一、创建一个富文本编辑框 先定义一个textarea标签&#xff0c;给定一个id值&#xff0c;向页面引入layedit&#xff0c;然后调用layedit.build(id, options)构建富文本框 //官方给出的模板 <textarea id"demo" style"display: none;"></textar…

Linux的目录相关操作

目录 前言 处理目录的常见命令 cd&#xff08;change directory&#xff0c;切换目录&#xff09; pwd&#xff08;print working directory&#xff0c;显示目前所在的目录&#xff09; mkdir&#xff08;make directory&#xff0c;建立新目录&#xff09; rmdir&#x…

代码随想录算法训练营第十三天 | 第六章二叉树-理论基础,递归遍历,迭代遍历,统一迭代

一、参考资料二叉树理论基础文章讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 递归遍历题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%8…

Mobilenet v1-v3

MobileNet V1 理解 MobileNetV1的关键是理解深度可分离卷积 深度可分离卷积 Depthwise Separable Conv 深度可分离卷积单通道卷积&#xff08;提取特征&#xff09;逐点卷积&#xff08;增加维度&#xff09; 普通卷积 输入一个 12123 的一个输入特征图&#xff0c;经过256…