1、基本實現方案:
主機:單片機模擬單總線協議與DS18B20通信采集溫度值,并通過串口將數據發送給zigbee模塊。
從機:單片機通過串口接收zigbee接收到的溫度值,然后將溫度值送到模擬iic協議的數據區,并在顯示器上顯示出來。
2、使用到元件;
Stc89c52單片機、11.0592Mhz晶振、22pf瓷片電容、10k電阻、10uf電解電容、按鍵。
Zigbee 通信模塊E18_MS1_PCB
DS18B20溫度傳感器
Oled12864顯示器 0.96寸iic通信
蜂鳴器+9013三極管
TM16374位數碼管顯示模塊
3、電路原理圖:
1.png (95.95 KB)
下載附件
2021-5-5 23:07 上傳
4、電路方案:
主機電路由單片機最小系統、DS18B20數字溫度傳感器、zigbee無線通信模塊、數碼管顯示模塊組成。
從機電路由單片機最小系統、zigbee無線通信模塊、oled顯示模塊、蜂鳴器報警電路組成。
注意事項:51單片機只有一個串口(P3.0,P3.1),下載程序端口與zigbee通信端口復用,會導致zigbee連接失敗,在打開電源之前將串口引腳上的跳線帽拔掉,在單片機完成初始化后再將跳線帽插回。(我估計是這個問題,但也沒有好的解決辦法,希望各路大師提提意見)
制作出來的實物圖如下:
2.png (382.69 KB)
下載附件
2021-5-5 23:08 上傳
部分源碼:完整源碼見附件
- #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;
- }
復制代碼 完整源碼:
51zigbee程序代碼.zip
(165.38 KB, 售價: 2 E幣)
2021-5-5 23:09 上傳
點擊文件名下載附件
售價: 2 E幣 [記錄]
[ 購買]
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|
|