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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12029|回復(fù): 28
打印 上一主題 下一主題
收起左側(cè)

基于RFID技術(shù)的RC522模擬門(mén)禁設(shè)計(jì) 單片機(jī)源碼與PCB工程分享

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
      最近做了個(gè)基于51單片機(jī)的模擬門(mén)禁的DIY小作品。工作原理大致是:當(dāng)IC卡放在讀卡器可以識(shí)別的范圍內(nèi)時(shí),讀卡器讀取信息傳給單片機(jī)進(jìn)行處理,如果識(shí)別為有效卡則繼電器閉合(模擬門(mén)鎖打開(kāi)),開(kāi)門(mén)指示燈亮,12864液晶上會(huì)進(jìn)行簡(jiǎn)單的提示表示刷卡成功等。如果該卡為無(wú)效卡則報(bào)警指示燈亮,蜂鳴器報(bào)警,同時(shí)可以通過(guò)按鍵進(jìn)行時(shí)間的設(shè)置以及對(duì)IC卡進(jìn)行注冊(cè)和注銷(xiāo)。。。總之自己也是一個(gè)小菜雞,這個(gè)小作品也是一個(gè)很簡(jiǎn)單的設(shè)計(jì),也沒(méi)有什么創(chuàng)新的地方,主要是自己獨(dú)立的找資料,動(dòng)手DIY的。板子上一個(gè)485模塊電路,本來(lái)打算是想通過(guò)MODBUS協(xié)議和MCGS進(jìn)行通信的,最后數(shù)據(jù)也沒(méi)有傳上去(可以在組態(tài)上發(fā)命令,但無(wú)法把下位機(jī)數(shù)據(jù)傳上去),所以這一部分功能擱淺了,希望有大神可以試一下單片機(jī)與MCGS的通訊,比如把實(shí)時(shí)溫度顯示在MCGS組態(tài)界面上。附上完整的PCB和程序

制作出來(lái)的實(shí)物圖如下:


