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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機連接ESP8266 WIFI模塊程序

[復制鏈接]
跳轉到指定樓層
樓主


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

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

  12. #define MATRIX_PORT                P0                // 點陣LED負極端口


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

  19. sbit gBuz = P1^5;                        // P1.5通過ULN2003放大功率后驅動BUZZER
  20. sbit SCK = P3^6;                         // SCK上升沿移位
  21. sbit RCK = P3^5;                        // RCK上升沿串行輸出寄存器鎖存
  22. sbit SER = P3^4;                         // SER引腳送字節數據進去

  23. code u8 init_1_8266[] ="AT+CIPMUX=1\r\n";//設置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朝手機發送多少字節

  26. u8 flag = 0;//串口接收數據標志位,當8266初始化完后被改寫
  27. u8 Buffer[40] = {0};      //從串口接收的數據
  28. u8 i = 0;//Buffer的index

  29. // 點陣列選值,數組每個元素的值選中其中一列
  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. *                         函數原型聲明
  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);//設置8266為多連接模式(建立TCP server的前提)
  55.         delay1ms(1000);
  56.         UartSendBytes(init_2_8266);//建立 TCP server
  57.         delay1ms(1000);
  58.         P2 = 0x55;//表示可以wifi連接8266了
  59.         flag = 1;//開啟串口接收數據
  60.         while (1)
  61.         {        
  62.                 switch (Buffer[9])      //根據手機輸入的鍵值不同,執行不同的內容
  63.                 {
  64.                         case '1':
  65.                                 P2 = 0x0;//點亮所有燈
  66.                                 break;
  67.                         case '2':
  68.                                 P2 = 0xff;//熄滅所有燈
  69.                                 break;
  70.                         case '3':
  71.                                 M1 = 1;//馬達轉
  72.                                 break;
  73.                         case '4':
  74.                                 M1 = 0;//馬達停
  75.                                 break;
  76.                         case '5':
  77.                                 BuzzerOnOff();//蜂鳴器叫
  78.                         break;
  79.                         case '6':
  80.                                 //蜂鳴器靜
  81.                                 break;
  82.                         case '7':
  83.                                 MatrixDisplay(gZhu);//點陣亮
  84.                                 break;
  85.                         case '8':
  86.                                 //點陣滅
  87.                                 break;
  88.                         case '9'://發送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);//確定發送數據長度(5個字節)
  98.                                 delay1ms(10);
  99.                                 UartSendBytes(temps);//發送溫度數據
  100.                                 Buffer[9] = 'x';
  101.                                 P2 = 0x55;
  102.                                 break;
  103.                         default:
  104.                                 break;
  105.                 }
  106.         }
  107. }


  108. /********************************************************************
  109. * 名稱 : Delay_1ms()
  110. * 功能 : 延時子程序,延時時間為 1ms * x
  111. * 輸入 : x (延時一毫秒的個數)
  112. * 輸出 : 無
  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. * 函 數 名       : Hc595SendByte
  124. * 函數功能                 : 通過74HC595串行移位發送一個字節出去
  125. * 參數列表       : dat - 待發送的字節數據
  126. * 函數輸出             : 無
  127. *********************************************************************/
  128. void Hc595SendByte(u8 dat)
  129. {
  130.         u8 i = 0, j = 0;

  131.         SCK = 0;                                // 將SCK置為初始狀態
  132.         RCK = 0;                                // 將RCK置為初始狀態

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

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

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

  146. /*********************************************************************
  147. * 函 數 名       : MatrixDisplay
  148. * 函數功能                 : 循環刷新顯示字模到點陣上
  149. * 參數列表       : zimo - 待顯示的字模數組
  150. * 函數輸出             : 無
  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]);                // 發送段選數據
  162.                         Hc595SendByte(0x00);                  // 消隱
  163.                 }
  164.                 j++;//gai
  165.                 if(j==200)//gai
  166.                 {
  167.                         break;
  168.                 }       
  169.         }
  170. }



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


  195. /********************************************************************
  196. * 名稱 : UartInit()
  197. * 功能 : 串口初始化,注意波特率是2400
  198. * 輸入 : 無
  199. * 輸出 : 無
  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. * 函 數 名       : BuzzerOnOff
  214. * 函數功能                 : 給蜂鳴器開關各一段時間
  215. * 參數列表       : 無
  216. * 函數輸出             : 無
  217. *********************************************************************/
  218. void BuzzerOnOff(void)
  219. {
  220.         gBuz = 1;
  221.         delay1ms(1);
  222.         gBuz = 0;
  223.         delay1ms(1);
  224. }


  225. /*********************************************************************
  226. * 函 數 名       : UartSendBytes
  227. * 函數功能                 : 通過串口往外發送數據
  228. * 參數列表       : uchar *c,要發的數據
  229. * 函數輸出             : 無
  230. *********************************************************************/
  231. void UartSendBytes(u8 *c)//串口發送數據
  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. * 函 數 名       : TempDisplayTest
  246. * 函數功能                 : 通過串口往外發送數據
  247. * 參數列表       : 無
  248. * 函數輸出             : u16 tDisp,最終的溫度值
  249. *********************************************************************/
  250. u16 TempDisplayTest(void)
  251. {
  252.         u16 temp = 0;                                         // 用來暫存12位的AD值
  253.         u8 tmh = 0, tml = 0;                        // 用來暫存2個8位的AD值
  254.         u16 tDisp = 0;                                        // 用來存儲乘以100倍后的溫度值
  255.         double t = 0;                                        // 用來存儲轉換后以攝氏度為單位的溫度值

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

  260.         temp = tml | (tmh << 8);                // 默認是12位分辨率,前面4個S位是符號位
  261.        
  262.         // 正溫度時符號位為0,下面代碼計算沒有考慮負溫度情況,因為我們實驗是在
  263.         // 室溫下做的,如果要考慮到負溫度的情況,代碼中要先判斷S位,若S位為1則
  264.         // 必須點去掉S的1再計算,計算后的值加負號即可。
  265.         t = temp * 0.0625;
  266.         tDisp = (u16)(t * 100);                        // 為方便顯示將溫度值乘以100后強轉為u16
  267.         return tDisp;
  268. }
復制代碼

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


評分

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

查看全部評分

本帖被以下淘專輯推薦:

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久乐国产精品 | 国产精品免费一区二区 | 国产精品免费一区二区三区 | 欧美成人自拍 | 日韩综合在线 | 久久一级免费视频 | 大学生a级毛片免费视频 | 久久高清精品 | 久久精品一区二区视频 | 久久精品国产免费 | 欧美日韩在线免费观看 | 午夜在线小视频 | 日韩视频一区二区三区 | 一级黄色影片在线观看 | 成人免费黄色 | 欧美成年黄网站色视频 | 成年人的视频免费观看 | 国产高清在线精品一区二区三区 | 日韩一二区 | 国产在线高清 | 久久69精品久久久久久国产越南 | 精品乱码久久久久 | 九九av | 国产精品福利视频 | 精品国产乱码久久久久久丨区2区 | 华人黄网站大全 | 视频在线一区二区 | 综合久久av | 成年人在线观看 | 在线观看av网站 | 综合成人在线 | 黄色精品 | 国产999精品久久久 午夜天堂精品久久久久 | 免费一级淫片aaa片毛片a级 | 国产精品综合 | www.日韩欧美 | 日韩和的一区二区 | 99re66在线观看精品热 | 精品欧美一区二区三区久久久小说 | 一本一道久久a久久精品综合蜜臀 | 日韩欧美在线视频播放 |