找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28987|回复: 50
打印 上一主题 下一主题
收起左侧

红外遥控RC522芯片RFID公交卡、饭卡刷卡系统应用(附源码)

  [复制链接]
跳转到指定楼层
楼主


全部源码下载:
RC-522 S50 038 12864刷卡程序.zip (225.13 KB, 下载次数: 914)

一、功能简介:
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供电可能电流不足!
下面是主程序预览:
  1. /************** 全遥控操作RFID刷卡系统************/
  2. /*
  3.    硬件:1.MCU:STC12C5A60S2 ,11.0592MHz
  4.           2.12864带中文字库液晶
  5.           3.RFID读卡模块:RC522,+ S50卡
  6.                   4.红外遥控038接收头,CARMP3遥控器,不同遥控器键值不同,若用不同品牌遥控器需修改键值   
  7.                   5.LED指示灯(或为蜂鸣器)
  8.                         RC522接法:
  9.                         sbit     MF522_RST  =    P1^4;                  
  10.                         sbit     MF522_NSS  =    P1^2;
  11.                         sbit     MF522_SCK  =    P1^1;
  12.                         sbit     MF522_SI   =    P1^0;
  13.                         sbit     MF522_SO   =    P1^3;
  14.                         
  15.                         LED指示灯接法:
  16.                         sbit     LED_GREEN  =    P1^5;                   //指示灯
  17.                         
  18.                         12864接法:
  19.                         #define Lcd_Bus P0             //数据口
  20.                         sbit LCM_RS  =  P2^0;            //寄存器选择输入
  21.                         sbit LCM_RW  =  P2^1;            //液晶读/写控制
  22.                         sbit LCM_EN  =  P2^2;            //液晶使能控制
  23.                         sbit LCM_PSB =  P2^3;            //串/并方式
  24.                         
  25.                         红外遥控接法:
  26.                         sbit IRIN = P3^2; //红外接收器数据线
  27.                         遥控器功能键说明:prev为退格键,next为切换键,play为确认键,0-9为相应数字键        100+为小数点键
  28.                         
  29.                         注意:务必确保RC522供电为3.3V,接5V必烧!!!

  30.         功能: 1.多级菜单操作,菜单有反白高度显示。
  31.                2.全遥控操作,通过遥控键盘控制读、写卡,并可输入读、写数值。
  32.                    3.有读卡信息(卡类型、类号、余额),初始化卡,充值和扣款功能。
  33.                    4.自动设定数据范围,超范围自动提示。        
  34.                   
  35.         出品:聚龙居士
  36. */
  37. /****************************************/
  38. #include "reg52.h"
  39. #include "main.h"
  40. #include "mfrc522.h"        
  41. #include "string.h"
  42. #include "12864.h"
  43. #include "hw.h"
  44. #include "set.h"
  45. #include "delay.h"
  46. //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
  47. //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
  48. unsigned char code data1[16] = {0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};
  49. uchar g_ucTempbuf[20];   
  50. sfr AUXR  = 0x8E;
  51. /////////////////////////////////////////////////////////////////////
  52. //系统初始化
  53. /////////////////////////////////////////////////////////////////////
  54. void InitializeSystem()
  55. {
  56.         LED_GREEN = 1;
  57.         PcdReset();
  58.         PcdAntennaOff();
  59.         PcdAntennaOn();  
  60.         M500PcdConfigISOType( 'A' );
  61.         LED_GREEN = 0;
  62.         delay_10ms();        
  63.         LED_GREEN = 1;
  64.         delay_10ms();
  65.         LED_GREEN = 0;
  66. }

  67. void main( )
  68. {   
  69.         IE = 0x81;    //允许总中断中断,使能 INT0 外部中断 相当于EA=1; EX0=1;
  70.     TCON = 0x01;  //触发方式为脉冲负边沿触发   相当于IT0=1;
  71.     IRIN=1;       //红外接收器数据初始化
  72.         lcm_init();
  73.     InitializeSystem( );
  74.         write12864GDRAM(bmp12864);//显示开机画面
  75.         Delay100ms(20);//延时
  76.         Clean_12864_GDRAM();
  77.         lcm_init();
  78.         display_welcome();
  79.         Delay100ms(20);
  80.         mainmenu(0);
  81.         w=1;
  82.         menu2=0;        
  83.         while(1)
  84.     {        
  85. /*-----------------------------红外遥控切换功能---------------------------*/
  86.                 if (key_manue==1)         
  87.                 {                  
  88.                         DelayM(8);
  89. /*-----------------当是主菜单调时状态 本键用于调整下一项---------------------------*/               
  90.                         if(key_manue==1&&w==1&& menu2==0)   //w为主菜单状态位,menu2为子菜单状态参数
  91.                         {
  92.                                   key_manue=0;
  93.                                 e++;
  94.                                 if (e >= 3 ) {e = 0;}                                             
  95.                                 mainmenu(e);                     //主菜单调整                                
  96.                         }
  97. /*------------------------当是子菜单时调整信息显示子菜单-----------------------*/
  98.                         if(key_manue==1&&w == 0 &&menu2==1&&e==0)
  99.                         {
  100.                                 key_manue=0;
  101.                                 d++;
  102.                                 if(d>=3){d=0;}
  103.                                 set_info(d);                                       
  104.                         }
  105. /*---------------------当是子菜单时调整充值子菜单------------------------------*/
  106.                         if(key_manue==1&&w == 0&&menu2==1&&e==1)
  107.                         {
  108.                                 key_manue=0;
  109.                                 t++;
  110.                                 if(t>=2){t=0;}
  111.                                 set_inch(t);
  112.                         }
  113. /*---------------------当是子菜单时调整消费子菜单-------------------------------*/
  114.                         if(key_manue==1&&w == 0&&menu2==1&&e==2)
  115.                         {
  116.                                 key_manue=0;
  117.                                 a++;
  118.                                 if(a>=2){a=0;}
  119.                                 set_cons(a);
  120.                         }
  121.                         key_manue=0;
  122.                 }
  123. /*-----------------------------红外遥控切换功能---------------------------*/


  124. /*--------------红外遥控确认功能----------------------------------------*/               
  125.                 if (key_ok==1)                    
  126.                 {
  127.                         DelayM(8);
  128. /*---------------------主菜单时选项选择确认功能-----------------------------------*/
  129.                         if(key_ok==1&&w==1&&menu2==0)
  130.                         {                        
  131.                                 key_ok=0;
  132.                                 menu2=1;
  133.                                 w=0;
  134.                                 switch(e) //进入相应子菜单
  135.                                 {
  136.                                         case 0:        
  137.                                                         d=0;
  138.                                                         set_info(d);
  139.                                                         break;
  140.                                         case 1:        t=0;
  141.                                                         set_inch(t);
  142.                                                         break;
  143.                                         case 2:        a=0;
  144.                                                         set_cons(a);
  145.                                                         break;
  146.                                 }
  147.                         }
  148. /*---------------------子菜单时选项选择确认功能-----------------------------------*/
  149.                         if(key_ok==1&&w==0&&menu2==1)
  150.                         {                        
  151.                                 key_ok=0;
  152.                                 switch(e) //各子菜单确认键功能定义
  153.                                 {
  154.                                        
  155.                                         case 0:        
  156.                                                     if(d==0)
  157.                                                           { info();}
  158.                                                   if(d==1)
  159.                                                           { initcard();}
  160.                                                   if(d==2)
  161.                                                           { menu2=0; w=1;        mainmenu(0);}
  162.                                                         break;
  163.                                         case 1:
  164.                                                   if(t==0)
  165.                                                         {incharg();}         
  166.                                                   if(t==1)
  167.                                                           {menu2=0;w=1;mainmenu(1);}
  168.                                                   break;
  169.                                         case 2:
  170.                                                   if(a==0)
  171.                                                     {consume();}                                                           
  172.                                                   if(a==1)
  173.                                                           {menu2=0;w=1;mainmenu(2);}
  174.                                                   break;
  175.                                 }                        
  176.                         }
  177.                         key_ok=0;
  178.                 }

  179. /*--------------红外遥控确认功能----------------------------------------*/

  180. /*---------------------遥控键盘输入功能-----------------------------------*/
  181.                 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)
  182.                 {
  183.                    DelayM(8);
  184.                    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)
  185.                    {
  186.                                 if(w==0&&menu2==1)
  187.                                 {
  188.                                         set_inch_input();
  189.                                         key0=0;
  190.                                         key1=0;
  191.                                         key2=0;
  192.                                         key3=0;
  193.                                         key4=0;
  194.                                         key5=0;
  195.                                         key6=0;
  196.                                         key7=0;
  197.                                         key8=0;
  198.                                         key9=0;
  199.                                         key_back=0;
  200.                                         key_dot=0;                                       
  201.                                 }
  202.                         }
  203.                 }
  204. /*---------------------遥控键盘输入功能-----------------------------------*/
  205.         }
  206. }

