首页 > 其他分享 >3.2 门禁系统初步

3.2 门禁系统初步

时间:2023-09-10 22:22:06浏览次数:30  
标签:MD OFF MC MB 门禁系统 初步 START 3.2 MA

门禁系统初步

外设

步进电机

image-20230910211653751

#define MA_START                            GPIO_SetBits(GPIOB, GPIO_Pin_0)
#define MA_OFF                            GPIO_ResetBits(GPIOB, GPIO_Pin_0)

#define MB_START                            GPIO_SetBits(GPIOB, GPIO_Pin_1)
#define MB_OFF                            GPIO_ResetBits(GPIOB, GPIO_Pin_1)

#define MC_START                            GPIO_SetBits(GPIOB, GPIO_Pin_10)
#define MC_OFF                            GPIO_ResetBits(GPIOB, GPIO_Pin_10)

#define MD_START                            GPIO_SetBits(GPIOB, GPIO_Pin_11)
#define MD_OFF                            GPIO_ResetBits(GPIOB, GPIO_Pin_11)

void StepperMotor_init(void){
	GPIO_InitTypeDef GPIO_InitTypeDefStructure;
	GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_Out_PP;	
   GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11;
	GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_Init(GPIOB,&GPIO_InitTypeDefStructure);
}

void MotorCWRun(uint angle,uint drct,uint speed)
{
    uint step,nangle;
    step=0;
    nangle=512*angle/45;//将角度换算成拍数,计算结果自动取整
    if(drct==0)
    {
        while(nangle--)
        {
            switch(step)//8拍方式驱动,每拍转(5.265/64)度
            {
                case 0:MA_START;MB_OFF;MC_OFF;MD_OFF;break;
                case 1:MA_START;MB_START;MC_OFF;MD_OFF;break;
                case 2:MA_OFF;MB_START;MC_OFF;MD_OFF;break;
                case 3:MA_OFF;MB_START;MC_START;MD_OFF;break;
                case 4:MA_OFF;MB_OFF;MC_START;MD_OFF;break;
                case 5:MA_OFF;MB_OFF;MC_START;MD_START;break;
                case 6:MA_OFF;MB_OFF;MC_OFF;MD_START;break;
                case 7:MA_START;MB_OFF;MC_OFF;MD_START;break;
            }
            if(step==7)step=0;
            else step++;

​        if(speed>100)speed=100;
​        Delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快,但是时间太短会造成电机堵转(不转了)
​    }
}
else
{
​    while(nangle--)
​    {
​        switch(step)
​        {
​            case 0:MA_START;MB_OFF;MC_OFF;MD_START;break;
​            case 1:MA_OFF;MB_OFF;MC_OFF;MD_START;break;
​            case 2:MA_OFF;MB_OFF;MC_START;MD_START;break;
​            case 3:MA_OFF;MB_OFF;MC_START;MD_OFF;break;
​            case 4:MA_OFF;MB_START;MC_START;MD_OFF;break;
​            case 5:MA_OFF;MB_START;MC_OFF;MD_OFF;break;
​            case 6:MA_START;MB_START;MC_OFF;MD_OFF;break;
​            case 7:MA_START;MB_OFF;MC_OFF;MD_OFF;break;
​        }
​        if(step==7)step=0;
​        else step++;
​        if(speed>100)speed=100;
​        Delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快,但是时间太短会造成电机堵转(不转了)
​    }
}
MA_OFF;MB_OFF;MC_OFF;MD_OFF;

}

