STC单片机实现125kHz ID卡读取及串口通信

1星 需积分: 50 49 下载量 24 浏览量 更新于2024-09-08 4 收藏 6KB TXT 举报
"该资源提供了一个使用STC单片机读取125kHz ID卡数据的程序,读取的数据通过串口发送到个人计算机(PC)进行显示。程序涉及了低频RFID(射频识别)技术,适用于门禁控制等应用。" 在给定的代码中,我们可以看到以下几个关键知识点: 1. **STC单片机**:这是一个8位微控制器,用于处理读卡器的操作。STC系列单片机以其内置的高速振荡器、低功耗和丰富的I/O引脚而被广泛使用。 2. **125kHz ID卡**:这是低频(LF)RFID系统中常见的频率,主要用于门禁、考勤等近距离识别应用。125kHz卡片通常包含一个唯一的ID号,不支持数据写入。 3. **串口通信**:程序中提到的通过串口将数据发送到PC端,指的是使用UART(通用异步收发传输器)接口,这是一种常见的设备间通信方式,允许单片机与PC或其他设备交换数据。 4. **延迟函数`Delay300us()`**:此函数用于在程序中插入一定时间的延迟,确保操作按照预期的时间顺序进行。在这个例子中,它使用了一个简单的忙等待循环来实现。 5. **数据检测函数`Data_change()`**:这个函数检查ID卡是否正在发送数据。它通过检测天线连接的GPIO引脚`EM_DATA`的电平变化来判断是否有数据传输。如果检测到连续两次引脚为低,说明有数据传输,返回1;否则返回0。 6. **数据校验函数`Data_R_check()`**:这个函数用于接收并校验来自ID卡的数据。它将接收到的多位数据分组,并进行相应的位操作,如位移和与运算,以解码ID卡发送的数据。这里使用了数组`t_buf`存储每个数据位,然后逐个提取并组合成完整的ID号码。 7. **位操作**:在`Data_R_check()`函数中,可以看到对`temp_buf`数组中的二进制位进行操作,这表明程序在从接收到的原始数据中提取有效信息。这种方法常用于低级别的数据处理,尤其是在内存有限的嵌入式系统中。 8. **RFID数据格式**:虽然没有给出完整的数据格式,但可以看出程序从接收到的原始数据中每4位一组,组合成ID号码的一部分。实际的125kHz RFID卡数据格式可能包括起始位、校验位和其他控制字,但这段代码只展示了数据的解码部分。 以上是基于给定代码段分析的关键知识点,它们涵盖了单片机编程、RFID技术、串口通信以及位操作等多个方面。在实际应用中,还需要结合具体的硬件电路和RFID协议来完整实现125kHz ID卡的读取系统。
2021-04-21 上传
125kHZ低频读卡器功能概述: 本资源中包含读卡器原理图及PCB文件、读卡器源程序和电脑端上位机源程序。读卡器可以直接制作使用,可以使用附件中的上位机与读卡器进行通信,控制读卡器对T5557类卡片进行读写操作。对T5557卡片的配置必须为(RF/32,曼侧斯特编码),这也是国内T5557卡的常用配置。要对其他配置的T5557卡片或其他低频卡片(EM4305类和EMID卡片)进行读写,硬件上是支持的,只需根据卡片文档修改读卡器源程序,下载更新便可。为方便程序更新,硬件电路上已经实现自动下载,使用串口下载程序时无需手动设置BOOT0和BOOT1。 应用场景: 低频RFID主要用在短距离、低成本的应用中,如门禁控制、校园卡、煤气表、水表等。 在相关领域的开发中,可以使用该读卡器作为前台管理的设备,对客户卡进行管理。也可以将读卡器改成终端设备,如RFID门锁上的读卡器,用来验证卡片信息并控制门锁;或煤气表、水表上的读卡器,根据卡片内的余量信息控制煤气和水的供应。另外,也可以作为学习曼彻斯特解码的学习工具。 设计思路: 使用STM32F103R8T6输出125kHZ的PWM信号作为载波信号,将信号输入到功率放大电路,在线圈上产生125kHZ的正弦信号。T5557卡片从125kHZ信号中获取能量和控制命令,并根据命令将要传回的信息使用曼彻斯特编码对载波信号进行调制。读卡器端的检波电路和滤波放大电路将被调制信号提取处理成单片机能识别的数字信号,输入到STM32F103R8T6的输入捕获功能引脚,再通过STM32F103R8T6将捕获的信号进行曼彻斯特解码,最后将解码信息根据自己设定的通讯协议进行数据打包,发送到电脑上位机。 系统框图: 硬件平台: 1.主控制器:STM32F103R8T6 2.USB转TTL:CH340G 3.模拟电路:LM358 AMS1117-3.3V 125kHZ谐振线圈(345UH线圈搭配4700PF电容)谐振频率在线计算工具 4.蜂鸣器: 3V供电 软件平台: 开发工具:Keil uVision5 上位机编写工具:Microsoft Visual C# 学习版 成本估算: 芯片询价和在线购买链接https://www.bom2buy.com/元器件估算价格约为30元 项目进度: 1.能对AT5557/55567/5577卡片(配置为RF/32,曼彻斯特编码)进行整页读,密码读和密码写操作; 2.有相应的上位机,方便读写指令的发送和数据解读; 3.上位机与读卡器之间通讯加入了数据校验,提高了通讯的可靠性。 未来更新: 1.加入EM4305类和EMID卡片的读写功能; 2.加上触摸显示屏和电池,做成便携版 3.做成袖珍版,加入与手机通讯的接口(OTG或蓝牙)
2021-04-22 上传
RFID读卡模块原理图是ORCAD的,有PDF预览,PCB是PADS的,还有BOM烧写说明,标注图等。其中UART输出是量产过的 韦根输出的只是看示波器波形是对的,没有实际应用;里面有源代码,编写前提是是CODE小于1K RAM小于64字节。 原理图原理就是CD4060产生125KHZ的方波,经过推挽电路进行功率放大,高频电流进入LC串联谐振电路,345uH和4.7NF的谐振频率正好是125KHZ,这时电容两端电压会到十几伏,如果用CBB电容,会到二十多伏,这时读卡距离会到10CM以上。当有卡接近线圈时,线圈两端会有曼彻斯特编码的调幅波。通过二极管以及电容的检波和滤波,产生的小信号送入LM358进行放大和整形,变成单片机可以读取的曼彻斯特编码信号。 关于硬件电路设计上,CD4060在3.3V时 4M以下的晶振都可以起振,但2M的晶振体积很大,所以用了4M。实验发现ATTINY13的频率随着工作电压的变化会有很大的变化,所以不能用RC校准了,正好CD4060会输出4M,所以用来当系统时钟,保证时序的精确性。这样模块在3.3V 5V都能工作。 ATTINY13接不了无缘晶振 只能接有源的~ 它只有一个CLKIN脚~有源晶振价格就贵了。 另外ATTINY13只有5个IO口 1个用于中断 1个用于UART输出 1个用于CLKIN 1个用于上电波特率配置 1个用于曼彻斯特编码输入 正好用完了 RFID读卡模块 模块正反面 串口收到5个字节 前4个字节就是卡号 程序中,根据曼彻斯特原理,找到长电平和短电平,根据跳变沿分析出0数据还是1数据。然后寻找消息头,后面的数据进行 行 列奇偶校验,从而分析出卡号。 程序上电时,通过ADC引脚读取外部电阻的分压配置,从而初始化出4中波特率。然后进行读卡操作。实际应用中,要保证读卡的稳定,当卡靠近线圈时,要只发一次数据。要很好的去抖。代码不能超过1K。现在代码正好1024个字节。关于奇偶校验算法,异或和要比对2取余简洁,但我测试时发现异或和代码长度大于对2取余,所以用了对2取余。 RFID读卡模块原理图+PCB+代码+调试至附件下载