基于DS18B20溫度傳感器的HC-SR04超聲波模塊與溫度報警的藍牙連接 一:前言: 這個小項目算是我硬件學習的入門吧,我把其中的問題與大家分享一下,同樣作為入門的一員 功能:(1)基于溫度值算出聲速從而計算障礙物的距離 (2)設定額定溫度,超過額定溫度五次發出警告
效果圖:
發送“99”后,重置 輸入合法溫度值后,Distance為0是因為前方無障礙
A.png (80.12 KB, 下載次數: 72)
下載附件
2019-10-19 19:58 上傳
V.png (135.38 KB, 下載次數: 70)
下載附件
2019-10-19 19:58 上傳
二:項目的簡單介紹 這個工程總共分為四個模塊:顯示模塊1602;溫度模塊DS18B20;;超聲波模塊HC- SR04; 藍牙模塊HC-06; 顯示模塊1602,大家應該都比較清晰,這里不做過多描述。 附錄代碼: - #include<reg52.h> // 由于液晶我們這里只寫不讀,所以RW直接接地
- sbit dula = P2^;
- sbit wela =P2^; // 倆鎖存器,觀看各自原理圖是否有
- sbit RS = P3^;
- sbit LCDEN =P3^; // RS與lcden接口
- void writeComm(ucharcomm) // 寫指令
- {
- RS = 0;
- P0 = comm;
- LCDEN = 1;
- delayMs(1);
- LCDEN = 0;
- delayMs(1);
- }
-
- void writeData(uchardat) //寫數據:RS=1, RW=0;
- {
- RS = 1;
- P0 = dat;
- LCDEN = 1;
- delayMs(1);
- LCDEN = 0;
- delayMs(1);
- }
- void init()
- {
- dula = wela = 0;
- writeComm(0x38);
- writeComm(0x0c);
- writeComm(0x06);
- writeComm(0x01);
-
- }
復制代碼 溫度模塊:DS18B20模塊,不過多描述,想要說一下負溫度的計算與讀取,網上資料也比較多一些。首先要了解,LS(低字節)的高四位 和 MS(高字節)的低四位共8個字節構成了實際的一個帶符號位的字節數據可以表示18B20的溫度范圍。MS的高四位為符號為的擴展,當溫度值為正時MS高5位全為0,溫度值為負時全為1。第一種:讀取的溫度為負數時,MS高五位全1,我們已經得到十六位數據value, 如果value<0x0fff,則為正,反之為負數 第二種:Hvalue&0x1f==1,為負溫度,Hvalue為MS; 代碼如下:
超聲波模塊:HC-SR04模塊 具體可以看模塊說明書 附錄代碼,主要看注釋 其中要了解的基礎知識點:(1)‘\0’與‘0’ 1)’\0’,就是空字符,代表字符串結束的標志。對應的ASCLL碼是0(NULL) 2)’0’,字符常量,表示字符0,對應的ASCLL碼是48,也就是0x30
(2)單片機內不同進制數計算 運算時機器都是轉換為二進制計算,所以書寫沒有必要轉換為統一的進制表達
藍牙模塊:HC-06 主要介紹見代碼,AT指令集可以查使用手冊 - void init_uart_and_HC() // 串口與HC模塊的初始化
- {
- TMOD=0X21; //設置定時器模式
- PCON=0X00; //設置電源寄存管理器
- SCON=0x50; //串行口控制管理器
- TH1=0XFD;
- TL1=0XFD;
- //設定9600波特率
- TH0=0XFC;
- TL0=0X66;
- //對HC-SR04所用定時器賦初值
- TR1=1;
- ET0=1;
- EA=1;
- ES=1;
- }
- void uart_senddata(char dat) // 串口發送單位數據
- {
- ES=0;
- SBUF=dat;
- while(!TI);
- TI=0;
- ES=1;
- }
- void uart_sendstr(char *p) // 串口發送字符串
- {
- ES=0;
- do
- {
- uart_senddata(*p);
- }
- while(*p++!='\0');
- ES=1;
- }
- void delayUs()
- {
- _nop_();
- }
- void delayMs(uint a)
- {
- uint i, j;
- for(i = a; i > 0; i--)
- for(j = 110; j > 0; j--);
- }
復制代碼主函數:
整體思想: (1) mode,flag為主要參數,mode決定是否進入運行,是否響應 (2) 對輸送數據的發送接收要清晰
可以改進的幾點: (1) 設定溫度可以到小數點后倆位,提高精確度,只需要加一個判斷小數點的函數 (2) 可以將功能提高一些,比如判斷距離或其他 |