基于51单片机智能RFID刷卡一卡通扣费充值系统设计DIY17-551

17-551、51RFID一卡通扣费充值系统设计-RFID-LCD1602-KEY

产品功能描述:

本设计由STC89C52单片机电路+RFID读卡器模块+液晶LCD1602显示电路+按键电路+串口模块串口电路+电源电路组成。

1、可以通过按键K1、K2设置扣费金额,金额为0-20,按键设置精度为1。

2、按下按键K3,则进入扣费状态,如果RFID卡刷卡后,则开始扣费。

3、按下按键K4,则扣费,按一次,扣一次。

4、LCD1602液晶实时显示扣费金额、余额。

5、如果系统有任何操作,则系统通过串口将当前信息上传到电脑,否则不上传。

6、液晶实时显示读卡状态,是否有效卡及有无卡状态提示。

7、充值后金额过充提醒,扣费金额不足提醒。


以下是51单片机通过RFID读卡器读取RFID卡片的示例代码: ```c #include <reg52.h> // 引入单片机头文件 sbit beep=P1^5; // 蜂鸣器引脚 sbit led=P1^4; // LED引脚 unsigned char code table[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F}; // RFID卡片ID码的映射表 void delay(unsigned int i) // 延时函数 { unsigned int j,k; for(j=i;j>0;j--) for(k=120;k>0;k--); } void write(unsigned char addr, unsigned char dat) // 写入数据到RC522寄存器 { P0 = addr; P2 &= ~0x01; P0 = dat; P2 |= 0x01; } unsigned char read(unsigned char addr) // 从RC522寄存器读取数据 { P0 = addr|0x80; P2 &= ~0x01; delay(1); P2 |= 0x01; delay(1); return P0; } void init() // 初始化RC522 { write(0x01,0x0F); // 复位 write(0x2A,0x8D); // 开启天线 write(0x2B,0x3E); // 天线增益 write(0x2D,0x30); // 信号强度调节 write(0x2C,0); // 关闭M1卡片检测 } unsigned char request() // 寻卡 { unsigned char status; unsigned int i; write(0x0D,0x07); status = read(0x0D); if(status == 0x07) // 寻到卡 { status = 0; write(0x0D,0x00); write(0x0E,0x0C); write(0x0F,0x00); for(i=0;i<1000;i++) // 等待卡片回应 { status = read(0x0F); if(status == 0x18) break; delay(1); } if(status == 0x18) // 卡片已经准备好 { write(0x0D,0x08); status = 1; } } return status; } unsigned char anticoll() // 防冲突 { unsigned char i,status; unsigned char cardid[5]; write(0x0D,0x01); status = read(0x0D); if(status == 0x01) // 防冲突成功 { status = 0; cardid[0] = read(0x16); cardid[1] = read(0x17); cardid[2] = read(0x18); cardid[3] = read(0x19); cardid[4] = read(0x1A); for(i=0;i<4;i++) status ^= cardid[i]; if(status != cardid[4]) // 校验失败 status = 0; } return status; } void main() { unsigned char i,cardid[5]; TMOD = 0x01; TH0 = 0xFC; TL0 = 0x18; TR0 = 1; ET0 = 1; EA = 1; init(); while(1) { if(request()) // 寻卡成功 { if(anticoll()) // 防冲突成功 { for(i=0;i<5;i++) cardid[i] = read(0x16+i); for(i=0;i<4;i++) { P0 = table[cardid[i] >> 4]; delay(10); P0 = table[cardid[i] & 0x0F]; delay(10); } P0 = 0x00; delay(100); led = !led; beep = 1; delay(100); beep = 0; } } } } void timer0() interrupt 1 // 定时器中断 { TH0 = 0xFC; TL0 = 0x18; beep = !beep; } ``` 这段代码使用了RC522 RFID模块进行卡片的读取,通过不断的寻卡和防冲突操作,最终可以将读取到的RFID卡片ID码输出到P0口,并且控制LED和蜂鸣器进行状态的提示。其中,需要注意的是RC522模块的引脚连接和初始化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值