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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機基于esp8266 WIFI的刷卡器程序

[復制鏈接]
ID:538181 發表于 2019-5-14 18:07 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
  1. #include "reg52.h"                       
  2. #include "rc522.h"
  3. #include "stdio.h"
  4. #include "math.h"
  5. #include "stdlib.h"
  6. #include "string.h"
  7. #include "lcd1602.h"
  8. #define RELOAD_COUNT 0xFA//宏定義波特率發生器的載入值
  9. #define uchar unsigned char          //對數據類型進行聲明定義
  10. #define uint unsigned int       
  11. sfr AUXR=0x8E;
  12. sfr BRT=0x9C;
  13. sfr AUXR1=0xA2;
  14. sbit led=P2^7;
  15. sbit BEEP=P2^6;
  16. sbit TEST=P2^5;
  17. uchar Receive,i;
  18. uint n;
  19. uchar s=0,c=0,h=0;
  20. uchar Recive_table[15];
  21. char status;//按鍵狀態
  22. unsigned char code CardKeyABuf[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
  23. unsigned char  CT[2];                                                                               
  24. unsigned char  SN[4];//從卡片讀取的卡號存放在這里                        
  25. // 系統注冊的卡號
  26. unsigned char  code card_1[4]={0XFD,        0X31,        0X9A,        0X15};
  27. unsigned char  code card_2[4]={0X84,        0X4D,        0XC3,   0XDB};
  28. unsigned char  code  id_1[16]={"20150502310028"};
  29. unsigned char  code  id_2[16]={"20150502310033"};
  30. //WiFi模塊設置
  31. unsigned char LYMS[13]={0x41,0x54,0x2B,0x43,0x57,0x4D,0x4F,0x44,0x45,0x3D,0x32,0x0D,0x0A};//AT+CWMODE=2 設置成路由模式
  32. unsigned char SZLY[38]={0x41,0x54,0x2B,0x43,0x57,0x53,0x41,0x50,0x3D,0x22,0x45,0x53,0x50,
  33. 0x38,0x32,0x36,0x36,0x22,0x2C,0x22,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x22,
  34. 0x2C,0x31,0x31,0x2C,0x33,0x0D,0x0A};//AT+CWSAP="ESP8266","0123456789",11,0 設置路由
  35. unsigned char RST[8]={0x41,0x54,0x2B,0x52,0x53,0x54,0x0D,0x0A};//AT+RST 重啟
  36. unsigned char SZDLJ[13]={0x41,0x54,0x2B,0x43,0x49,0x50,0x4D,0x55,0x58,0x3D,0x31,0x0D,0x0A};//AT+CIPMUX=1 設置成多連接
  37. unsigned char KQFU[21]={0x41,0x54,0x2B,0x43,0x49,0x50,0x53,0x45,0x52,0x56,0x45,0x52,0x3D,
  38. 0x31,0x2C,0x35,0x30,0x30,0x30,0x0D,0x0A};//AT+CIPSERVER=1,5000 開啟TCP服務端口
  39. unsigned char FSSJ[11]={0x41,0x54,0x2B,0x43,0x49,0x50,0x53,0x45,0x4E,0x44,0x3D};//AT+CIPSEND= 發送數據

  40. /****************************************************
  41. 名稱:延時函數
  42. 功能:精準延時
  43. *****************************************************/
  44. void usdelay(uint f)
  45. {
  46.         while(f--);
  47. }
  48. /****************************************************
  49. 名稱:讀卡號函數
  50. 功能:讀取測試卡號
  51. *****************************************************/
  52. void Display_ID( unsigned char * SrcBuf )
  53. {
  54.         char xdata DisplayBuf[10];
  55.         char *pDisplayChar;
  56.         unsigned char Tmp, i;
  57.         pDisplayChar = DisplayBuf;
  58.         for( i = 0; i < 4; i++ )
  59.         {
  60.                 Tmp = ( ( *SrcBuf ) >> 4 ) & 0x0F;       
  61.                 if( ( Tmp >=0 ) && ( Tmp <= 9 )        )
  62.                 {
  63.                         *pDisplayChar ++ = '0' + Tmp;       
  64.                 }
  65.                 else
  66.                 {
  67.                         *pDisplayChar ++ = 'A' + Tmp - 10;
  68.                 }

  69.                 Tmp = ( *SrcBuf ) & 0x0F;       
  70.                 if( ( Tmp >=0 ) && ( Tmp <= 9 )        )
  71.                 {
  72.                         *pDisplayChar ++ = '0' + Tmp;       
  73.                 }
  74.                 else
  75.                 {
  76.                         *pDisplayChar ++ = 'A' + Tmp - 10;
  77.                 }

  78.                 SrcBuf ++;
  79.         }
  80.         *pDisplayChar ++ = '\0';

  81.         writecom(0x80);
  82.         writestr(DisplayBuf);  
  83. }

  84. /*******************************************************************************
  85. * 函數名         :UsartInit()
  86. * 函數功能                   :設置串口
  87. *******************************************************************************/

  88. void Uart_Init()//使用定時器1作為波特率發生器
  89. {
  90.         SCON=0x50;//設置為串行口以方式1工作,8位異步通訊,允許接收中斷。//一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。
  91.         PCON=0x80;//SMOD波特率選擇位為1,SMOD=1.
  92.         TMOD=0x21;//設置定時器1為波特率發生器,工作在模式2,8位自動裝載
  93.         TH1=RELOAD_COUNT;//波特率9600,TH1=256-FOSC/16/12/波特率
  94.         TL1=TH1;
  95.         EA=1;//總中斷打開
  96.         ES=0;//關閉串口中斷
  97.         TR1=1;//啟動定時器1
  98. }
  99. /********************************************************************
  100. 名稱:串口發送函數
  101. 功能:MCU向其他與其連接的設備發送數據(此處是無線WIFI模塊ESP8266)
  102. ********************************************************************/
  103. void Send_Uart (uchar value)
  104. {
  105.         ES=0;//關閉串口中斷
  106.         TI=0;//清發送完畢中斷請求標志位
  107.         SBUF=value;//發送
  108.         while(TI==0);//等待發送完畢
  109.         TI=0;//清發送完畢中斷請求標志位
  110.         ES=1;//允許串口中斷
  111. }
  112. /********************************************************************
  113. 名稱:WIFI模塊設置函數
  114. 作用:啟動模塊,以便可以實現無線接入和控制
  115. ********************************************************************/
  116. void ESP8266_Set(uchar *puf)//數組指針*puf指向字符串數組
  117. {
  118.         while(*puf!='\0')//遇到空格跳出循環
  119.                 {
  120.                         Send_Uart(*puf);//向WIFI模塊發送控制指令
  121.                         usdelay(5);
  122.                         puf++;
  123.                 }
  124.         usdelay(5);
  125.         Send_Uart('\r');//回車
  126.         usdelay(5);
  127.         Send_Uart('\n');//換行
  128.         delayms(1000);
  129. }
  130. /****************************************************
  131. 名稱:ESP8266發送數據函數
  132. 功能:用于與wifi模塊相連的終端發送數據
  133. *****************************************************/
  134. void ESP8266_Sent(uchar *puf)//數組指針*puf指向字符串數組
  135. {
  136.         ESP8266_Set(FSSJ);
  137.         while(*puf!='\0')//遇到空格跳出循環
  138.         {       
  139.                 Send_Uart(*puf);//向WIFI模塊發送控制指令。
  140.                 usdelay(5);
  141.                 puf++;
  142.         }
  143.         usdelay(5);
  144.         Send_Uart('\n');//換行
  145.         delayms(10);
  146. }


  147. /*蜂鳴器滴響*/
  148. void Beep(int a)         
  149. {        int i;
  150.         for(i=0;i<a;i++)                 
  151.         {
  152.                 BEEP = 0;
  153.                 delayms(100);
  154.                 BEEP = 1;
  155.         }
  156. }

  157. /*******************************************************************************
  158. * 函 數 名         : Timer0Init
  159. * 函數功能                   : 定時器0初始化
  160. *******************************************************************************/
  161. void Timer0Init()
  162. {
  163.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  164.         TH0=0XFC;        //給定時器賦初值,定時1ms
  165.         TL0=0X18;       
  166.         ET0=1;//打開定時器0中斷允許
  167.         EA=1;//打開總中斷
  168.         TR0=1;//打開定時器                       
  169. }
  170. void Timer0() interrupt 0
  171. {
  172.         static uint i;
  173.         TH0=0XFC;        //給定時器賦初值,定時1ms
  174.         TL0=0X18;
  175.         i++;
  176.         if(i==1000)
  177.         {
  178.                 s++;
  179.                         if(s>59)
  180.         {
  181.                 c++;
  182.         }
  183.         if(c>59)
  184.         {
  185.                 h++;
  186.         }
  187.         if(h>23)
  188.         {
  189.             h=0;
  190.         }               
  191.         }       
  192. }
  193. /*******************************************************************************
  194. * 函數名         : Usart() interrupt 4
  195. * 函數功能                  : 串口通信中斷函數
  196. *******************************************************************************/
  197. void Usart() interrupt 4
  198. {
  199.         static uchar i=0;
  200.         if(RI==1)
  201.         {
  202.                 RI=0;
  203.                 Receive=SBUF;//MCU接收wifi模塊反饋回來的據
  204.                 Recive_table[i]=Receive;
  205.                 i++;
  206.                 if((Recive_table[i-1]=='\n'))i=0;//遇到換行重新裝值
  207.         }
  208.         else TI=0;
  209. }

  210. /*******************************************************************************
  211. * 函 數 名       : main
  212. * 函數功能                 : 主函數
  213. *******************************************************************************/
  214. void main()
  215. {
  216.         RC522_Init();//re522刷卡器初始化
  217.         Timer0Init();//定時器0中斷初始化
  218.         lcdinit();
  219.         Uart_Init(); //串口初始化
  220.         ESP8266_Set(LYMS);//WiFi模塊設置
  221.         ESP8266_Set(SZLY);
  222.         ESP8266_Set(RST);
  223.         ESP8266_Set(SZDLJ);
  224.         ESP8266_Set(KQFU);

  225.         while(1)
  226.         {        led=0;
  227.                  status = PcdRequest(PICC_REQALL,CT);//向卡發送請求讀取的信號,并且向CT數組內寫入從卡片讀取的數據
  228.                 status = PcdAnticoll(SN);//防沖撞處理,防止讀卡出現沖突        ,往SN寫入4字節卡號
  229.                 if(TEST==0)
  230.                         {        delayms(20);
  231.                                 if(TEST==0)
  232.                                 {        Display_ID(SN);//按下按鍵讀取卡號
  233.                                         delayms(3000);
  234.                                 }
  235.                         }
  236.                 if(status == MI_OK)       
  237.                 {
  238.                     led=1;
  239.                         Beep(5);
  240.                   if(0 == memcmp(SN,card_1,4))
  241.                           {
  242.                           ESP8266_Sent(id_1);
  243.                           Send_Uart(h);
  244.                           Send_Uart(':');
  245.                           Send_Uart(c);
  246.                           Send_Uart(':');
  247.                           Send_Uart(s);
  248.                           Send_Uart('\n');//換行
  249.                           writecom(0x80+0x42);
  250.                           writedata(h);
  251.                           writecom(0x80+0x44);
  252.                           writedata(':');
  253.                           writecom(0x80+0x45);
  254.                           writedata(c);
  255.                           writecom(0x80+0x47);
  256.                           writedata(':');
  257.                           writecom(0x80+0x48);
  258.                           writedata(s);
  259.                         }
  260.                   if(0 == memcmp(SN,card_2,4))
  261.                           {
  262.                           ESP8266_Sent(id_2);
  263.                           Send_Uart(h);
  264.                           Send_Uart(':');
  265.                           Send_Uart(c);
  266.                           Send_Uart(':');
  267.                           Send_Uart(s);
  268.                           Send_Uart('\n');//換行
  269.                            writecom(0x80+0x42);
  270.                           writedata(h);
  271.                           writecom(0x80+0x44);
  272.                           writedata(':');
  273.                           writecom(0x80+0x45);
  274.                           writedata(c);
  275.                           writecom(0x80+0x47);
  276.                           writedata(':');
  277.                           writecom(0x80+0x48);
  278.                           writedata(s);
  279.                         }
  280.                 }
  281.        
  282.         }
  283. }               
復制代碼

所有資料51hei提供下載:
單片機課設程序.zip (81.01 KB, 下載次數: 18)


評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久五月婷 | 精品成人免费视频 | 亚洲欧美久久 | 午夜精品 | 九九在线视频 | 日韩一区中文字幕 | 日韩在线不卡 | 91久久久久久久久 | 欧美成人a∨高清免费观看 色999日韩 | 一二三区视频 | 久久精品亚洲欧美日韩久久 | 91精品国产综合久久精品图片 | 免费h在线| 阿v视频在线观看 | 紧缚调教一区二区三区视频 | 国产精品久久久久久久7777 | 天堂在线中文字幕 | 国产乱码精品一区二区三区忘忧草 | 久久成人一区 | 国产精品18hdxxxⅹ在线 | 日本欧美国产 | 免费v片| 国产精品国产三级国产aⅴ中文 | 日韩成人免费视频 | 国产小视频在线 | 91精品无人区卡一卡二卡三 | 夜夜夜夜夜夜曰天天天 | 伊人网站在线观看 | 欧美日韩成人在线观看 | 欧美黄色小视频 | 中文精品视频 | 性色视频在线观看 | 性网址| 日韩电影中文字幕在线观看 | h视频免费在线观看 | 国产一级片一区二区 | 久久久久久久电影 | 91最新在线视频 | 99在线观看| 色一阁 | 国产二区av |