国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

51單片機zigbee通信C語言代碼 E18_MS1+DS18B20

[復制鏈接]
樓主
1、基本實現方案:
       主機:單片機模擬單總線協議與DS18B20通信采集溫度值,并通過串口將數據發送給zigbee模塊。
       從機:單片機通過串口接收zigbee接收到的溫度值,然后將溫度值送到模擬iic協議的數據區,并在顯示器上顯示出來。
2、使用到元件;
Stc89c52單片機、11.0592Mhz晶振、22pf瓷片電容、10k電阻、10uf電解電容、按鍵。
Zigbee 通信模塊E18_MS1_PCB
DS18B20溫度傳感器
Oled12864顯示器 0.96寸iic通信
蜂鳴器+9013三極管

TM16374位數碼管顯示模塊
3、電路原理圖:
51單片機zigbee通信C語言代碼 E18_MS1+DS18B20 1.png

4、電路方案:
主機電路由單片機最小系統、DS18B20數字溫度傳感器、zigbee無線通信模塊、數碼管顯示模塊組成。
       從機電路由單片機最小系統、zigbee無線通信模塊、oled顯示模塊、蜂鳴器報警電路組成。

       注意事項:51單片機只有一個串口(P3.0,P3.1),下載程序端口與zigbee通信端口復用,會導致zigbee連接失敗,在打開電源之前將串口引腳上的跳線帽拔掉,在單片機完成初始化后再將跳線帽插回。(我估計是這個問題,但也沒有好的解決辦法,希望各路大師提提意見)

制作出來的實物圖如下:
51單片機zigbee通信C語言代碼 E18_MS1+DS18B20 2.png

部分源碼:完整源碼見附件

  1. #include <REG52.H>
  2. #include <stdio.h>
  3. #include "oled.h"
  4. #include "bmp.h"

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7.         
  8. sbit  AT_MODE = P2^3; //zigbee通信模式選擇
  9. sbit  REST    = P1^7; //zigbee復位引腳
  10. sbit  PBB     = P2^4; //蜂鳴器

  11. uchar flag = 0;
  12. uchar index = 0;
  13. uchar data c[4] ="0000";
  14. uchar code str[]="123789";
  15. uchar num_10,num_1,num_0;

  16. void Send_string(uchar *c)
  17. {
  18. while(*c != '!')
  19. {
  20.   SBUF=*c;
  21.   c++;
  22.   while(TI==0);
  23.   TI=0;
  24. }
  25. }

  26. void Send_data(uchar str)
  27. {
  28.         SBUF=str;
  29.         while(TI==0);
  30.         TI=0;
  31. }

  32. void Send_str(uchar *s)
  33. {
  34.         while(*s)
  35.         {
  36.          Send_data(*s++);
  37.     }
  38. }
  39. void Send_init()
  40. {
  41.         EA=1;ES=1;                    //開總中斷和串行口中斷
  42.         TMOD = 0x20;            //設置定時計數器位方式2
  43.         TH1  = 0xfd;            // 設置波特率為9600
  44.         TL1  = 0xfd;            
  45.         TR1  = 1;                    //啟動定時計數器
  46.         SCON = 0x50;            //設置串口為方式2
  47.         PCON = 0x00;            //波特率不加倍                  AT+MODE=?
  48. //        TI=1;
  49. }

  50. void zigbee_init()
  51. {
  52.   AT_MODE = 1;        //AT指令模式
  53.   Send_str("AT+UART=2");   //設置波特率9600
  54.   Delay_1ms(1000);
  55.   Send_str("AT+DEVE=E");      //終端 模式
  56.   Delay_1ms(1000);
  57.   Send_str("AT+MODE=3");    //協議模式
  58.   Delay_1ms(1000);
  59.   Send_str("AT+PANID=55AA");//設置ID號
  60.   Delay_1ms(1000);
  61.   Send_str("AT+RESET");           //復位
  62.   Delay_1ms(5000);
  63. }

  64. void main(void)
  65. {        
  66.                 u8 t,temp;
  67.                  t=' ';
  68.         REST = 0;
  69.             Delay_1ms(100);
  70.                
  71.                 OLED_Init();                        //初始化OLED           
  72.                 Send_init();         
  73.                 zigbee_init();        
  74.         REST = 1;         
  75.             //顯示圖片
  76.                 OLED_DrawBMP(0,0,128,8,BMP1);  //圖片顯示(圖片顯示慎用,生成的字表較大,會占用較多空間,FLASH空間8K以下慎用)
  77.                 Delay_1ms(2000);
  78.                  OLED_Clear();
  79.          
  80.                 while(1)
  81.                 {        

  82.                   num_10= c[0];
  83.                   num_1 = c[1];
  84.                   num_0 = c[2];        
  85.                                    
  86.                         OLED_ShowString(0,0,"DS18B20 zigbee",16);
  87.                         OLED_ShowString(0,3,"TEMP:",16);
  88.                         OLED_ShowChar(50,3,num_10,16);
  89.                         OLED_ShowChar(58,3,num_1,16);
  90.                         OLED_ShowChar(68,3,'.',16);
  91.                         OLED_ShowChar(76,3,num_0,16);

  92.                         //temp = ((num_10-31)*10)+(num_1-31);
  93.                         if(num_10 >= '3')PBB=1;  //溫度大于30 開蜂鳴器
  94.                         else PBB=0;
  95.                
  96.                 }         
  97. }



  98. //串口接收中斷函數
  99. void Serial_INT() interrupt 4
  100. {
  101. if(RI==0) return;
  102. ES=0;        //關閉串口中斷
  103. RI=0;        //清接收中斷標志
  104. c[index++]=SBUF;
  105.     if(SBUF == '!')
  106.         {
  107.       flag = 1;
  108.           index= 0;
  109.         }
  110. ES=1;
  111. }
復制代碼
完整源碼: 51zigbee程序代碼.zip (165.38 KB, 售價: 2 E幣)

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

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 03:07

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表