红外遥控RC522芯片RFID公交卡、饭卡刷卡系统应用(附源码)
一、功能简介:
1.有读卡信息(卡类型、类号、余额),初始化卡,充值和扣款功能。
2.多级菜单操作,菜单有反白高度显示。
3.全遥控操作,通过遥控键盘控制读、写卡,并可输入读、写数值。
4.自动设定数据范围,超范围自动提示。
5.可应用于公交卡刷卡和饭卡刷卡等类似应用。
二、系统组成:
1.MCU:STC12C5A60S2 ,11.0592MHz
2.12864带中文字库液晶
3.RFID读卡模块:RC522,+ S50卡
4.红外遥控038接收头,CARMP3遥控器,不同遥控器键值不同,若用不同品牌遥控器需修改键值
5.LED指示灯(或为蜂鸣器)
RC522接法:
sbit MF522_RST = P1^4;
sbit MF522_NSS = P1^2;
sbit MF522_SCK = P1^1;
sbit MF522_SI = P1^0;
sbit MF522_SO = P1^3;
LED指示灯接法:
sbit LED_GREEN = P1^5; //指示灯
12864接法:
#define Lcd_Bus P0 //数据口
sbit LCM_RS = P2^0; //寄存器选择输入
sbit LCM_RW = P2^1; //液晶读/写控制
sbit LCM_EN = P2^2; //液晶使能控制
sbit LCM_PSB = P2^3; //串/并方式
红外遥控接法:
sbit IRIN = P3^2; //红外接收器数据线
遥控器功能键说明:prev为退格键,next为切换键,play为确认键,0-9为相应数字键 100+为小数点键
注意:务必确保RC522供电为3.3V,接5V必烧!!!同时,为了系统运行稳定,整个系统最好单独供电,用usb供电可能电流不足!
下面是主要的程序:
- /************** 全遥控操作RFID刷卡系统************/
- /*
- 硬件:1.MCU:STC12C5A60S2 ,11.0592MHz
- 2.12864带中文字库液晶
- 3.RFID读卡模块:RC522,+ S50卡
- 4.红外遥控038接收头,CARMP3遥控器,不同遥控器键值不同,若用不同品牌遥控器需修改键值
- 5.LED指示灯(或为蜂鸣器)
- RC522接法:
- sbit MF522_RST = P1^4;
- sbit MF522_NSS = P1^2;
- sbit MF522_SCK = P1^1;
- sbit MF522_SI = P1^0;
- sbit MF522_SO = P1^3;
-
- LED指示灯接法:
- sbit LED_GREEN = P1^5; //指示灯
-
- 12864接法:
- #define Lcd_Bus P0 //数据口
- sbit LCM_RS = P2^0; //寄存器选择输入
- sbit LCM_RW = P2^1; //液晶读/写控制
- sbit LCM_EN = P2^2; //液晶使能控制
- sbit LCM_PSB = P2^3; //串/并方式
-
- 红外遥控接法:
- sbit IRIN = P3^2; //红外接收器数据线
- 遥控器功能键说明:prev为退格键,next为切换键,play为确认键,0-9为相应数字键 100+为小数点键
-
- 注意:务必确保RC522供电为3.3V,接5V必烧!!!
- 功能: 1.多级菜单操作,菜单有反白高度显示。
- 2.全遥控操作,通过遥控键盘控制读、写卡,并可输入读、写数值。
- 3.有读卡信息(卡类型、类号、余额),初始化卡,充值和扣款功能。
- 4.自动设定数据范围,超范围自动提示。
-
- 出品:聚龙居士
- */
- /****************************************/
- #include "reg52.h"
- #include "main.h"
- #include "mfrc522.h"
- #include "string.h"
- #include "12864.h"
- #include "hw.h"
- #include "set.h"
- #include "delay.h"
- //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
- //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
- unsigned char code data1[16] = {0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};
- uchar g_ucTempbuf[20];
- sfr AUXR = 0x8E;
- /////////////////////////////////////////////////////////////////////
- //系统初始化
- /////////////////////////////////////////////////////////////////////
- void InitializeSystem()
- {
- LED_GREEN = 1;
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- M500PcdConfigISOType( 'A' );
- LED_GREEN = 0;
- delay_10ms();
- LED_GREEN = 1;
- delay_10ms();
- LED_GREEN = 0;
- }
- void main( )
- {
- IE = 0x81; //允许总中断中断,使能 INT0 外部中断 相当于EA=1; EX0=1;
- TCON = 0x01; //触发方式为脉冲负边沿触发 相当于IT0=1;
- IRIN=1; //红外接收器数据初始化
- lcm_init();
- InitializeSystem( );
- write12864GDRAM(bmp12864);//显示开机画面
- Delay100ms(20);//延时
- Clean_12864_GDRAM();
- lcm_init();
- display_welcome();
- Delay100ms(20);
- mainmenu(0);
- w=1;
- menu2=0;
- while(1)
- {
- /*-----------------------------红外遥控切换功能---------------------------*/
- if (key_manue==1)
- {
- DelayM(8);
- /*-----------------当是主菜单调时状态 本键用于调整下一项---------------------------*/
- if(key_manue==1&&w==1&& menu2==0) //w为主菜单状态位,menu2为子菜单状态参数
- {
- key_manue=0;
- e++;
- if (e >= 3 ) {e = 0;}
- mainmenu(e); //主菜单调整
- }
- /*------------------------当是子菜单时调整信息显示子菜单-----------------------*/
- if(key_manue==1&&w == 0 &&menu2==1&&e==0)
- {
- key_manue=0;
- d++;
- if(d>=3){d=0;}
- set_info(d);
- }
- /*---------------------当是子菜单时调整充值子菜单------------------------------*/
- if(key_manue==1&&w == 0&&menu2==1&&e==1)
- {
- key_manue=0;
- t++;
- if(t>=2){t=0;}
- set_inch(t);
- }
- /*---------------------当是子菜单时调整消费子菜单-------------------------------*/
- if(key_manue==1&&w == 0&&menu2==1&&e==2)
- {
- key_manue=0;
- a++;
- if(a>=2){a=0;}
- set_cons(a);
- }
- key_manue=0;
- }
- /*-----------------------------红外遥控切换功能---------------------------*/
- /*--------------红外遥控确认功能----------------------------------------*/
- if (key_ok==1)
- {
- DelayM(8);
- /*---------------------主菜单时选项选择确认功能-----------------------------------*/
- if(key_ok==1&&w==1&&menu2==0)
- {
- key_ok=0;
- menu2=1;
- w=0;
- switch(e) //进入相应子菜单
- {
- case 0:
- d=0;
- set_info(d);
- break;
- case 1: t=0;
- set_inch(t);
- break;
- case 2: a=0;
- set_cons(a);
- break;
- }
- }
- /*---------------------子菜单时选项选择确认功能-----------------------------------*/
- if(key_ok==1&&w==0&&menu2==1)
- {
- key_ok=0;
- switch(e) //各子菜单确认键功能定义
- {
-
- case 0:
- if(d==0)
- { info();}
- if(d==1)
- { initcard();}
- if(d==2)
- { menu2=0; w=1; mainmenu(0);}
- break;
- case 1:
- if(t==0)
- {incharg();}
- if(t==1)
- {menu2=0;w=1;mainmenu(1);}
- break;
- case 2:
- if(a==0)
- {consume();}
- if(a==1)
- {menu2=0;w=1;mainmenu(2);}
- break;
- }
- }
- key_ok=0;
- }
- /*--------------红外遥控确认功能----------------------------------------*/
- /*---------------------遥控键盘输入功能-----------------------------------*/
- if(key0==1||key1==1||key2==1||key3==1||key4==1||key5==1||key6==1||key7==1||key8==1||key9==1||key_back==1||key_dot==1)
- {
- DelayM(8);
- if(key0==1||key1==1||key2==1||key3==1||key4==1||key5==1||key6==1||key7==1||key8==1||key9==1||key_back==1||key_dot==1)
- {
- if(w==0&&menu2==1)
- {
- set_inch_input();
- key0=0;
- key1=0;
- key2=0;
- key3=0;
- key4=0;
- key5=0;
- key6=0;
- key7=0;
- key8=0;
- key9=0;
- key_back=0;
- key_dot=0;
- }
- }
- }
- /*---------------------遥控键盘输入功能-----------------------------------*/
- }
- }
文件:
请到原文下载附件
本主题由 bing680610 于 2019-1-15 16:15 移动
文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-207462-1-1.html