Altium Designer畫(huà)的單片機(jī)RFID模擬門(mén)禁系統(tǒng)電路原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "beep.h"
  3. #include "12864.h"
  4. #include "rc522.h"
  5. #include "key.h"
  6. #include "STCEEPROM.h"
  7. #include "DS1302.h"
  8. unsigned char idata RevBuffer[30];
  9. unsigned char Card_Num;                  
  10. unsigned char idata UID[4],Temp[4];
  11. unsigned char Table[3];
  12. unsigned char Num;
  13. uchar DS1302_Table[7]={0};        //讀取時(shí)間值
  14. unsigned char Count,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;

  15. unsigned char T0RH = 0;  //T0重載值的高字節(jié)
  16. unsigned char T0RL = 0;  //T0重載值的低字節(jié)
  17. //unsigned char table1[20]= "刷卡成功!\r\n";
  18. void ConfigTimer0(unsigned int ms);

  19. extern void UartDriver();
  20. extern void ConfigUART(unsigned int baud);
  21. extern void UartRxMonitor(unsigned char ms);
  22. extern void UartWrite(unsigned char *buf, unsigned char len);

  23. //void delay_ms(unsigned int t)  
  24. //{  
  25. //    unsigned char a,b;  
  26. //    while(t--)  
  27. //    {  
  28. //      for(b=102;b>0;b--)  
  29. //      for(a=3;a>0;a--);  
  30. //    }  
  31. //}


  32. void iccardcode();
  33. void InitializeSystem();
  34. void Auto_Reader(void);
  35. void Display_LCD2(uchar Dis_Hour,uchar Dis_Min,uchar Dis_Sec);
  36. void Run_DS1302(void);
  37. void main()
  38. {
  39.         
  40.          EA = 1;            //開(kāi)總中斷
  41.    ConfigTimer0(1);   //配置T0定時(shí)1ms
  42.    ConfigUART(9600);  //配置波特率為9600

  43.         led_init();
  44.         beep_init();
  45.         InitializeSystem();
  46.         InitLcd12864();
  47.         LcdShowString(8,8,"智能門(mén)禁考勤系統(tǒng)");
  48.         
  49.     while(1)
  50. {  

  51.                 //UartDriver();
  52.     iccardcode();
  53.                 Auto_Reader();
  54.     Run_DS1302();
  55.                  if(!KEY1)
  56.                 {
  57.                         delay_10ms(50);
  58.                         if(!KEY1)
  59.                         {
  60.                         DS1302_Table[4]++;
  61.                         Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
  62.                         }        
  63.                
  64.                                 
  65.                         
  66.                 }        
  67.                
  68.                
  69.                 if(!KEY2)
  70.                 {
  71.                         delay_10ms(50);
  72.                         if(!KEY2)
  73.                         {
  74.                         DS1302_Table[4]--;
  75.                         Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
  76.                         }        
  77.                 }
  78.                
  79.                

  80.                 if(!KEY3)
  81.                 {
  82.                         delay_10ms(50);
  83.                         if(!KEY3)
  84.                         {
  85.                         DS1302_Table[5]++;
  86.                         Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
  87.                         }        
  88.                 }                        
  89.          if(!KEY5)
  90.                 {
  91.                         delay_10ms(50);
  92.                         
  93.                 if(!KEY5)
  94.                 {
  95.                         delay_10ms(50);
  96.                         if(!KEY5)
  97.                         {
  98.                                 if(C_flag==2)
  99.                                 {
  100.                                                                                          //0123456789abcdef
  101.                                         LcdShowString(8,32," Register Card! ");


  102.                                 }
  103.                                 if(C_flag==1)
  104.                                 {
  105.                                                                                          //0123456789abcdef
  106.                                         LcdShowString(8,32,"  Clean Card!   ");


  107.                                 }
  108.                                 BEEP=0;delay_10ms(200);BEEP=1;
  109.                                 LcdShowString(8,32,"Please Swipecard");
  110.                                 C_flag =0;
  111.                                 while(!KEY5);
  112.                          }        
  113.                         
  114.                         
  115.                  }
  116.      
  117.    }

  118.   }
  119.          
  120. }



  121. //系統(tǒng)初始化
  122. void InitializeSystem()
  123. {

  124.      PcdReset();
  125.      PcdAntennaOff();
  126.      PcdAntennaOn();  
  127.          M500PcdConfigISOType( 'A' );


  128. }

  129. void Auto_Reader(void)
  130. {
  131.     if(PcdRequest(0x52,Temp)==0)
  132.     {
  133.       if(PcdAnticoll(UID)==0)
  134.       {
  135.                     BEEP=0;delay_10ms(20);BEEP=1;

  136.                         Table[0]=UID[0]/100+0x30;
  137.                         Table[1]=UID[0]/10%10+0x30;
  138.                         Table[2]=UID[0]%10+0x30;
  139.                         //LcdShowString(8,32,"Num:            ");
  140.                         //LcdShowString(8,32,Table);
  141.                         Count =  UID[0];
  142.                         if((Count==Count1)||(Count==Count2)||(Count==Count3)||(Count==Count4)||(Count==Count5))
  143.                         {
  144.               
  145.                                 LcdShowString(8,48,"    刷卡成功!");
  146.                                 Green_LED = 0;
  147.                                 JQZ=0;
  148.                                 UartWrite("刷卡成功,請(qǐng)進(jìn)入!\r\n\r\n\r\n",20);
  149.                                 delay_10ms(200);
  150.                                 JQZ=1;
  151.                                 Green_LED = 1;
  152.                                 LcdShowString(8,48,"                                                         ");
  153.                                 C_flag=1;
  154.                           
  155.                                 
  156.         
  157.                         }
  158.                         else
  159.                         {
  160.                                 LcdShowString(8,48,"    刷卡失敗!");
  161.                                 UartWrite("刷卡失敗,請(qǐng)重刷!\r\n\r\n\r\n",20);
  162.                                 RED_LED = 0;
  163.                                 delay_10ms(200);
  164.                                 RED_LED = 1;
  165.                                 LcdShowString(8,48,"                                                         ");
  166.                                 C_flag=2;
  167.                         }
  168.                         delay_10ms(200);
  169.                            LcdShowString(8,32,"Please Swipecard");

  170.                 }
  171.         }
  172. }

  173. void iccardcode()
  174. {            
  175.           unsigned char cmd;
  176.         unsigned char status;

  177.         
  178.         cmd = RevBuffer[0];
  179.         switch(cmd)
  180.          {
  181.                 case 1:     // Halt the card     //終止卡的操作
  182.                         status= PcdHalt();;                        
  183.                         RevBuffer[0]=1;
  184.                         RevBuffer[1]=status;
  185.                         break;                        
  186.                 case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
  187.                                 // 尋卡,防沖突,選擇卡    返回卡類(lèi)型(2 bytes)+ 卡系列號(hào)(4 bytes)
  188.                         status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  189.                         if(status!=0)
  190.                         {
  191.                                 status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  192.                                 if(status!=0)                                
  193.                                 {
  194.                                         RevBuffer[0]=1;        
  195.                                         RevBuffer[1]=status;
  196.                                         break;
  197.                                 }
  198.                         }  
  199.                         RevBuffer[0]=3;        
  200.                         RevBuffer[1]=status;
  201.                         break;
  202.                         
  203.                 case 3:                         // 防沖突 讀卡的系列號(hào) MLastSelectedSnr
  204.                         status = PcdAnticoll(&RevBuffer[2]);
  205.                         if(status!=0)
  206.                         {
  207.                                 RevBuffer[0]=1;        
  208.                                 RevBuffer[1]=status;
  209.                                 break;
  210.                         }
  211.                         //memcpy(MLastSelectedSnr,&RevBuffer[2],4);
  212.                         RevBuffer[0]=5;
  213.                         RevBuffer[1]=status;
  214.                         break;        
  215.                 case 4:                                    // 選擇卡 Select Card
  216.                         //status=PcdSelect(MLastSelectedSnr);
  217.                         if(status!=MI_OK)
  218.                         {
  219.                                 RevBuffer[0]=1;        
  220.                                 RevBuffer[1]=status;
  221.                                 break;
  222.                         }
  223.                         RevBuffer[0]=3;
  224.                         RevBuffer[1]=status;                        
  225.                         break;
  226.                 case 5:            // Key loading into the MF RC500's EEPROM
  227.             //status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗(yàn)卡密碼
  228.                         RevBuffer[0]=1;
  229.                         RevBuffer[1]=status;                        
  230.                         break;                                                        
  231.                 case 6:
  232.                         RevBuffer[0]=1;
  233.                         RevBuffer[1]=status;                        
  234.                         break;                                
  235.                 case 7:     
  236.                     RevBuffer[0]=1;
  237.                         RevBuffer[1]=status;                        
  238.                         break;
  239.                 case 8:     // Read the mifare card
  240.                             // 讀卡
  241.                         status=PcdRead(RevBuffer[1],&RevBuffer[2]);
  242.                         if(status==0)
  243.                         {RevBuffer[0]=17;}
  244.                         else
  245.                         {RevBuffer[0]=1;}
  246.                         RevBuffer[1]=status;                        
  247.                         break;
  248.                 case 9:     // Write the mifare card
  249.                             // 寫(xiě)卡  下載密碼
  250.                         status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
  251.                         RevBuffer[0]=1;
  252.                         RevBuffer[1]=status;                        
  253.                         break;
  254.                 case 10:
  255.             PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
  256.                         RevBuffer[0]=1;        
  257.                         RevBuffer[1]=status;
  258.                         break;
  259.                 case 12:    // 參數(shù)設(shè)置
  260.                     PcdBakValue(RevBuffer[1], RevBuffer[2]);
  261.                         RevBuffer[0]=1;        //contact
  262.                         RevBuffer[1]=0;
  263.                         break;               
  264.         }
  265. }


  266. void Display_LCD2(uchar Dis_Hour,uchar Dis_Min,uchar Dis_Sec)
  267. {
  268.         uchar Dis_Table[8]="18:40:33";
  269.         Dis_Table[0] =' ';
  270.         Dis_Table[1] =' ';
  271.         Dis_Table[2] =' ';
  272.         Dis_Table[3] =' ';
  273.         Dis_Table[4] = Dis_Hour/10+0x30;
  274.         Dis_Table[5] = Dis_Hour%10+0x30;
  275.   Dis_Table[6] =':';
  276.         Dis_Table[7] = Dis_Min/10+0x30;
  277.         Dis_Table[8] = Dis_Min%10+0x30;
  278.   Dis_Table[9]  =':';
  279.         Dis_Table[10] = Dis_Sec/10+0x30;
  280.         Dis_Table[11] = Dis_Sec%10+0x30;

  281.         LcdShowString(8,16,Dis_Table);               
  282. }
  283. /********************************************************************
  284. * 名稱(chēng) : Run_DS1302(void)
  285. * 功能 : 讀出DS1302中的數(shù)據(jù),并進(jìn)行顯示
  286. * 輸入 : 無(wú)
  287. * 輸出 : 無(wú)
  288. ***********************************************************************/
  289. void Run_DS1302(void)
  290. {
  291.         uchar sec, min, hour, day, month, week, year;

  292.                 v_W1302(0x8f, 0);
  293.                 sec = bcdtodec(uc_R1302(0x81));           //讀出DS1302中的秒
  294.                 v_W1302(0x8f, 0);
  295.                 min = bcdtodec(uc_R1302(0x83));           //讀出DS1302中的分
  296.                 v_W1302(0x8f, 0);
  297.                 hour = bcdtodec(uc_R1302(0x85));   //讀出DS1302中的小時(shí)
  298.                 v_W1302(0x8f, 0);
  299.                 day = bcdtodec(uc_R1302(0x87));           //讀出DS1302中的日
  300.                 v_W1302(0x8f, 0);
  301.                 month = bcdtodec(uc_R1302(0x89));  //讀出DS1302中的月
  302.                 v_W1302(0x8f, 0);
  303.                 week = bcdtodec(uc_R1302(0x8b));  //讀出DS1302中的星期
  304.                 v_W1302(0x8f, 0);
  305.                 year = bcdtodec(uc_R1302(0x8d));   //讀出DS1302中的年

  306.      DS1302_Table[0]=year;
  307.            DS1302_Table[1]=month;
  308.            DS1302_Table[2]=day;
  309.            DS1302_Table[3]=week;
  310.            DS1302_Table[4]=hour;
  311.            DS1302_Table[5]=min;
  312. ……………………

  313. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
程序V0.2.rar (203.75 KB, 下載次數(shù): 386)
newPCBV0.1.rar (3.36 MB, 下載次數(shù): 163)
MyDesigner.rar (38.17 KB, 下載次數(shù): 198)


評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:240576 發(fā)表于 2018-6-6 16:05 | 只看該作者
可以再發(fā)一下程序嗎?我這里下載不了,能發(fā)郵箱嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:127220 發(fā)表于 2018-6-7 12:01 | 只看該作者
sadjvcsadklvhsd 發(fā)表于 2018-6-6 16:05
可以再發(fā)一下程序嗎?我這里下載不了,能發(fā)郵箱嗎?

郵箱留下,發(fā)給你。
回復(fù)

使用道具 舉報(bào)

地板
ID:135832 發(fā)表于 2018-6-15 10:10 | 只看該作者
學(xué)習(xí)一下下。剛好有用
回復(fù)

使用道具 舉報(bào)

5#
ID:354187 發(fā)表于 2018-6-19 11:57 | 只看該作者
979123013@qq.com
求樓主分享一下
回復(fù)

使用道具 舉報(bào)

6#
ID:173447 發(fā)表于 2018-6-22 18:06 | 只看該作者
2435520844@qq.com  
跪求樓主分享
回復(fù)

使用道具 舉報(bào)

7#
ID:358027 發(fā)表于 2018-6-24 21:37 | 只看該作者
502713768@qq.com
求樓主分享一下
回復(fù)

使用道具 舉報(bào)

8#
ID:34298 發(fā)表于 2018-6-25 21:47 | 只看該作者
736085739@qq.com
求樓主分享一下
回復(fù)

使用道具 舉報(bào)

9#
ID:90140 發(fā)表于 2018-6-27 09:01 | 只看該作者
謝謝樓主分享..
回復(fù)

使用道具 舉報(bào)

10#
ID:364885 發(fā)表于 2018-7-4 15:51 | 只看該作者
樓主還在么,能分享一下程序么
回復(fù)

使用道具 舉報(bào)

11#
ID:364885 發(fā)表于 2018-7-4 15:51 | 只看該作者
541436424@qq.com
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

12#
ID:166645 發(fā)表于 2018-7-7 14:58 | 只看該作者
樓主可以加您的QQ請(qǐng)教您幾個(gè)問(wèn)題嗎,,,我的qq2759147357
回復(fù)

使用道具 舉報(bào)

13#
ID:315259 發(fā)表于 2018-12-18 19:43 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

14#
ID:542293 發(fā)表于 2019-5-22 19:49 | 只看該作者
終止讓我找到了
回復(fù)

使用道具 舉報(bào)

15#
ID:524764 發(fā)表于 2019-5-23 11:45 | 只看該作者

1056950891@qq.com
求樓主分享一下
回復(fù)

使用道具 舉報(bào)

16#
ID:555752 發(fā)表于 2019-6-5 16:47 | 只看該作者
胡仙森 發(fā)表于 2018-6-7 12:01
郵箱留下,發(fā)給你。

還在嗎,麻煩您給我一下唄   571755661@qq.com
回復(fù)

使用道具 舉報(bào)

17#
ID:588348 發(fā)表于 2019-7-24 11:40 | 只看該作者
2842868794@qq.com
跪求樓主分享
回復(fù)

使用道具 舉報(bào)

18#
ID:594482 發(fā)表于 2019-8-9 09:56 來(lái)自手機(jī) | 只看該作者
248562478@qq.com        求分享,謝謝
回復(fù)

使用道具 舉報(bào)

19#
ID:106121 發(fā)表于 2019-9-4 16:55 | 只看該作者
學(xué)習(xí)一下 頂起來(lái)!
回復(fù)

使用道具 舉報(bào)

20#
ID:101339 發(fā)表于 2019-9-5 12:49 | 只看該作者
學(xué)習(xí)一下下。剛好有用
回復(fù)

使用道具 舉報(bào)

21#
ID:336378 發(fā)表于 2019-9-10 09:35 | 只看該作者

1178049536@qq.com
跪求樓主分享
回復(fù)

使用道具 舉報(bào)

22#
ID:336378 發(fā)表于 2019-9-10 09:39 | 只看該作者
寫(xiě)的好,支持源碼共享。資源共師兄習(xí)。
回復(fù)

使用道具 舉報(bào)

23#
ID:202097 發(fā)表于 2019-10-19 18:51 來(lái)自手機(jī) | 只看該作者
1476882017@qq.com      求分享,謝謝
回復(fù)

使用道具 舉報(bào)

24#
ID:599674 發(fā)表于 2019-10-28 15:57 | 只看該作者
183295202@qq.com   感謝樓主
回復(fù)

使用道具 舉報(bào)

25#
ID:648497 發(fā)表于 2019-11-24 17:18 | 只看該作者
1934447196@qq.com
樓樓分享一下,謝謝
回復(fù)

使用道具 舉報(bào)

26#
ID:679122 發(fā)表于 2020-1-4 00:32 | 只看該作者
你好,可以給我發(fā)一下嗎?
203385918@qq.com
回復(fù)

使用道具 舉報(bào)

27#
ID:715507 發(fā)表于 2020-4-6 12:02 | 只看該作者
樓主,獨(dú)立按鍵沒(méi)反應(yīng)呢,怎么回事呀?獨(dú)立按鍵一定要加上拉電阻嗎?
回復(fù)

使用道具 舉報(bào)

28#
ID:723403 發(fā)表于 2020-4-6 14:52 | 只看該作者
好東西!!!!
回復(fù)

使用道具 舉報(bào)

29#
ID:784145 發(fā)表于 2020-6-29 20:54 | 只看該作者
PCB圖有好多不對(duì)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线小视频 | 欧美1区2区 | 三级av在线 | 成人国产毛片 | 一级片在线播放 | 免费a级毛片在线播放 | 久久国产精品免费 | 天天操夜夜操 | 精品一区二区在线观看 | 91在线免费观看网站 | 超碰网址 | a免费视频| 午夜私人影院在线观看 | 亚洲一级淫片 | 中文字幕av一区二区三区 | 国产成人在线视频免费观看 | 国产一区二 | 在线观看国产视频 | 亚洲第一免费播放区 | 中文字幕一页二页 | 97av| 国产精品一区一区三区 | 欧美亚洲日本 | 成人在线电影在线观看 | 国产精品一区二区不卡 | 蜜桃免费一区二区三区 | 国产精品久久久久久久久久久久 | 中文成人无字幕乱码精品 | 久久久久久久99 | 国产精品久久久99 | 日本在线视频一区二区 | 久久国产精品久久久久久 | 91麻豆精品国产91久久久久久久久 | 亚洲一区二区三区视频在线 | 久久亚洲一区 | 欧美日韩国产一区二区三区 | 成人黄色网址大全 | 中文区中文字幕免费看 | 91原创视频在线观看 | 国产色婷婷久久99精品91 | 色视频在线播放 |