久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4750|回復: 0
收起左側

MFRC500讀卡芯片飯卡打卡系統(tǒng)單片機程序 帶4-3鍵盤輸入和LCD12864點陣液晶輸出

[復制鏈接]
ID:130231 發(fā)表于 2017-5-12 17:24 | 顯示全部樓層 |閱讀模式
基于MFRC500讀卡芯片的完整讀卡程序,帶4-3鍵盤輸入驅動和128-64點陣液晶輸出
0.png

單片機源程序如下:
  1. /****************************************************************************                                                                          *
  2. * File:         MAIN.C                                                      *                                                                           *
  3. * Version:      飯卡打卡系統(tǒng)簡化版1.0                                       *                                                                           *
  4. * Created: 11.30                                                  *
  5. * Last Change: 5.15                                                   *                                                                          *
  6. * Author:       HeXing    $ 東邪西毒                                          *
  7. * QQ:           271885846 $ 343543175                                      *
  8. * EMail:        271885846@qq.com   huangwenshan@126.com                     *
  9. * Compiler:     KEIL C51 uVision2 V2.23                                     *                                                                           *
  10. * Description:  操作流程:先讀卡,等待鍵盤輸入,再寫卡                         *                                                      *
  11. *               注意:鍵盤輸入后,卡不能抽走,不然數據流失!                    *
  12. *               注意:程序共有18個警告,因為有些函數暫時沒用到!               *
  13. *               注意:暫沒小數顯示,由于以后考慮用以太網通訊,故沒加進UATR通訊*
  14. *               留言:謝謝Hexing的幫助,如果大家對程序有什么意見可以隨時找我  *      
  15. ****************************************************************************/
  16. #include "main.h"
  17. #include "m500a.h"
  18. #include "PORT.h"
  19. #include "delay.h"
  20. #include "LCD_Key.h"

  21. /*--------------公有變量定義---------------------------------------------------------*/
  22. bit   KEY_SCAN_G;            //鍵盤掃描標志   
  23. bit   W_CARD_SCAN_G;         //寫卡掃描標志
  24. tWord Card_Money;            //最大值這里只取9999,顯示4位數金額
  25. tByte LCD_Money[5];          //卡中金額顯示緩沖區(qū)
  26. tByte LCD_Key[6]="    ";     //初始化按鍵顯示緩沖區(qū),保證數組最后字節(jié)存有結束符'\0'              
  27. tByte temp;                  //臨時變量
  28. tByte tt1[2];                //存放卡類型號            
  29. tByte Snr_RC500[4];          //存放rc500序列號
  30. tByte AbsoluteBlock = 8;     //對絕對塊8進行操作, 取值范圍為 0 <= AbsoluteBlock < 64
  31. tByte data cardserialno[4];  //存放卡號
  32. tByte idata blockdata[16];   //絕對塊8數據緩沖區(qū),注意其儲存模式 idata

  33. /*-------私有函數原型----------------------------------------------------------------*/
  34. void  MCU_Init(void);                                           //單片機初始化函數
  35. void  BEEP_Ctrl(void);                                          //蜂鳴器控制函數
  36. tByte MF_Active(tByte AbsoluteBlock,tByte data *cardserialno);  //卡激活函數
  37. tByte MF_Read  (tByte AbsoluteBlock,tByte idata *blockdata);    //讀卡函數
  38. tByte MF_Write (tByte AbsoluteBlock,tByte idata *blockdata);    //寫卡函數
  39. tByte data RC500_Disp[13];
  40. void hex_ten(unsigned char *RC500_St);

  41. /*=====================================================================================
  42. main函數開始                                                                     
  43. ======================================================================================*/
  44. void main (void)
  45. {
  46.   MCU_Init();               
  47.   M500PCD_Init();      
  48.   KEYPAD_Init();
  49.   LCD_Init();
  50.   LCD_China_Disp();
  51.   BEEP_Ctrl();              //聲音提示1,所有初始化完成,等待讀卡
  52.    
  53.                               
  54.   while(1)
  55.    {     
  56.      temp=MF_Active( AbsoluteBlock,cardserialno);       //激活一張卡
  57.      if(temp!=MI_OK)
  58.        {           
  59.                 continue;                                       //跳到 while 入口                          
  60.        }
  61.      temp=MF_Read(AbsoluteBlock,blockdata);             //讀卡數據   
  62.      if(temp!=MI_OK)
  63.        {
  64.         continue;   
  65.            }
  66.      BEEP_Ctrl();
  67.      hex_ten(cardserialno);                          //聲音提示2,讀卡成功,等待鍵盤掃描
  68.      put_char(4,30,RC500_Disp);
  69.                                                 
  70.      KEY_SCAN_G=1;                                      //允許鍵盤掃描                  
  71.      while(KEY_SCAN_G)                                 
  72.          {
  73.         Card_Money=blockdata[0]+blockdata[1]*256;       //合并絕對塊8前兩字節(jié)
  74.             LCD_Money[0]=Card_Money/1000+48;                //裝載千位數據     
  75.         LCD_Money[1]=Card_Money%1000/100+48;            //百位
  76.         LCD_Money[2]=Card_Money%1000%100/10+48;         //十位
  77.         LCD_Money[3]=Card_Money%1000%100%10+48;         //個位
  78.             LCD_Money[4]='\0';                              //結束符
  79.                 LCD_KEY_Update();                               //鍵盤和LCD刷新
  80.         delay_nms(30);                                        //每隔30毫秒掃描一次鍵盤
  81.           }


  82.         
  83.      W_CARD_SCAN_G=1;                                        //允許寫卡掃描     
  84.      while(W_CARD_SCAN_G)
  85.      {
  86.         blockdata[0]=Card_Money%256;                     //分解回字節(jié)數據,準備寫回到絕對塊8
  87.         blockdata[1]=Card_Money/256;
  88.         temp=MF_Active( AbsoluteBlock,cardserialno);     //激活同一張卡
  89.         if(temp!=MI_OK)
  90.         {         
  91.                   continue;
  92.         }
  93.         temp=MF_Write(AbsoluteBlock,blockdata);          //寫數據入卡  
  94.             if(temp!=MI_OK)
  95.         {
  96.           continue;
  97.             }
  98.         W_CARD_SCAN_G=0;                //清循環(huán)標志,跳出while循環(huán)
  99.         BEEP_Ctrl();
  100.         put_char(4,30,"            ");//聲音提示3,表示寫卡完成,用戶可以取走卡
  101.         delay_nms(1000);
  102.                                //注意:聲音提示后的1秒延遲期間,必須拿走卡,否則體統(tǒng)重新讀卡
  103.            }

  104.    }

  105. }
  106. /*============================================================================
  107. main函數結束                                                                    
  108. =============================================================================*/
  109. //--------------------------------------------------------
  110. //激活卡函數
  111. //--------------------------------------------------------        
  112. tByte MF_Active(tByte AbsoluteBlock,tByte data *cardserialno)
  113. {  
  114.     tByte status1;
  115.     tByte *sak1;

  116.          status1 = M500PiccRequest(PICC_REQALL, tt1);//尋卡
  117.           if (status1!=MI_OK)
  118.         {
  119.            return(FM1715_REQERR);
  120.         }

  121.     status1=M500PiccAnticoll(0,cardserialno);//防碰撞
  122.     if (status1!=MI_OK)
  123.         {
  124.        return(FM1715_REQERR);           
  125.         }
  126.         
  127.            status1=M500PiccSelect(cardserialno,sak1);//選擇卡
  128.           if (status1!=MI_OK)
  129.         {
  130.        return(FM1715_REQERR);           
  131.         }   
  132.      //對第八塊(絕對地址)進行授權, 也就是第三個扇區(qū)第一塊
  133.     status1 = M500PiccAuth(PICC_AUTHENT1A, cardserialno, 1, AbsoluteBlock);//授權
  134.           if (status1!=MI_OK)
  135.         {        
  136.        return(FM1715_REQERR);        
  137.         }
  138.             
  139.         return MI_OK;
  140. }

  141. //--------------------------------------------------------
  142. //讀卡函數
  143. //--------------------------------------------------------
  144. tByte MF_Read(tByte AbsoluteBlock,tByte idata *blockdata)
  145. {  
  146.     tByte status1;
  147.     status1=M500PiccRead(AbsoluteBlock, blockdata);
  148.   
  149.         if (status1!=MI_OK)
  150.         {           
  151.             return(FM1715_REQERR);               
  152.         }
  153.         
  154.     return MI_OK;
  155. }

  156. //--------------------------------------------------------
  157. //寫卡函數
  158. //--------------------------------------------------------
  159. tByte MF_Write(tByte AbsoluteBlock,tByte idata *blockdata)
  160. {   
  161.     tByte status1;
  162.     status1 = M500PiccWrite(AbsoluteBlock,blockdata);

  163.           if (status1!=MI_OK)
  164.         {
  165.            return(FM1715_REQERR);         
  166.         }

  167.         return MI_OK;
  168. }

  169. //------------------------------------------------------------------------
  170. //MCU_Init函數
  171. //------------------------------------------------------------------------
  172. void MCU_Init(void)
  173. {
  174.     RC500RST    = FALSE;
  175.     RC500_CS    = TRUE;        // Enable the CS for RC500                        
  176.     IT0 = 1;                            // Config ext0 as edge trigger for RC500
  177.     EX0 = 1;                            // Enable ext0 interrupt for RC500
  178.     EA = TRUE;                        // Enable all interrupts
  179.         
  180. }
  181. //-----------------------------------------------------------------------
  182. //蜂鳴器驅動
  183. //---------------------------------------------------------------------
  184. ……………………

  185. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于MFRC500讀卡芯片的完整讀卡程序,帶4-3鍵盤輸入驅動和128-64點陣液晶輸出.rar (41.95 KB, 下載次數: 58)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区免费 | 2019天天干天天操 | 亚洲成人精品一区 | 成人午夜精品 | 久久国产精品精品国产色婷婷 | 国产在线对白 | 久久久91 | 亚洲视屏 | 久久久久av | 成人欧美一区二区三区在线播放 | 午夜视频一区二区三区 | 久久精品91 | 欧美精品在线免费观看 | 黄色精品 | www.亚洲精品| 天堂在线免费视频 | 欧美性大战xxxxx久久久 | 99热精品在线观看 | 亚洲一区二区三区视频免费观看 | 欧美aa在线 | 免费在线观看一区二区三区 | 日韩精品成人av | 日韩精品一区二 | 久久综合一区二区 | 亚洲精品乱码久久久久久按摩 | 天天干狠狠操 | 欧美日本韩国一区二区三区 | 日本精品视频一区二区 | 久久国产精品一区二区 | 成人在线观看免费视频 | 亚洲一区二区三区在线视频 | 日韩精品视频在线播放 | 国产精品揄拍一区二区 | 日韩欧美在线一区二区 | 亚洲精品乱码久久久久久按摩观 | 亚洲视频免费在线观看 | 久久精品网 | 在线免费观看毛片 | av乱码| 七七婷婷婷婷精品国产 | 婷婷二区 |