当前位置:网站首页>基于c8t6芯片开发RC522模块实现呼吸灯
基于c8t6芯片开发RC522模块实现呼吸灯
2022-07-28 02:12:00 【十年哞一剑】
RC522模块

射频识别,即RFID是Radio Frequency Ident ificat ion的缩写,
又称无线射频识别,是一.种通信技术,可通过无线电讯号识别特定目标并读写相关数据,
而无需识别系统与特定目标之间建立机械或光学接触。
工作 原理
看看就行了
RFID中间件的概念
比如 linux 的 cp 指令 cp xx.c xxx.c
xx.c 和 xxx.c 存放的目录有可能不同
也就是导致各个目录的属性不同
就引出了一个虚拟文件系统的概念
虚拟文件系统就是提供通用的接口
就可以实现cp 指令
即为中间件
代码
main.c
#include "usart.h"
#include "stm32f10x_spi.h"
#include "RC522.h"
#include "delay.h"
#include "string.h"
#include "spi_driver.h"
#include "stdio.h"
#include "pwm.h"
#include "beep.h"
#include "switch.h"
#include "kz.h"
#include "breth.h"
#include "led.h"
#include "timer.h"
#include "usart3.h"
#include "oled.h"
/* 接线 ******************************************************************* STM32F103C8T6 RC522模块 PA4£¨ SPI1_NSS£ SDA PA5£¨ SPI1_SCK£ SCK PA6£¨ SPI1_MISO£ MISO PA7£¨ SPI1_MOSI£ MOSI PA11 RS RST PB1 IRQ IRQ 不接 USART1_TX GPIOA.9 USART1_RX GPIOA.10 ********************************************************************* */
uint8_t Card_Type1[2];
uint8_t Card_ID[4];
uint8_t Card_KEY[6] = {
0xff,0xff,0xff,0xff,0xff,0xff}; //{0x11,0x11,0x11,0x11,0x11,0x11}; //ÃÜÂë
uint8_t Card_Data[16];
uint8_t status;
uint8_t flag;
uint8_t Run_flag=1;
uint8_t Lock_flag=0;
u16 led0pwmval=0;
u8 dir=1;
void bulecard(void); /*蓝卡的功能函数*/
void Pwm_init(void);/*呼吸灯函数init*/
void pwm_led(void);/*º呼吸灯函数*/
void delay(uint32_t t)
{
while(t--);
}
int main(void)
{
Card_Type1[0]=0x04;
Card_Type1[1]=0x00;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //
uart_init(115200);
RC522_IO_Init();
PcdReset(); //复位引脚配置
PcdAntennaOff(); //关闭天线
delay_ms(100);
PcdAntennaOn(); //开启天线
LED_Init();//
Pwm_init();// 呼吸灯初始化
Switch_Init();
delay_ms(500);
printf("\r\n*****************************RC522*****************************\r\n");
while(Run_flag)
{
bulecard();/*¼ì²âÀ¶¿¨Èç¹û´æÔÚÒ»´Î ¾ÍµÆÁÁ ±£³ÖÒ»¸ö״̬*/
}
}
void bulecard(void)
{
if(MI_OK==PcdRequest(0x52, Card_Type1)) //Ѱ¿¨º¯Êý£¬Èç¹û³É¹¦·µ»ØMI_OK ´òÓ¡¶à´Î¿¨ºÅ
{
uint16_t cardType = (Card_Type1[0]<<8)|Card_Type1[1];//¶Á²»Í¬¿¨µÄÀàÐÍ
printf("¿¨ÀàÐÍ£º(0x%04X)\r\n",cardType); //"Card Type(0x%04X):"
switch(cardType)
{
case 0x4400:
printf("Mifare UltraLight\r\n");
break;
case 0x0400:
printf("Mifare One(S50)\r\n");
break;
case 0x0200:
printf("Mifare One(S70)\r\n");
break;
case 0x0800:
printf("Mifare Pro(X)\r\n");
break;
case 0x4403:
printf("Mifare DESFire\r\n");
break;
default:
printf("Unknown Card\r\n");
break;
}
status = PcdAnticoll(Card_ID);//·À³åײ Èç¹û³É¹¦·µ»ØMI_OK
if(status != MI_OK)
{
printf("Anticoll Error\r\n");
}else
{
printf("Serial Number:%d %d %d %d\r\n",Card_ID[0],Card_ID[1],Card_ID[2],Card_ID[3]);
flag=data_kz(Card_ID);
printf("flag=%d \r\n",flag);
flag=0; /*细节处理*/
/* 根据串口打印flag值而改*/
if(flag==0)
{
pwm_led();/*呼吸灯效果*/
}
else
BEEP_FAIL();
flag=1; /* 保证flag==0 不发生*/
}
status = PcdSelect(Card_ID); //Ñ¡¿¨ Èç¹û³É¹¦·µ»ØMI_OK
if(status != MI_OK){
printf("Select Card Error\r\n");
}
else
printf("Select Card OK\r\n");
status = PcdHalt(); //¿¨Æ¬½øÈëÐÝÃß״̬
if(status != MI_OK){
printf("PcdHalt Error\r\n");
}
else
{
printf("PcdHalt OK\r\n");
}
}
}
void Pwm_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
}
void pwm_led(void)
{
unsigned int f=0;
unsigned int g=6000;
for(f=0;f<6000;f++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
delay(f);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
delay(g-f);
}
}
详细 可以私聊 哞哞
边栏推荐
- Docker高级篇-Docker容器内Redis集群配置
- 综合 案例
- 行业洞察 | 语音识别真的超过人耳朵了吗?
- How to simply realize the function of menu dragging and sorting
- "29 years old, general function test, how do I get five offers in a week?"
- pytest最好的测试框架
- JVM memory layout detailed, illustrated, well written!
- NPDP考生!7月31号考试要求在这里看!
- Center Based 3D object detection and tracking (centerpoint) paper notes
- Development and design logic of rtsp/onvif protocol easynvr video platform one click upgrade scheme
猜你喜欢