复制代码

评分

参与人数 5黑币 +21 收起 理由
北风摇曳 + 5 很给力!
lasermiao + 5 很给力!
vvv64 + 5 共享资料的黑币奖励!
fefen0 + 1 很给力!
zhaok2013 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏50 分享淘帖 顶5 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2016-11-7 20:41 | 只看该作者
实际应用的话还需要结合php、易语言、app开发一套管理系统、再做个php服务器以保存消费记录和开卡人身份信息和卡密码余额等信息,以实现网上充值以及挂失补办和余额冻结等功能,卡里保存各种防复制盗刷的高级加密的数据。
回复

使用道具 举报

板凳
ID:148841 发表于 2016-11-29 14:33 | 只看该作者
运行之后12864上什么都不显示是为什么呐
回复

使用道具 举报

地板
ID:162343 发表于 2017-1-19 19:38 | 只看该作者
好像12864要接DB0~7的接口
回复

使用道具 举报

5#
ID:162343 发表于 2017-1-19 20:45 | 只看该作者
然后电流一定要足
回复

使用道具 举报

6#
ID:110816 发表于 2017-3-11 12:07 | 只看该作者
太给力了,好厉害啊
回复

使用道具 举报

7#
ID:130231 发表于 2017-3-16 22:03 | 只看该作者
感谢分享,太厉害了,我来学习一下。
回复

