1、基本實現方案: 主機:單片機模擬單總線協議與DS18B20通信采集溫度值,并通過串口將數據發送給zigbee模塊。 從機:單片機通過串口接收zigbee接收到的溫度值,然后將溫度值送到模擬iic協議的數據區,并在顯示器上顯示出來。 2、使用到元件; Stc89c52單片機、11.0592Mhz晶振、22pf瓷片電容、10k電阻、10uf電解電容、按鍵。 Zigbee 通信模塊E18_MS1_PCB DS18B20溫度傳感器 Oled12864顯示器 0.96寸iic通信 蜂鳴器+9013三極管
TM16374位數碼管顯示模塊 3、電路原理圖:
zigbee通信原理圖.png (84.28 KB, 下載次數: 68)
下載附件
2021-5-5 16:23 上傳
4、電路方案: 主機電路由單片機最小系統、DS18B20數字溫度傳感器、zigbee無線通信模塊、數碼管顯示模塊組成。 從機電路由單片機最小系統、zigbee無線通信模塊、oled顯示模塊、蜂鳴器報警電路組成。
注意事項:51單片機只有一個串口(P3.0,P3.1),下載程序端口與zigbee通信端口復用,會導致zigbee連接失敗,在打開電源之前將串口引腳上的跳線帽拔掉,在單片機完成初始化后再將跳線帽插回。(我估計是這個問題,但也沒有好的解決辦法,希望各路大師提提意見)
制作出來的實物圖如下:
完整版01.jpg (5.53 MB, 下載次數: 74)
下載附件
2021-5-5 16:23 上傳
單片機源程序如下:
- #include <REG52.H>
- #include <stdio.h>
- #include "oled.h"
- #include "bmp.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit AT_MODE = P2^3; //zigbee通信模式選擇
- sbit REST = P1^7; //zigbee復位引腳
- sbit PBB = P2^4; //蜂鳴器
- uchar flag = 0;
- uchar index = 0;
- uchar data c[4] ="0000";
- uchar code str[]="123789";
- uchar num_10,num_1,num_0;
- void Send_string(uchar *c)
- {
- while(*c != '!')
- {
- SBUF=*c;
- c++;
- while(TI==0);
- TI=0;
- }
- }
- void Send_data(uchar str)
- {
- SBUF=str;
- while(TI==0);
- TI=0;
- }
- void Send_str(uchar *s)
- {
- while(*s)
- {
- Send_data(*s++);
- }
- }
- void Send_init()
- {
- EA=1;ES=1; //開總中斷和串行口中斷
- TMOD = 0x20; //設置定時計數器位方式2
- TH1 = 0xfd; // 設置波特率為9600
- TL1 = 0xfd;
- TR1 = 1; //啟動定時計數器
- SCON = 0x50; //設置串口為方式2
- PCON = 0x00; //波特率不加倍 AT+MODE=?
- // TI=1;
- }
- void zigbee_init()
- {
- AT_MODE = 1; //AT指令模式
- Send_str("AT+UART=2"); //設置波特率9600
- Delay_1ms(1000);
- Send_str("AT+DEVE=E"); //終端 模式
- Delay_1ms(1000);
- Send_str("AT+MODE=3"); //協議模式
- Delay_1ms(1000);
- Send_str("AT+PANID=55AA");//設置ID號
- Delay_1ms(1000);
- Send_str("AT+RESET"); //復位
- Delay_1ms(5000);
- }
- void main(void)
- {
- u8 t,temp;
- t=' ';
- REST = 0;
- Delay_1ms(100);
-
- OLED_Init(); //初始化OLED
- Send_init();
- zigbee_init();
- REST = 1;
- //顯示圖片
- OLED_DrawBMP(0,0,128,8,BMP1); //圖片顯示(圖片顯示慎用,生成的字表較大,會占用較多空間,FLASH空間8K以下慎用)
- Delay_1ms(2000);
- OLED_Clear();
-
- while(1)
- {
- num_10= c[0];
- num_1 = c[1];
- num_0 = c[2];
-
- OLED_ShowString(0,0,"DS18B20 zigbee",16);
- OLED_ShowString(0,3,"TEMP:",16);
- OLED_ShowChar(50,3,num_10,16);
- OLED_ShowChar(58,3,num_1,16);
- OLED_ShowChar(68,3,'.',16);
- OLED_ShowChar(76,3,num_0,16);
- //temp = ((num_10-31)*10)+(num_1-31);
- if(num_10 >= '3')PBB=1; //溫度大于30 開蜂鳴器
- else PBB=0;
-
- }
- }
-
- //串口接收中斷函數
- void Serial_INT() interrupt 4
- {
- if(RI==0) return;
- ES=0; //關閉串口中斷
- RI=0; //清接收中斷標志
- c[index++]=SBUF;
- if(SBUF == '!')
- {
- flag = 1;
- index= 0;
- }
- ES=1;
- }
-
復制代碼
51hei.png (1.97 KB, 下載次數: 76)
下載附件
2021-5-5 17:10 上傳
所有資料51hei提供下載:
51zigbee程序代碼.zip
(165.38 KB, 下載次數: 77)
2021-5-5 16:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|