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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于MFRC500的讀卡程序-帶4-3鍵盤輸入和12864液晶

[復制鏈接]
ID:220743 發表于 2017-10-3 15:24 | 顯示全部樓層 |閱讀模式
基于MFRC500射頻芯片和51單片機的13.56MHzRFID射頻識別系統的讀寫程序。
0.png
單片機源程序如下:
  1. /****************************************************************************                                                                        
  2. * File:         MAIN.C                                                      *                                                                        
  3. * Version:      飯卡打卡系統簡化版1.0                                       *                                                                        
  4. * Created:      2007.11.30                                                  *
  5. * Last Change:  2008.5.15                                                   *                                                                        
  6. * Author:                                                                   *
  7. * QQ:                                                                       *
  8. * EMail:                                                                    *
  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];          //卡中金額顯示緩沖區
  26. tByte LCD_Key[6]="    ";     //初始化按鍵顯示緩沖區,保證數組最后字節存有結束符'\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數據緩沖區,注意其儲存模式 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. 函數名稱:主函數
  43. 函數輸入:
  44. 函數輸出:
  45. 函數功能:                                                                    
  46. ******************************************************************************************/
  47. void main (void)
  48. {
  49.   /*************************硬件初始化**********************************************/
  50.   MCU_Init();               
  51.   M500PCD_Init();      
  52.   KEYPAD_Init();
  53.   LCD_Init();
  54.   LCD_China_Disp();
  55.   BEEP_Ctrl();              //聲音提示1,所有初始化完成,等待讀卡
  56.   /*************************大循環執行**********************************************/                            
  57.   while(1)
  58.   {     
  59.      temp=MF_Active( AbsoluteBlock,cardserialno);       //激活一張卡
  60.      if(temp!=MI_OK)
  61.      {           
  62.                 continue;                                       //跳到 while 入口                          
  63.      }
  64.      temp=MF_Read(AbsoluteBlock,blockdata);             //讀卡數據   
  65.      if(temp!=MI_OK)
  66.      {
  67.         continue;   
  68.          }
  69.      BEEP_Ctrl();
  70.      hex_ten(cardserialno);                          //聲音提示2,讀卡成功,等待鍵盤掃描
  71.      put_char(4,30,RC500_Disp);
  72.      /*************************按鍵掃描循環**********************************************/                                                 
  73.      KEY_SCAN_G=1;                                      //允許鍵盤掃描                  
  74.      while(KEY_SCAN_G)                                 
  75.          {
  76.         Card_Money=blockdata[0]+blockdata[1]*256;       //合并絕對塊8前兩字節
  77.             LCD_Money[0]=Card_Money/1000+48;                //裝載千位數據     
  78.         LCD_Money[1]=Card_Money%1000/100+48;            //百位
  79.         LCD_Money[2]=Card_Money%1000%100/10+48;         //十位
  80.         LCD_Money[3]=Card_Money%1000%100%10+48;         //個位
  81.             LCD_Money[4]='\0';                              //結束符
  82.                 LCD_KEY_Update();                               //鍵盤和LCD刷新
  83.         delay_nms(30);                                        //每隔30毫秒掃描一次鍵盤
  84.          }
  85.            /*************************寫入卡循環**********************************************/       
  86.      W_CARD_SCAN_G=1;                                        //允許寫卡掃描     
  87.      while(W_CARD_SCAN_G)
  88.      {
  89.         blockdata[0]=Card_Money%256;                     //分解回字節數據,準備寫回到絕對塊8
  90.         blockdata[1]=Card_Money/256;
  91.         temp=MF_Active( AbsoluteBlock,cardserialno);     //激活同一張卡
  92.         if(temp!=MI_OK)
  93.         {         
  94.                   continue;
  95.         }
  96.         temp=MF_Write(AbsoluteBlock,blockdata);          //寫數據入卡  
  97.             if(temp!=MI_OK)
  98.         {
  99.           continue;
  100.             }
  101.         W_CARD_SCAN_G=0;                //清循環標志,跳出while循環
  102.         BEEP_Ctrl();
  103.         put_char(4,30,"            ");//聲音提示3,表示寫卡完成,用戶可以取走卡
  104.         delay_nms(1000);                             
  105.           }                                                            //注意:聲音提示后的1秒延遲期間,必須拿走卡,否則體統重新讀卡
  106.    }
  107. }
  108. /*————————————————————————————————————————————main函數結束———————————————————————————————————————*/
  109. /*****************************************************************************************
  110. 函數名稱:tByte MF_Active     激活卡函數
  111. 函數輸入:tByte AbsoluteBlock,tByte data *cardserialno
  112. 函數輸出:
  113. 函數功能:激活A類卡類型                                                                    
  114. ******************************************************************************************/
  115. tByte MF_Active(tByte AbsoluteBlock,tByte data *cardserialno)
  116. {  
  117.     tByte status1;
  118.     tByte *sak1;
  119.         /*********************尋卡***************************/
  120.         status1 = M500PiccRequest(PICC_REQALL, tt1);
  121.           if (status1!=MI_OK)
  122.         {
  123.            return(FM1715_REQERR);
  124.         }
  125.         /********************防碰撞**************************/
  126.     status1=M500PiccAnticoll(0,cardserialno);
  127.     if (status1!=MI_OK)
  128.         {
  129.        return(FM1715_REQERR);          
  130.         }
  131.         /*********************選擇卡*************************/
  132.            status1=M500PiccSelect(cardserialno,sak1);
  133.           if (status1!=MI_OK)
  134.         {
  135.        return(FM1715_REQERR);          
  136.         }   
  137.     /*************************授權********************************/
  138.     status1 = M500PiccAuth(PICC_AUTHENT1A, cardserialno, 1, AbsoluteBlock);
  139.           if (status1!=MI_OK)                                        //對第八塊(絕對地址)進行授權, 也就是第三個扇區第一塊
  140.         {       
  141.        return(FM1715_REQERR);       
  142.         }
  143.             
  144.         return MI_OK;
  145. }
  146. /*****************************************************************************************
  147. 函數名稱:tByte MF_Read     讀卡函數
  148. 函數輸入:tByte AbsoluteBlock,tByte idata *blockdata
  149. 函數輸出:
  150. 函數功能:讀取射頻卡的數據                                                                    
  151. ******************************************************************************************/
  152. tByte MF_Read(tByte AbsoluteBlock,tByte idata *blockdata)
  153. {  
  154.     tByte status1;
  155.     status1=M500PiccRead(AbsoluteBlock, blockdata);
  156.   
  157.         if (status1!=MI_OK)
  158.         {          
  159.             return(FM1715_REQERR);               
  160.         }
  161.        
  162.     return MI_OK;
  163. }
  164. /*****************************************************************************************
  165. 函數名稱:tByte MF_Write    寫卡函數
  166. 函數輸入:tByte AbsoluteBlock,tByte idata *blockdata
  167. 函數輸出:
  168. 函數功能:寫入射頻卡數據                                                                    
  169. ******************************************************************************************/
  170. tByte MF_Write(tByte AbsoluteBlock,tByte idata *blockdata)
  171. {   
  172.     tByte status1;
  173.     status1 = M500PiccWrite(AbsoluteBlock,blockdata);

  174.           if (status1!=MI_OK)
  175.         {
  176.            return(FM1715_REQERR);         
  177.         }

  178.         return MI_OK;
  179. }
  180. /*****************************************************************************************
  181. 函數名稱:MCU_Init函數
  182. 函數輸入:
  183. 函數輸出:
  184. 函數功能:初始化RC500                                                                    
  185. ******************************************************************************************/
  186. void MCU_Init(void)
  187. {
  188.     RC500RST    = FALSE;
  189.     RC500_CS    = TRUE;        // Enable the CS for RC500                         
  190.     IT0 = 1;                            // Config ext0 as edge trigger for RC500
  191.     EX0 = 1;                            // Enable ext0 interrupt for RC500
  192.     EA = TRUE;                        // Enable all interrupts       
  193. }
  194. /*****************************************************************************************
  195. 函數名稱:BEEP_Ctrl (void)    蜂鳴器驅動初始化
  196. 函數輸入:
  197. 函數輸出:
  198. 函數功能:有源蜂鳴器                                                                    
  199. ******************************************************************************************/
  200. void BEEP_Ctrl (void)
  201. {
  202.     BEEP = OFF;
  203. ……………………

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

所有資料51hei提供下載:
基于MFRC500讀卡芯片的讀卡程序-帶4-3鍵盤輸入和12864液晶.zip (244.28 KB, 下載次數: 42)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线观看视频 | 久久99深爱久久99精品 | 麻豆av网| 韩三级在线观看 | 亚洲精品久久久一区二区三区 | 国产精品欧美精品日韩精品 | 欧美视频在线看 | 成人黄页在线观看 | 爱爱免费视频网站 | 五月天国产 | 久久成人在线视频 | 日韩精品一区二区在线观看 | 99视频在线免费观看 | 国产一区二区成人 | 色资源在线观看 | 一区精品在线观看 | 国产精品一区二区三区久久 | 九九久久免费视频 | 色综合久 | 亚洲精品乱码久久久久久按摩观 | 视频在线日韩 | 九色av| 精精精精xxxx免费视频 | 99热这里只有精品8 激情毛片 | 久久免费视频观看 | 国产精品日韩欧美一区二区三区 | 国产小视频在线 | 成人精品视频免费 | 国产一区二区电影 | 成人免费视频在线观看 | 97伦理最新伦理 | 亚洲在线| 粉嫩国产精品一区二区在线观看 | 日韩成人精品在线观看 | 国产一区在线免费观看 | 久久精品国产精品青草 | 久久一区二区三区免费 | 欧美一区二区在线观看 | 国精日本亚洲欧州国产中文久久 | 久久91精品国产 | 国产综合久久 |