JVM 内存布局详解,图文并茂,写得太好了!

Record of a cross domain problem
[email protected] Annotation usage"/>[email protected] Annotation usage

Pycharm 快速给整页全部相同名称修改的快捷键

Kubernetes-----介绍

JS中的reduce()函数介绍

Day 19 of leetcode

四、固态硬盘存储技术的分析(论文)

vscode debug显示多列数据
![[image hiding] digital image information hiding system based on DCT, DWT, LHA, LSB, including various attacks and performance parameters, with matlab code](/img/69/1b547c35fd4af18405b586ad581da7.png)
[image hiding] digital image information hiding system based on DCT, DWT, LHA, LSB, including various attacks and performance parameters, with matlab code
随机推荐
On the problem that sqli labs single quotation marks do not report errors
Pychart shortcut key for quickly modifying all the same names on the whole page
小程序已获取数据库合集中的总记录、用户位置,怎么用Aggregate.geoNear将经纬度由近到远排列?
Commissioning experience of ROS
Selenium+pytest+allure comprehensive exercise
Record of a cross domain problem
app 自动化 环境搭建(一)
Building of APP automation environment (I)
每日刷题巩固知识
Opengauss source code, what ide tools are used to manage, edit and debug?
[wechat applet development (V)] the interface is intelligently configured according to the official version of the experience version of the development version
Arm32进行远程调试
TFX airflow experience
Es6.--promise, task queue and event cycle
别再用 offset 和 limit 分页了,性能太差!
Redis AOF log persistence
从硬件编程到软件平台的ci/cd
LoRaWAN中的网关和chirpstack到底如何通信的?UDP?GRPC?MQTT?
Docker advanced -redis cluster configuration in docker container
openGauss源代码,用什么IDE工具管理、编辑、调试?