一、功能简介: 
1.有读卡信息(卡类型、类号、余额),初始化卡,充值和扣款功能。
2.多级菜单操作,菜单有反白高度显示。
3.全遥控操作,通过遥控键盘控制读、写卡,并可输入读、写数值。
4.自动设定数据范围,超范围自动提示。
5.可应用于公交卡刷卡和饭卡刷卡等类似应用。

1.系统组成

2. 欢迎界面

3.主菜单

4.卡信息二级子菜单

5.读卡信息

6. 输入充值额                                  
7.充值刷卡

8. 输入消费额

9.消费刷卡
 
 
10. 余额超范围提示
二、系统组成:
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; 
 }
 }
 }
/*---------------------遥控键盘输入功能-----------------------------------*/
 }
}
完整代码下载:http://www.eeskill.com/file/id/41657