找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機zigbee通信代碼 E18_MS1_PCB+DS18B20

[復制鏈接]
跳轉到指定樓層
樓主
ID:372241 發(fā)表于 2021-5-5 16:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1、基本實現(xiàn)方案:
       主機:單片機模擬單總線協(xié)議與DS18B20通信采集溫度值,并通過串口將數(shù)據(jù)發(fā)送給zigbee模塊。
       從機:單片機通過串口接收zigbee接收到的溫度值,然后將溫度值送到模擬iic協(xié)議的數(shù)據(jù)區(qū),并在顯示器上顯示出來。
2、使用到元件;
Stc89c52單片機、11.0592Mhz晶振、22pf瓷片電容、10k電阻、10uf電解電容、按鍵。
Zigbee 通信模塊E18_MS1_PCB
DS18B20溫度傳感器
Oled12864顯示器 0.96寸iic通信
蜂鳴器+9013三極管

TM16374位數(shù)碼管顯示模塊
3、電路原理圖:


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

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

制作出來的實物圖如下:

單片機源程序如下:

  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;            //設置定時計數(shù)器位方式2
  43.         TH1  = 0xfd;            // 設置波特率為9600
  44.         TL1  = 0xfd;            
  45.         TR1  = 1;                    //啟動定時計數(shù)器
  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");    //協(xié)議模式
  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);  //圖片顯示(圖片顯示慎用,生成的字表較大,會占用較多空間,F(xiàn)LASH空間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. //串口接收中斷函數(shù)
  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. }

  112.         
復制代碼

所有資料51hei提供下載:
51zigbee程序代碼.zip (165.38 KB, 下載次數(shù): 77)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1053252 發(fā)表于 2024-3-18 22:45 | 只看該作者
大佬你好,可以請教你幾個問題嗎?
回復

使用道具 舉報

板凳
ID:522456 發(fā)表于 2024-8-14 17:37 | 只看該作者
參考看看
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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