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

QQ登錄

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

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

51單片機(jī)連接ESP8266 WIFI模塊程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


單片機(jī)源程序如下:
  1. /*
  2. **********************************************************************
  3. *                         頭文件包含
  4. **********************************************************************
  5. */
  6. #include "ds18b20.h"

  7. /*
  8. **********************************************************************
  9. *                         本地宏定義
  10. **********************************************************************
  11. */

  12. #define MATRIX_PORT                P0                // 點(diǎn)陣LED負(fù)極端口


  13. /*
  14. **********************************************************************
  15. *                         本地全局變量
  16. **********************************************************************
  17. */
  18. sbit M1 = P1^0;         // M1接在P1.0

  19. sbit gBuz = P1^5;                        // P1.5通過(guò)ULN2003放大功率后驅(qū)動(dòng)BUZZER
  20. sbit SCK = P3^6;                         // SCK上升沿移位
  21. sbit RCK = P3^5;                        // RCK上升沿串行輸出寄存器鎖存
  22. sbit SER = P3^4;                         // SER引腳送字節(jié)數(shù)據(jù)進(jìn)去

  23. code u8 init_1_8266[] ="AT+CIPMUX=1\r\n";//設(shè)置8266為多連接模式(建立TCP server的前提)
  24. code u8 init_2_8266[] ="AT+CIPSERVER=1\r\n";//建立 TCP server
  25. code u8 init_3_8266[] ="AT+CIPSEND=0,5\r\n";//8266朝手機(jī)發(fā)送多少字節(jié)

  26. u8 flag = 0;//串口接收數(shù)據(jù)標(biāo)志位,當(dāng)8266初始化完后被改寫(xiě)
  27. u8 Buffer[40] = {0};      //從串口接收的數(shù)據(jù)
  28. u8 i = 0;//Buffer的index

  29. // 點(diǎn)陣列選值,數(shù)組每個(gè)元素的值選中其中一列
  30. code u8 gLineCode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  31. code u8 gZhu[] = {0x73,0xD6,0x58,0xFF,0x58,0x54,0x52,0x12};                // 漢字 朱
  32.    
  33. /*
  34. **********************************************************************
  35. *                         函數(shù)原型聲明
  36. **********************************************************************
  37. */
  38. void delay1ms(u16 i);
  39. void Hc595SendByte(u8 dat);
  40. void MatrixDisplay(u8 *zimo);
  41. void UartInit(void);
  42. void BuzzerOnOff(void);
  43. void UartSendBytes(u8 *c);
  44. u16 TempDisplayTest(void);


  45. void main()
  46. {
  47.         u16 temp = 0;
  48.         u8 temps[6] = {0};

  49.         temps[2] = '.';
  50.            M1 = 0;
  51.         UartInit();//串口初始化
  52.         delay1ms(1000);
  53.        
  54.         UartSendBytes(init_1_8266);//設(shè)置8266為多連接模式(建立TCP server的前提)
  55.         delay1ms(1000);
  56.         UartSendBytes(init_2_8266);//建立 TCP server
  57.         delay1ms(1000);
  58.         P2 = 0x55;//表示可以wifi連接8266了
  59.         flag = 1;//開(kāi)啟串口接收數(shù)據(jù)
  60.         while (1)
  61.         {        
  62.                 switch (Buffer[9])      //根據(jù)手機(jī)輸入的鍵值不同,執(zhí)行不同的內(nèi)容
  63.                 {
  64.                         case '1':
  65.                                 P2 = 0x0;//點(diǎn)亮所有燈
  66.                                 break;
  67.                         case '2':
  68.                                 P2 = 0xff;//熄滅所有燈
  69.                                 break;
  70.                         case '3':
  71.                                 M1 = 1;//馬達(dá)轉(zhuǎn)
  72.                                 break;
  73.                         case '4':
  74.                                 M1 = 0;//馬達(dá)停
  75.                                 break;
  76.                         case '5':
  77.                                 BuzzerOnOff();//蜂鳴器叫
  78.                         break;
  79.                         case '6':
  80.                                 //蜂鳴器靜
  81.                                 break;
  82.                         case '7':
  83.                                 MatrixDisplay(gZhu);//點(diǎn)陣亮
  84.                                 break;
  85.                         case '8':
  86.                                 //點(diǎn)陣滅
  87.                                 break;
  88.                         case '9'://發(fā)送18b20溫度
  89.                                 temp = TempDisplayTest();
  90.                                 temps[0] = temp /1000 + '0';
  91.                                 temp %= 1000;
  92.                                 temps[1] = temp/100 + '0';
  93.                                 temp %= 100;
  94.                                 temps[3] = temp/10 + '0';
  95.                                 temp %= 10;
  96.                                 temps[4] = temp + '0';
  97.                                 UartSendBytes(init_3_8266);//確定發(fā)送數(shù)據(jù)長(zhǎng)度(5個(gè)字節(jié))
  98.                                 delay1ms(10);
  99.                                 UartSendBytes(temps);//發(fā)送溫度數(shù)據(jù)
  100.                                 Buffer[9] = 'x';
  101.                                 P2 = 0x55;
  102.                                 break;
  103.                         default:
  104.                                 break;
  105.                 }
  106.         }
  107. }


  108. /********************************************************************
  109. * 名稱 : Delay_1ms()
  110. * 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
  111. * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
  112. * 輸出 : 無(wú)
  113. ***********************************************************************/
  114. void delay1ms(u16 i)   //誤差 0us
  115. {
  116.     u8 a,b,c;

  117.         for(;i>0;i--)
  118.             for(c=1;c>0;c--)
  119.                 for(b=142;b>0;b--)
  120.                     for(a=2;a>0;a--);
  121. }

  122. /*********************************************************************
  123. * 函 數(shù) 名       : Hc595SendByte
  124. * 函數(shù)功能                 : 通過(guò)74HC595串行移位發(fā)送一個(gè)字節(jié)出去
  125. * 參數(shù)列表       : dat - 待發(fā)送的字節(jié)數(shù)據(jù)
  126. * 函數(shù)輸出             : 無(wú)
  127. *********************************************************************/
  128. void Hc595SendByte(u8 dat)
  129. {
  130.         u8 i = 0, j = 0;

  131.         SCK = 0;                                // 將SCK置為初始狀態(tài)
  132.         RCK = 0;                                // 將RCK置為初始狀態(tài)

  133.         for (i=0; i<8; i++)
  134.         {
  135.                 SER = dat & (0x01);
  136.                 dat >>= 1;

  137.                 SCK = 1;
  138.                 j++;                                  // 延時(shí)代碼,等同于nop指令
  139.                 j++;                                // 延時(shí)代碼,等同于nop指令
  140.                 SCK = 0;       
  141.         }

  142.         RCK = 1;
  143.         j++;                                        // 延時(shí)代碼,等同于nop指令
  144.         j++;                                        // 延時(shí)代碼,等同于nop指令
  145. }

  146. /*********************************************************************
  147. * 函 數(shù) 名       : MatrixDisplay
  148. * 函數(shù)功能                 : 循環(huán)刷新顯示字模到點(diǎn)陣上
  149. * 參數(shù)列表       : zimo - 待顯示的字模數(shù)組
  150. * 函數(shù)輸出             : 無(wú)
  151. *********************************************************************/
  152. void MatrixDisplay(u8 *zimo)
  153. {
  154.         u8 i = 0;
  155.         u8 j = 0;//gai
  156.         while(1)
  157.         {
  158.                 for(i=0;i<8;i++)
  159.                 {
  160.                         MATRIX_PORT = gLineCode[i];                                  // 位選
  161.                         Hc595SendByte(zimo[i]);                // 發(fā)送段選數(shù)據(jù)
  162.                         Hc595SendByte(0x00);                  // 消隱
  163.                 }
  164.                 j++;//gai
  165.                 if(j==200)//gai
  166.                 {
  167.                         break;
  168.                 }       
  169.         }
  170. }



  171. /********************************************************************
  172. * 名稱 : UartIsr()
  173. * 功能 : 串口中斷處理程序
  174. * 輸入 : 無(wú)
  175. * 輸出 : 無(wú)
  176. ***********************************************************************/
  177. void UartIsr(void) interrupt 4
  178. {
  179.         EA = 0;
  180.         if (RI == 1)                           //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
  181.         {
  182.                 RI = 0;
  183.                 if(flag == 1)                //初始化完8266后,此處才為真
  184.                 {
  185.                         Buffer[i] = SBUF;//將接收到的字符放入Buffer
  186.                         i++;
  187.                         if(SBUF == 0x0a)//遇到換行就回到Buffer的頭部開(kāi)始存
  188.                         {
  189.                                 i = 0;
  190.                         }
  191.                 }          
  192.         }
  193.         EA = 1;
  194. }


  195. /********************************************************************
  196. * 名稱 : UartInit()
  197. * 功能 : 串口初始化,注意波特率是2400
  198. * 輸入 : 無(wú)
  199. * 輸出 : 無(wú)
  200. ***********************************************************************/
  201. void UartInit(void)
  202. {
  203.     TMOD = 0x20;
  204.     SCON = 0x50;
  205.     TH1 = 0xF3;
  206.     TL1 = TH1;
  207.     PCON = 0x00;
  208.     EA = 1;
  209.     ES = 1;
  210.     TR1 = 1;               
  211. }

  212. /*********************************************************************
  213. * 函 數(shù) 名       : BuzzerOnOff
  214. * 函數(shù)功能                 : 給蜂鳴器開(kāi)關(guān)各一段時(shí)間
  215. * 參數(shù)列表       : 無(wú)
  216. * 函數(shù)輸出             : 無(wú)
  217. *********************************************************************/
  218. void BuzzerOnOff(void)
  219. {
  220.         gBuz = 1;
  221.         delay1ms(1);
  222.         gBuz = 0;
  223.         delay1ms(1);
  224. }


  225. /*********************************************************************
  226. * 函 數(shù) 名       : UartSendBytes
  227. * 函數(shù)功能                 : 通過(guò)串口往外發(fā)送數(shù)據(jù)
  228. * 參數(shù)列表       : uchar *c,要發(fā)的數(shù)據(jù)
  229. * 函數(shù)輸出             : 無(wú)
  230. *********************************************************************/
  231. void UartSendBytes(u8 *c)//串口發(fā)送數(shù)據(jù)
  232. {
  233.         EA = 0;
  234.         while(*c != '\0')
  235.         {
  236.                 SBUF = *c;
  237.                 while(!TI);
  238.                 TI = 0;
  239.                    c++;
  240.        
  241.         }
  242.         EA = 1;
  243. }

  244. /*********************************************************************
  245. * 函 數(shù) 名       : TempDisplayTest
  246. * 函數(shù)功能                 : 通過(guò)串口往外發(fā)送數(shù)據(jù)
  247. * 參數(shù)列表       : 無(wú)
  248. * 函數(shù)輸出             : u16 tDisp,最終的溫度值
  249. *********************************************************************/
  250. u16 TempDisplayTest(void)
  251. {
  252.         u16 temp = 0;                                         // 用來(lái)暫存12位的AD值
  253.         u8 tmh = 0, tml = 0;                        // 用來(lái)暫存2個(gè)8位的AD值
  254.         u16 tDisp = 0;                                        // 用來(lái)存儲(chǔ)乘以100倍后的溫度值
  255.         double t = 0;                                        // 用來(lái)存儲(chǔ)轉(zhuǎn)換后以攝氏度為單位的溫度值

  256.         Ds18b20TempConvertCmd();                // 先寫(xiě)入轉(zhuǎn)換命令
  257.         Ds18b20TempReadCmd();                        // 然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
  258.         tml = Ds18b20ReadByte();                // 讀取溫度值共16位,先讀低字節(jié)
  259.         tmh = Ds18b20ReadByte();                // 再讀高字節(jié)

  260.         temp = tml | (tmh << 8);                // 默認(rèn)是12位分辨率,前面4個(gè)S位是符號(hào)位
  261.        
  262.         // 正溫度時(shí)符號(hào)位為0,下面代碼計(jì)算沒(méi)有考慮負(fù)溫度情況,因?yàn)槲覀儗?shí)驗(yàn)是在
  263.         // 室溫下做的,如果要考慮到負(fù)溫度的情況,代碼中要先判斷S位,若S位為1則
  264.         // 必須點(diǎn)去掉S的1再計(jì)算,計(jì)算后的值加負(fù)號(hào)即可。
  265.         t = temp * 0.0625;
  266.         tDisp = (u16)(t * 100);                        // 為方便顯示將溫度值乘以100后強(qiáng)轉(zhuǎn)為u16
  267.         return tDisp;
  268. }
復(fù)制代碼

Keil代碼下載,僅供參考:
25.1.ESP8266 Wifi Test.rar (20.28 KB, 下載次數(shù): 78)


評(píng)分

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

查看全部評(píng)分

本帖被以下淘專輯推薦:

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表