使用道具 举报

8#
ID:148760 发表于 2017-3-23 12:20 | 只看该作者
wawa,不错。
回复

使用道具 举报

9#
ID:124631 发表于 2017-3-24 17:14 | 只看该作者
可以啊
回复

使用道具 举报

10#
ID:194871 发表于 2017-4-29 22:54 | 只看该作者
厉害了
回复

使用道具 举报

11#
ID:197589 发表于 2017-5-7 09:00 | 只看该作者
谢谢分享
回复

使用道具 举报

12#
ID:105781 发表于 2017-5-13 11:07 | 只看该作者
是跟51单片机结合的是吧?
回复

使用道具 举报

13#
ID:105781 发表于 2017-5-13 11:20 | 只看该作者
楼主有原理图吗?谢谢
回复

使用道具 举报

14#
ID:112693 发表于 2017-5-24 22:40 | 只看该作者
楼主,请问 如何使用按键操作,附件中只定义了 K1..K4 4个按键,没有这四个按键的语句!
回复

使用道具 举报

15#
ID:223098 发表于 2017-7-28 21:45 | 只看该作者
好东东!!!
回复

使用道具 举报

16#
ID:223098 发表于 2017-7-28 21:46 | 只看该作者
好东东学习学习
回复

使用道具 举报

17#
ID:227828 发表于 2017-8-15 23:59 | 只看该作者
路过学习学习
回复

使用道具 举报

18#
ID:228916 发表于 2017-8-26 17:24 | 只看该作者
改完IO口后,屏幕能显示,但是按遥控器不能切换页面,遥控器一样的,请教怎么回事。另外:sbit K1  = P3^7; //K1-设置
sbit K2  = P3^6; //K2-确认、返回
sbit K3  = P3^5; //K3-加
sbit K4  = P3^4; //K4-减  这个是定义什么的?
回复

使用道具 举报

19#
ID:197013 发表于 2017-9-20 11:07 | 只看该作者
好东西,谢谢分享,拿来看看
回复

使用道具 举报

