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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2567|回復: 0
打印 上一主題 下一主題
收起左側

單片機+RC522模塊測試程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:727210 發表于 2020-8-12 13:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 ubun16.04 于 2020-8-12 19:45 編輯

主要參考這個網址:
http://www.zg4o1577.cn/bbs/dpj-93114-1.html

他的程序幫了很大的忙,在他尋卡的基礎上完成了注冊,判斷函數,并做出了一定的修改
為了方便演示,做了一個簡短的視頻方便示意,等過了審核發上來
視頻:
https://www.bilibili.com/video/BV14Z4y1M7Ja?from=search&seid=2775894499705602722

下面是主程序代碼,庫函數和上面網址的一樣
  1. /*
  2. 測試成功
  3. 但是這里的串口中斷實在是不會調了
  4. 把串口中斷部分直接修改在函數中,即CALL_isr_UART();這一段被我隱藏了,串口中斷函數interrupt4直接刪除
  5. 可以實現卡片的尋卡,識別,注冊功能,注銷功能暫未設置
  6. */

  7. #include<reg52.h>
  8. #include<main.h>
  9. #include<mfrc522.h>

  10. //主要用于strcmp函數的操作
  11. #include <stdio.h>
  12. #include <string.h>

  13. unsigned char UID[5],Temp[4];        //任意尋卡的卡號
  14. unsigned char UID_set[5],Temp_set[4];   //注冊鎖定后的卡號
  15. unsigned char i=0;   //按鈕(注冊)計數
  16. unsigned char j;         //用于卡號和類型鎖定
  17. unsigned char k=0;   //按鈕(驗證)計數
  18. unsigned char suc[]={"you succeed\r\n"};
  19. unsigned char fail[]={"you lost\r\n"};

  20. sbit key=P2^0;         //注冊
  21. sbit key_judge=P2^2;        //驗證
  22. sbit led=P3^4;                //數卡錯誤響應燈

  23. void feeb(){ //尋卡成功響應函數
  24.         ff=0;
  25.         delay_10ms(1);
  26.         ff=1;
  27.         delay_10ms(1);
  28. }

  29. void feeb_fail(){ //刷卡錯誤響應函數
  30.         led=0;
  31.         delay_10ms(1);
  32.         led=1;
  33.         delay_10ms(1);
  34. }

  35. //這個延時函數其實并不是特別重要,但是delay_10ms這個函數我看不懂,可能匯編???
  36. void delay_10ms2(unsigned char x)   //誤差 0us
  37. {
  38.     unsigned char a,b,c;
  39.     for(c=x;c>0;c--)
  40.         for(b=38;b>0;b--)
  41.             for(a=130;a>0;a--);
  42. }

  43. /*
  44.             串口發送函數
  45. */
  46. //向串口發送字符
  47. void Putc_to_SerialPort(unsigned char c)
  48.         {
  49.                 SBUF=c;
  50.                 while(TI==0);
  51.                 TI=0;
  52.         }
  53. //向串口發送字符串
  54. void Puts_to_SerialPort(unsigned char *s)
  55.         {
  56.                 while(*s!='\0')
  57.                 {
  58.                         Putc_to_SerialPort(*s);
  59.                         s++;
  60.                         delay_10ms2(1);
  61.                 }
  62.         }


  63. //只處理一次卡片的讀取
  64. void Auto_Reader(void){
  65.   //while(1)
  66.   {
  67.     if(PcdRequest(0x52,Temp)==MI_OK){  //尋卡,成功后Temp數組為卡類型
  68.         
  69.       if(PcdAnticoll(UID)==MI_OK){          //防沖突,UID數組數據為卡序列號
  70.         
  71.     //串口發送               
  72.            //CALL_isr_UART();                          //開串口中斷將UID數組前四個字節上傳到串口調試助手
  73.                    Puts_to_SerialPort(UID);
  74.                    feeb();                    //調用蜂鳴器提示
  75.                    i++;   //開關計數+1自動歸零           
  76.       }
  77.     }else ff = 0;//尋卡失敗        
  78.         
  79.         //鎖定卡號類型
  80.                 for(j=0;j<3;j++){
  81.                         Temp_set[j]=Temp[j];                                       
  82.                         }                        
  83.         //鎖定卡號
  84.           for(j=0;j<4;j++){
  85.                         UID_set[j]=UID[j];                                       
  86.                 }
  87.         
  88.   }
  89.   
  90. }

  91. //判斷新卡和已經注冊過的卡是否一致,返回0或1
  92. unsigned char judge(unsigned char *string1, unsigned char *string2){
  93.     if(strcmp(string1, string2) == 0)
  94.           return 0;
  95.         else return 1;
  96. }

  97. //卡片判斷函數,針對0或1進行判斷并輸出相應動作
  98. void Auto_judge(void){
  99.   //while(1)
  100.   {
  101.     if(PcdRequest(0x52,Temp)==MI_OK&&!judge(Temp_set,Temp)){  //尋卡,成功后Temp數組為卡類型
  102.       if(PcdAnticoll(UID)==MI_OK&&!judge(UID_set,UID)){          //防沖突,UID數組數據為卡序列號                  
  103.            Puts_to_SerialPort("you succeed...\r\n");      //串口發送成功消息
  104.                    Puts_to_SerialPort(UID);  
  105.                    //CALL_isr_UART();                          //開串口中斷將UID數組前四個字節上傳到串口調試助手
  106.                    feeb();                    //調用蜂鳴器提示                    
  107.                    k++;   //開關計數+1自動歸零        
  108.       }
  109.     }
  110.         else if(PcdRequest(0x52,Temp)==MI_OK&&judge(Temp_set,Temp))
  111.           {
  112.              Puts_to_SerialPort("type wrong...\r\n");      //串口發送失敗消息
  113.                  feeb_fail();
  114.                  
  115.                  k++;   //開關計數+1自動歸零
  116.           }
  117.         else if(PcdAnticoll(UID)==MI_OK&&judge(UID_set,UID))
  118.         {
  119.              Puts_to_SerialPort("ID wrong...\r\n");      //串口發送失敗消息
  120.                  feeb_fail();
  121.                         
  122.                  k++;   //開關計數+1自動歸零
  123.           }
  124.         else ff = 0;//尋卡失敗
  125.   }
  126.   
  127. }

  128. //初始化
  129. void InitializeSystem(){
  130.         
  131.     PcdReset();
  132.     PcdAntennaOff();
  133.     PcdAntennaOn();  
  134.         M500PcdConfigISOType( 'A' );
  135.         SCON=0X50;                        //設置為工作方式1
  136.         TMOD=0X21;                        //設置計數器工作方式2
  137.         PCON=0X00;                        //波特率加倍
  138.         TH1=0Xfd;                    //計數器初始值設置,注意波特率是4800的
  139.         TL1=0Xfd;
  140.         REN = 1;
  141.         ES=1;                                                //打開接收中斷
  142.         EA=1;                                                //打開總中斷
  143.         TR1=1;               
  144.         ff = 1;
  145.         TI=0;

  146. }



  147. void main( ){
  148.          InitializeSystem( );
  149.          while(1)
  150.          {                     
  151.                 if(key==0)
  152.                 {
  153.                   Puts_to_SerialPort("Receiving From 8051 key...\r\n");               
  154.                   i++;
  155.                   feeb();
  156.                   feeb();
  157.                 }

  158.                 if(key_judge==0)
  159.                 {  
  160.                   Puts_to_SerialPort("Receiving From 8051 key_judge...\r\n");
  161.                   k++;
  162.                   feeb();
  163.                   feeb();                  
  164.                 }

  165.                 //按下key尋卡注冊,如果沒有卡放上去,那么一直在內部循環,也可以設定時間,如果超時跳出循環
  166.                 while(i%2==1){Auto_Reader();}                 
  167.                 //按下key_judge進行判斷,如果沒有卡放上去,那么一直在內部循環,也可以設定時間,如果超時跳出循環
  168.                 while(k%2==1){Auto_judge();}
  169.                
  170.          }
  171. }
復制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产综合精品一区二区三区 | 美人の美乳で授乳プレイ | 欧美国产大片 | 亚洲在线成人 | 日韩欧美在 | 亚洲电影成人 | 久久一区二区三区电影 | caoporn国产精品免费公开 | 亚洲人人 | 久久久久亚洲 | 日韩网| 天天看天天操 | 国产成人网| 中文一区| 国产区在线视频 | 91五月婷蜜桃综合 | 理论片免费在线观看 | 毛片网站在线观看视频 | 久久99精品久久久久久国产越南 | 欧美一区二区 | 在线免费看黄 | 黄片毛片在线观看 | 国产精品毛片在线 | 欧美日韩在线免费 | 久久专区 | 午夜精品网站 | 韩日在线 | 日韩欧美国产精品 | 中文字幕日韩专区 | 国产精品福利网站 | 99精品亚洲国产精品久久不卡 | 黄色网址在线免费观看 | av成人在线观看 | 欧美一二三 | 奇米影视首页 | 成年女人免费v片 | 国产一二三区在线 | 久久国产免费 | wwww.8888久久爱站网 | 精品国产18久久久久久二百 | av手机在线免费观看 |