void MotorCCWRun(uint angle,uint drct,uint speed)
{
    uint step,nangle;
    step=0;
    nangle=512*angle/45;//将角度换算成拍数,计算结果自动取整
    if(drct==0)
    {
        while(nangle--)
        {
            switch(step)//8拍方式驱动,每拍转(5.265/64)度
            {
				case 0:MA_START;MB_OFF;MC_OFF;MD_START;break;
                case 1:MA_OFF;MB_OFF;MC_OFF;MD_START;break;
                case 2:MA_OFF;MB_OFF;MC_START;MD_START;break;
                case 3:MA_OFF;MB_OFF;MC_START;MD_OFF;break;
                case 4:MA_OFF;MB_START;MC_START;MD_OFF;break;
                case 5:MA_OFF;MB_START;MC_OFF;MD_OFF;break;
                case 6:MA_START;MB_START;MC_OFF;MD_OFF;break;
                case 7:MA_START;MB_OFF;MC_OFF;MD_OFF;break;
				
                

​        }
​        if(step==7)step=0;
​        else step++;

​        if(speed>100)speed=100;
​        Delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快,但是时间太短会造成电机堵转(不转了)
​    }
}
else
{
​    while(nangle--)
​    {
​        switch(step)
​        {
​            case 0:MA_START;MB_OFF;MC_OFF;MD_OFF;break;
​            case 1:MA_START;MB_START;MC_OFF;MD_OFF;break;
​            case 2:MA_OFF;MB_START;MC_OFF;MD_OFF;break;
​            case 3:MA_OFF;MB_START;MC_START;MD_OFF;break;
​            case 4:MA_OFF;MB_OFF;MC_START;MD_OFF;break;
​            case 5:MA_OFF;MB_OFF;MC_START;MD_START;break;
​            case 6:MA_OFF;MB_OFF;MC_OFF;MD_START;break;
​            case 7:MA_START;MB_OFF;MC_OFF;MD_START;break;
​        }
​        if(step==7)step=0;
​        else step++;
​        if(speed>100)speed=100;
​        Delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快,但是时间太短会造成电机堵转(不转了)
​    }
}
MA_OFF;MB_OFF;MC_OFF;MD_OFF;

}

RFID-RC522

、、

  • 复位应答(Request)
    • M1卡的通信协议和通信波特率是定义好的,当有卡片进入读卡器的工作范围时,读卡器要以特定的协议与卡片通信,从而确定卡片的卡型。
  • 防冲突机制(Anticollision Loop)
    • 当有多张卡片进入读写器操作范围时,会从中选择一张卡片进行操作,并返回选中卡片的序列号。
  • 选择卡片(Select Tag)
    • 选择被选中的卡的序列号,并同时返回卡的容量代码。
  • 三次相互确认(3 Pass Authentication)
    • 选定要处理的卡片后,读写器就要确定访问的扇区号,并且对扇区密码进行密码校验。在三次互相认证后就可以通过加密流进行通信。每次在选择扇区的时候都要进行扇区的密码校验。
  • 对数据块的操作
    • 读(Read):读一个块的数据;
    • 写(Write):在一个块中写数据;
    • 加(Increment):对数据块中的数值进行加值;
    • 减(Decrement):对数据块中的数值进行减值;
    • 传输(Transfer):将数据寄存器中的内容写入数据块中;
    • 中止(Halt):暂停卡片的工作;

门禁系统

int main(void){
	char status;
	unsigned char snr, buf[16], TagType[2], SelectedSnr[4], DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 
	unsigned char MySnr[4]={0xC2,0x0B,0x77,0x1D};
	GPIO_ini();  
	InitializeSystem( );
	Buzzer_Init();
	Serial_Init();
	StepperMotor_init();
	OLED_Init();
	OLED_Clear();
	while (1){
		status= PcdRequest(REQ_ALL,TagType);    //寻卡
		if(!status){
			status = PcdAnticoll(SelectedSnr);   //防冲撞
			if(!status){
				status=PcdSelect(SelectedSnr);    //选卡
				if(!status){
					k=0;
					snr = 1;  //扇区号1
					status = PcdAuthState(KEYA, (snr*4+3), DefaultKey, 									SelectedSnr);// 校验1扇区密码,密码位于每一扇区第3块{
						LED_ON;	
						if(!status){
							status = PcdRead((snr*4+0), buf);  // 读卡,读取1扇区0块数据																		到buf[0]-buf[16] 
							status = PcdWrite((snr*4+0), buf);  // 写卡,将buf[0]-																		buf[16]写入1扇区0块
							if(!status){
								for(i=0;i<4;i++){
									if(SelectedSnr[i]==MySnr[i]){
										k++;
									}
								}
									if(k==4){
										Serial_SendArray(SelectedSnr,4);
										MotorCCWRun(90,0,100);
										OLED_Clear();
										OLED_ShowString(1,1,"OPEN!");
									}
								WaitCardOff();
							}
						}
					}
				}
			}
		}	
		LED_OFF; 
		Buzzer_NoRun();
	}
}

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=5727779459273215649&skey=@crypt_c72b263e_a24a3a3ed78b00b9a7f0d018d80e6a0d&mmweb_appid=wx_webfilehelper联想截图_20230910215726