20#
ID:197013 发表于 2017-9-20 11:55 | 只看该作者
这样的屏怎么接???
回复

使用道具 举报

21#
ID:235409 发表于 2017-9-26 10:54 | 只看该作者
很好!  CPU卡可以吗
回复

使用道具 举报

22#
ID:236174 发表于 2017-9-27 20:40 | 只看该作者
学习学习
回复

使用道具 举报

23#
ID:256192 发表于 2017-12-1 19:20 | 只看该作者
大神!
回复

使用道具 举报

24#
ID:256192 发表于 2017-12-1 19:22 | 只看该作者
服了。
回复

使用道具 举报

25#
ID:286128 发表于 2018-2-28 10:13 | 只看该作者
朋友有一个事看不懂,这个模块上没有什么绿色的指示灯,而你的程序却有,看不懂啊。
回复

使用道具 举报

26#
ID:286128 发表于 2018-3-1 19:36 | 只看该作者
之前问您的问题我懂了
回复

使用道具 举报

27#
ID:302379 发表于 2018-4-5 17:10 | 只看该作者
HELLO,居士!

   老师,我对您这个比较感兴趣并且制作了PCB板,准备“盗用“”下做个课程设计,在这里跟您说一声,如果您觉得不行,我立马停做。在做的过程中我遇到了几个问题,如果您能看的见的话,望看一下:
   Question 1 :  在使用充值功能时候,遥控输入充值金额后,刷卡,卡接近RC522后,就出现闪屏,然后熄灭,直至再次给RC522供电才能重新开机工作,不能往卡里输入信息;
   Question 2 :在使用消费功能时候,遥控输入消费金额后,刷卡,卡接近RC522后,出现余额不足,这是否与Question 1为写入数据有关;
   Quesiton 3  :  我看您在第一步读取卡信息时候,里面已经有余额,这个是不是您事先在程序中写好的呢?这个数据一旦写入是不是就能解决上述两个问题了呢?这个数据怎么在程序中实现的呢?
回复

使用道具 举报

28#
ID:164604 发表于 2018-4-7 18:50 | 只看该作者
感谢分享,好东西!
回复

使用道具 举报

29#
ID:276118 发表于 2018-4-8 12:37 | 只看该作者
大神力作
回复

使用道具 举报

30#
ID:280484 发表于 2018-4-29 08:07 | 只看该作者
多谢了  看看好用吧
回复

使用道具 举报

31#
ID:323241 发表于 2018-5-17 18:03 | 只看该作者
可以,学习了
回复

使用道具 举报

32#
ID:407498 发表于 2018-10-25 17:30 | 只看该作者
谢谢分享啊
回复

使用道具 举报

33#
ID:87088 发表于 2018-10-30 19:09 | 只看该作者
已经下载了,过来试试看。
回复

使用道具 举报

34#
ID:125719 发表于 2018-11-6 08:32 | 只看该作者
好东西,感谢分享
回复

使用道具 举报

35#
ID:297409 发表于 2018-12-17 13:29 | 只看该作者
屏幕一直不显示是怎么回事呢
回复

使用道具 举报

36#
ID:30192 发表于 2019-3-5 16:12 | 只看该作者
已经下载了,过来试试看。
回复

使用道具 举报

37#
ID:255925 发表于 2019-3-24 22:32 | 只看该作者
求大神将红外遥控改成矩阵键盘控制的程序分享下,感谢
回复

使用道具 举报

38#
ID:226505 发表于 2019-4-23 20:55 来自手机 | 只看该作者
试了试   程序没问题  只要硬件电路没问题  就能实现相应功能   谢楼主
回复

使用道具 举报

39#
ID:527687 发表于 2019-5-5 15:58 | 只看该作者
楼主能帮我写一个刷一次卡,扣两块钱的程序吗?类似公交车刷卡系统
回复

使用道具 举报

40#
ID:226505 发表于 2019-5-6 00:04 来自手机 | 只看该作者
北风摇曳 发表于 2019-4-23 20:55
试了试   程序没问题  只要硬件电路没问题  就能实现相应功能   谢楼主

就是上电  led一直亮  改一下初始化就好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表