找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 35689|回復(fù): 51
收起左側(cè)

紅外遙控RC522芯片RFID公交卡、飯卡刷卡系統(tǒng)應(yīng)用(附源碼)

  [復(fù)制鏈接]
ID:140725 發(fā)表于 2016-10-20 22:17 | 顯示全部樓層 |閱讀模式
0.png

全部源碼下載:
RC-522 S50 038 12864刷卡程序.zip (225.13 KB, 下載次數(shù): 932)

一、功能簡介:
1.
有讀卡信息(卡類型、類號、余額),初始化卡,充值和扣款功能。
2.多級菜單操作,菜單有反白高度顯示。
3.全遙控操作,通過遙控鍵盤控制讀、寫卡,并可輸入讀、寫數(shù)值。
4.自動設(shè)定數(shù)據(jù)范圍,超范圍自動提示。
5.可應(yīng)用于公交卡刷卡和飯卡刷卡等類似應(yīng)用。
124026wsexsfs3qsp3eess.jpg.thumb.jpg     124142taw4f8nz4kgeqkgu.jpg.thumb.jpg
1.系統(tǒng)組成                                      2. 歡迎界面
124145lygxwdwwjj0dmggs.jpg.thumb.jpg     124159hj4rrf1yro4mb4ff.jpg.thumb.jpg
3.主菜單                                         4.卡信息二級子菜單
124200md428113cm61l1ds.jpg.thumb.jpg     124200rzohj9clifoulpjh.jpg.thumb.jpg
5.讀卡信息                                      6. 輸入充值額
124201pcma2zsher9smram.jpg.thumb.jpg     124201osbdmds3mvjdw4d4.jpg.thumb.jpg
7.充值刷卡                                      8. 輸入消費額
124202suvsn918mlrmdxx1.jpg.thumb.jpg     124203idx4b05ut5rfmvd7.jpg.thumb.jpg
9.消費刷卡                                      10. 余額超范圍提示
二、系統(tǒng)組成:
                    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             //數(shù)據(jù)口
                        sbit LCM_RS  =  P2^0;            //寄存器選擇輸入
                        sbit LCM_RW  =  P2^1;            //液晶讀/寫控制
                        sbit LCM_EN  =  P2^2;            //液晶使能控制
                        sbit LCM_PSB =  P2^3;            //串/并方式
                        
                        紅外遙控接法:
                        sbit IRIN = P3^2; //紅外接收器數(shù)據(jù)線
                        遙控器功能鍵說明:prev為退格鍵,next為切換鍵,play為確認(rèn)鍵,0-9為相應(yīng)數(shù)字鍵        100+為小數(shù)點鍵

   
          注意:務(wù)必確保RC522供電為3.3V,接5V必?zé)。!同時,為了系統(tǒng)運行穩(wěn)定,整個系統(tǒng)最好單獨供電,用usb供電可能電流不足!
