Diseño de proyecto STM32: basado en el sistema de ascensor inteligente stm32f103c8t6

Enlace de datos: se actualizará ~
Enlace de video de Bilibili: https://www.bilibili.com/video/BV17D4y1V7HG/?vd_source=e5082ef80535e952b2a4301746491be0 (bilibili: convertido en polvo mi)
enlace de datos: https://pan.baidu.com/ s/1qObK7KBl50RmFrAtoX12kw
código de extracción: iih4

1. Visión general de las funciones del proyecto

1. OLED muestra el piso actual, el piso de destino y otra información
2. Puede deslizar su tarjeta para llegar al piso designado
3. Puede deslizar su huella digital para llegar al piso designado
4. Puede ingresar la contraseña para ingresar al modo administrador, ingrese la tarjeta y la información del piso correspondiente, e ingrese la huella digital y la información del piso correspondiente, y puede modificar y eliminar la información de la tarjeta y la huella digital 5.
Use el motor paso a paso para subir y bajar los pisos
6. Use el mecanismo de dirección para controlar la apertura y cierre de la puerta (este proyecto no se ha realizado)
7. Hay una función de alarma.Alarma
8, la apariencia está construida con tablas de madera

2. Selección de materiales del proyecto

1. Selección de pantalla 0,96 pulgadas SPIOLED
inserte la descripción de la imagen aquí

2. Seleccione RF522 para el módulo de deslizamiento de tarjeta
inserte la descripción de la imagen aquí

3. Seleccione AS608 para el módulo de huellas dactilares
inserte la descripción de la imagen aquí

4. Seleccione el zumbador para el módulo de alarma
inserte la descripción de la imagen aquí

5. Introduzca la contraseña para seleccionar el botón de matriz
inserte la descripción de la imagen aquí

6. El circuito de alimentación selecciona la entrada de la interfaz USB y el chip reductor AMS1117 gira 3,3 V para suministrar energía al microcontrolador
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

7. El chip de control principal STM32F103C8T6 de selección de chip de
control principal debe poder controlar OLED, módulo de deslizamiento de tarjeta, módulo de huella digital y botones de matriz.En teoría, 51 microcomputadoras de un solo chip pueden cumplir con los requisitos, pero la cantidad de código es grande , y la memoria tendrá requisitos relativamente altos, así que elija los familiares stm32f103c8t6, ​​la memoria FLASH de 64K es suficiente para almacenar código y mostrar una gran cantidad de caracteres chinos.
inserte la descripción de la imagen aquí

3. Diseño esquemático

1. Diseño de sistema mínimo de microcomputadora de un solo chip
inserte la descripción de la imagen aquí
2. Diseño de la fuente de alimentación
inserte la descripción de la imagen aquí
3. Diseño de fuente de alimentación e interfaz de descarga de microcomputadora de un solo chip
inserte la descripción de la imagen aquí
4. Diseño de circuito de huella digital, botón, RFID, zumbador, motor paso a paso, etc.
inserte la descripción de la imagen aquí

4. Diseño de placa PCB

inserte la descripción de la imagen aquí

Cinco, el diseño del programa principal

(1) Ideas de diseño de programas:
1. Encuentre el código del módulo de huellas dactilares y trasládelo para la depuración.
2. Obtenga el controlador RFID y el controlador OLED de los comerciantes o de Internet. 3. Escriba
el controlador de botón de matriz y el controlador de motor paso a paso con principios relativamente simples por sí mismo.
La estructura de parámetros es conveniente para la administración
typedef struct
{ u32 HZCFlag; // convertido en un indicador de ahorro de polvo, los parámetros se inicializarán cuando se encienda y luego se guardarán en la MCU FLASH u8 passwd1 [7]; // Contraseña de administrador 1 u8 passwd2[7]; // Contraseña de administrador 2 u8 cardid[10][6]; //puede almacenar 10 ID de tarjeta u8 cardFloor[10];//matriz de almacenamiento de piso correspondiente a la tarjeta u8 CurrFloor;//piso actual u8 TgtFloor; //Piso de destino u8 errCnt ;//Recuento de errores u8 errTime;//Esperando el tiempo de error u8 fingerFloor[100];//El ID de huella dactilar corresponde al piso u16 fingNum;//Número de huella dactilar u16 cardNum;//Número de RFID } SysTemPat ; Con base en el funcionamiento de la estructura, es necesario asegurarse de que los datos estén sincronizados en tiempo real














#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();
							//跳到解锁界面
						}	
					}
				}		
		
		
	}		
		
		 
 }
 

6. Exhibición del producto terminado

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/mbs520/article/details/122617736
Recomendado
Clasificación