标签:MD,OFF,MC,MB,门禁系统,初步,START,3.2,MA
From: https://www.cnblogs.com/yangbz2003-cn/p/17692141.html

相关文章

  • FMC AD 子卡 12bit 2 通道1.6GS/s 或 单通道3.2GS/s
    概要QT7132是一款高分辨率、高采样率ADCFMC子板。它提供2路12位1.6GS/s或1路3.2GS/sA/D通道,全功率带宽可达2.8GHz。本产品是基于TI公司ADC12D1600模数转换芯片而设计。板卡支持2路触发输入/输出通道;时钟模式支持内部参考时钟、外部参考时钟和外部采样时钟输入等多种......
  • FMC AD子卡12bit 两通道3.2G或单通道6.4G
    概要QT7126+是一款高分辨率、高采样率ADCFMC+子板。它提供2路12位3.2GS/s或1路6.4GS/s的A/D通道,全功率模拟-3dB输入带宽可达8GHz。本产品是基于TI公司ADC12DJ3200模数转换芯片而设计。板卡支持触发输出/输入;外触发/同步选择和内部参考、外部参考和载板参考三种时......
  • FMC ADC12DJ3200子卡12bit 两通道3.2G或单通道6.4G
    概要QT7126是一款高分辨率、高采样率ADCFMC子板。它提供2路12位3.2GS/s或1路6.4GS/s的A/D通道,全功率模拟-3dB输入带宽可达8GHz。本产品是基于TI公司ADC12DJ3200模数转换芯片而设计。板卡支持同步触发输出或者输入;内部参考时钟、外部参考两种时钟方式,可通过SPI总线实现时钟源选择......
  • Python初步了解装饰器
    Python初步了解装饰器装饰器的概念装饰器的简单使用装饰器的进阶装饰器的练习装饰器的固定模块装饰器的语法糖装饰器的概念装饰器它不是一个新的知识点,它是有之前我们学习的名称空间、函数嵌套、闭包函数等知识点汇总而来器:工具装饰:为其他事物添加功能装饰器:不修该装......
  • AI实战——跟着b站up主初步了解
    Python+人工智能通俗易懂版教学BV1ou411U7J4安装Python/anaconda/jupyter【注意:anacondanavigitor没有自动安装、jupyter学会改UI】了解python基本语法了解工具包matplotlib/numpy/pandas第一个用于作图,第二个用于数学运算,第三个用于数据筛选处理什么是机器学习?什么是监......
  • idea2023.2版本配置tomcat
    1,首先确保tomcat已经配置好,运行正常2,打开idea,右键项目,找到addframesupport(添加框架结构),我这里没有,所以我是在help,findaction搜索addframesupport(注意要先点击选中项目)  4,找到选中即可,勾选web.appliction 出现如图所示即可 5,添加java文件存放的地方classes......
  • 界面控件DevExpress WPF(v23.2)下半年发展路线图
    本文主要概述了DevExpress官方在下半年(v23.2)中一些与DevExpressWPF相关的开发计划。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPFv23.1正式版下载DevExpress技术交流群8......
  • #2023盲盒+码# OpenHarmony3.2壁纸设置应用整合包和安装教程
    【本文正在参加2023「盲盒」+码有奖征文活动】https://ost.51cto.com/posts/25284(目录)序言前段时间研究了下OpenHarmony3.2自带的启动器应用源码,发现壁纸设置api设置无效的根本原因在于启动器内代码写死了一个固定的图片作为壁纸,经过不断地探索尝试,最终通过修改系统启动器和......
  • 界面控件DevExtreme(v23.2)下半年发展路线图
    在这篇文章中,我们将介绍DevExtreme在v23.2中发布的一些主要特性,这些特性既适用于DevExtremeJavaScript(Angular、React、Vue、jQuery),也适用于基于DevExtreme的ASP.NETMVC/Core控件。DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中使用。......
  • C++11——3.21-3.22 move,forward
    ★★★原文链接★★★:https://subingwen.cn/cpp/move-forward/3.21move资源的转移3.22forward完美转发3.21move资源的转移move方法可以将左值转换为右值使用这个函数并不能移动任何东西,它将一个对象的所有权从这个对象转移到另一个对象,只是转移,没有内存拷贝。move语......