下面是主程序預(yù)覽:
  1. /************** 全遙控操作RFID刷卡系統(tǒng)************/
  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             //數(shù)據(jù)口
  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; //紅外接收器數(shù)據(jù)線
  27.                         遙控器功能鍵說明:prev為退格鍵,next為切換鍵,play為確認(rèn)鍵,0-9為相應(yīng)數(shù)字鍵        100+為小數(shù)點鍵
  28.                         
  29.                         注意:務(wù)必確保RC522供電為3.3V,接5V必?zé)。。?br />

  30.         功能: 1.多級菜單操作,菜單有反白高度顯示。
  31.                2.全遙控操作,通過遙控鍵盤控制讀、寫卡,并可輸入讀、寫數(shù)值。
  32.                    3.有讀卡信息(卡類型、類號、余額),初始化卡,充值和扣款功能。
  33.                    4.自動設(shè)定數(shù)據(jù)范圍,超范圍自動提示。        
  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字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  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. //系統(tǒng)初始化
  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 外部中斷 相當(dāng)于EA=1; EX0=1;
  70.     TCON = 0x01;  //觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)   相當(dāng)于IT0=1;
  71.     IRIN=1;       //紅外接收器數(shù)據(jù)初始化
  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. /*-----------------當(dāng)是主菜單調(diào)時狀態(tài) 本鍵用于調(diào)整下一項---------------------------*/               
  90.                         if(key_manue==1&&w==1&& menu2==0)   //w為主菜單狀態(tài)位,menu2為子菜單狀態(tài)參數(shù)
  91.                         {
  92.                                   key_manue=0;
  93.                                 e++;
  94.                                 if (e >= 3 ) {e = 0;}                                             
  95.                                 mainmenu(e);                     //主菜單調(diào)整                                
  96.                         }
  97. /*------------------------當(dāng)是子菜單時調(diào)整信息顯示子菜單-----------------------*/
  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. /*---------------------當(dāng)是子菜單時調(diào)整充值子菜單------------------------------*/
  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. /*---------------------當(dāng)是子菜單時調(diào)整消費子菜單-------------------------------*/
  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. /*--------------紅外遙控確認(rèn)功能----------------------------------------*/               
  125.                 if (key_ok==1)                    
  126.                 {
  127.                         DelayM(8);
  128. /*---------------------主菜單時選項選擇確認(rèn)功能-----------------------------------*/
  129.                         if(key_ok==1&&w==1&&menu2==0)
  130.                         {                        
  131.                                 key_ok=0;
  132.                                 menu2=1;
  133.                                 w=0;
  134.                                 switch(e) //進(jìn)入相應(yīng)子菜單
  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. /*---------------------子菜單時選項選擇確認(rèn)功能-----------------------------------*/
  149.                         if(key_ok==1&&w==0&&menu2==1)
  150.                         {                        
  151.                                 key_ok=0;
  152.                                 switch(e) //各子菜單確認(rèn)鍵功能定義
  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. /*--------------紅外遙控確認(rèn)功能----------------------------------------*/

  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. }

復(fù)制代碼

評分

參與人數(shù) 5黑幣 +21 收起 理由
北風(fēng)搖曳 + 5 很給力!
lasermiao + 5 很給力!
vvv64 + 5 共享資料的黑幣獎勵!
fefen0 + 1 很給力!
zhaok2013 + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2016-11-7 20:41 | 顯示全部樓層
實際應(yīng)用的話還需要結(jié)合php、易語言、app開發(fā)一套管理系統(tǒng)、再做個php服務(wù)器以保存消費記錄和開卡人身份信息和卡密碼余額等信息,以實現(xiàn)網(wǎng)上充值以及掛失補辦和余額凍結(jié)等功能,卡里保存各種防復(fù)制盜刷的高級加密的數(shù)據(jù)。
回復(fù)

使用道具 舉報

ID:148841 發(fā)表于 2016-11-29 14:33 | 顯示全部樓層
運行之后12864上什么都不顯示是為什么吶
回復(fù)

使用道具 舉報

ID:162343 發(fā)表于 2017-1-19 19:38 | 顯示全部樓層
好像12864要接DB0~7的接口
回復(fù)

使用道具 舉報

ID:162343 發(fā)表于 2017-1-19 20:45 | 顯示全部樓層
然后電流一定要足
回復(fù)

使用道具 舉報

ID:110816 發(fā)表于 2017-3-11 12:07 | 顯示全部樓層
太給力了,好厲害啊
回復(fù)

使用道具 舉報

ID:130231 發(fā)表于 2017-3-16 22:03 | 顯示全部樓層
感謝分享,太厲害了,我來學(xué)習(xí)一下。
回復(fù)

使用道具 舉報

ID:148760 發(fā)表于 2017-3-23 12:20 | 顯示全部樓層
wawa,不錯。
回復(fù)

使用道具 舉報

ID:124631 發(fā)表于 2017-3-24 17:14 | 顯示全部樓層
可以啊
回復(fù)

使用道具 舉報

ID:194871 發(fā)表于 2017-4-29 22:54 | 顯示全部樓層
厲害了
回復(fù)

使用道具 舉報

ID:197589 發(fā)表于 2017-5-7 09:00 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:105781 發(fā)表于 2017-5-13 11:07 | 顯示全部樓層
是跟51單片機結(jié)合的是吧?
回復(fù)

使用道具 舉報

ID:105781 發(fā)表于 2017-5-13 11:20 | 顯示全部樓層
樓主有原理圖嗎?謝謝
回復(fù)

使用道具 舉報

ID:112693 發(fā)表于 2017-5-24 22:40 | 顯示全部樓層
樓主,請問 如何使用按鍵操作,附件中只定義了 K1..K4 4個按鍵,沒有這四個按鍵的語句!
回復(fù)

使用道具 舉報

ID:223098 發(fā)表于 2017-7-28 21:45 | 顯示全部樓層
好東東。。
回復(fù)

使用道具 舉報

ID:223098 發(fā)表于 2017-7-28 21:46 | 顯示全部樓層
好東東學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:227828 發(fā)表于 2017-8-15 23:59 | 顯示全部樓層
路過學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:228916 發(fā)表于 2017-8-26 17:24 | 顯示全部樓層
改完IO口后,屏幕能顯示,但是按遙控器不能切換頁面,遙控器一樣的,請教怎么回事。另外:sbit K1  = P3^7; //K1-設(shè)置
sbit K2  = P3^6; //K2-確認(rèn)、返回
sbit K3  = P3^5; //K3-加
sbit K4  = P3^4; //K4-減  這個是定義什么的?
回復(fù)

使用道具 舉報

ID:197013 發(fā)表于 2017-9-20 11:07 | 顯示全部樓層
好東西,謝謝分享,拿來看看
回復(fù)

使用道具 舉報

ID:197013 發(fā)表于 2017-9-20 11:55 | 顯示全部樓層
IMG_20170920_115252.jpg 這樣的屏怎么接???
回復(fù)

使用道具 舉報

ID:235409 發(fā)表于 2017-9-26 10:54 | 顯示全部樓層
很好!  CPU卡可以嗎
回復(fù)

使用道具 舉報

ID:236174 發(fā)表于 2017-9-27 20:40 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:256192 發(fā)表于 2017-12-1 19:20 | 顯示全部樓層
大神!
回復(fù)

使用道具 舉報

ID:256192 發(fā)表于 2017-12-1 19:22 | 顯示全部樓層
服了。
回復(fù)

使用道具 舉報

ID:286128 發(fā)表于 2018-2-28 10:13 | 顯示全部樓層
朋友有一個事看不懂,這個模塊上沒有什么綠色的指示燈,而你的程序卻有,看不懂啊。
回復(fù)

使用道具 舉報

ID:286128 發(fā)表于 2018-3-1 19:36 | 顯示全部樓層
之前問您的問題我懂了
回復(fù)

使用道具 舉報

ID:302379 發(fā)表于 2018-4-5 17:10 | 顯示全部樓層
HELLO,居士!

   老師,我對您這個比較感興趣并且制作了PCB板,準(zhǔn)備“盜用“”下做個課程設(shè)計,在這里跟您說一聲,如果您覺得不行,我立馬停做。在做的過程中我遇到了幾個問題,如果您能看的見的話,望看一下:
   Question 1 :  在使用充值功能時候,遙控輸入充值金額后,刷卡,卡接近RC522后,就出現(xiàn)閃屏,然后熄滅,直至再次給RC522供電才能重新開機工作,不能往卡里輸入信息;
   Question 2 :在使用消費功能時候,遙控輸入消費金額后,刷卡,卡接近RC522后,出現(xiàn)余額不足,這是否與Question 1為寫入數(shù)據(jù)有關(guān);
   Quesiton 3  :  我看您在第一步讀取卡信息時候,里面已經(jīng)有余額,這個是不是您事先在程序中寫好的呢?這個數(shù)據(jù)一旦寫入是不是就能解決上述兩個問題了呢?這個數(shù)據(jù)怎么在程序中實現(xiàn)的呢?
回復(fù)

使用道具 舉報

ID:164604 發(fā)表于 2018-4-7 18:50 | 顯示全部樓層
感謝分享,好東西!
回復(fù)

使用道具 舉報

ID:276118 發(fā)表于 2018-4-8 12:37 | 顯示全部樓層
大神力作
回復(fù)

使用道具 舉報

ID:280484 發(fā)表于 2018-4-29 08:07 | 顯示全部樓層
多謝了  看看好用吧
回復(fù)

使用道具 舉報

ID:323241 發(fā)表于 2018-5-17 18:03 | 顯示全部樓層
可以,學(xué)習(xí)了
回復(fù)

使用道具 舉報

ID:407498 發(fā)表于 2018-10-25 17:30 | 顯示全部樓層
謝謝分享啊
回復(fù)

使用道具 舉報

ID:87088 發(fā)表于 2018-10-30 19:09 | 顯示全部樓層
已經(jīng)下載了,過來試試看。
回復(fù)

使用道具 舉報

ID:125719 發(fā)表于 2018-11-6 08:32 | 顯示全部樓層
好東西,感謝分享
回復(fù)

使用道具 舉報

ID:297409 發(fā)表于 2018-12-17 13:29 | 顯示全部樓層
屏幕一直不顯示是怎么回事呢
回復(fù)

使用道具 舉報

ID:30192 發(fā)表于 2019-3-5 16:12 | 顯示全部樓層
已經(jīng)下載了,過來試試看。
回復(fù)

使用道具 舉報

ID:255925 發(fā)表于 2019-3-24 22:32 | 顯示全部樓層
求大神將紅外遙控改成矩陣鍵盤控制的程序分享下,感謝
回復(fù)

使用道具 舉報

ID:226505 發(fā)表于 2019-4-23 20:55 來自觸屏版 | 顯示全部樓層
試了試   程序沒問題  只要硬件電路沒問題  就能實現(xiàn)相應(yīng)功能   謝樓主
回復(fù)

使用道具 舉報

ID:527687 發(fā)表于 2019-5-5 15:58 | 顯示全部樓層
樓主能幫我寫一個刷一次卡,扣兩塊錢的程序嗎?類似公交車刷卡系統(tǒng)
回復(fù)

使用道具 舉報

ID:226505 發(fā)表于 2019-5-6 00:04 來自觸屏版 | 顯示全部樓層
北風(fēng)搖曳 發(fā)表于 2019-4-23 20:55
試了試   程序沒問題  只要硬件電路沒問題  就能實現(xiàn)相應(yīng)功能   謝樓主

就是上電  led一直亮  改一下初始化就好
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表