AT89C51超聲波測距系統(SRF04)+溫度補償+報警電路+LCD1602顯示(帶詳盡程序注釋)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
NZU(F8AT0{~0CSDJS42Y)GX.png (36.42 KB, 下載次數: 62)
下載附件
測距+溫度補償+報警電路
2020-6-21 11:31 上傳
單片機源程序如下:
- #include "config.h"
- #include "delay.h"
- #include "lcd1602.h"
- #include "ds18b20.h"
- #include "chaoshengbo.h"
- /******************************************************************************/
- // 數組定義
- /******************************************************************************/
- uint8 lcd1602Table1[8]={0x00,0x06,0x09,0x09,0x06,0x00,0x00,0x00};//構造溫度符號
- uint8 lcd1602Table2[7]={'0','0','0','.','0','0','\0'}; //存放需要顯示的溫度信息
- uint8 disbuff[4]={'0','0','0','\0'};//存放需要顯示的距離數字
- uint16 max,min,average=0;//最大值、最小值變量定義
- uint16 S[10]; //存放每次計算的距離信息
- uint16 time=0; //存放時間差
- uint8 tempflag;//溫度正負標志位
- float temp1;//存放每次測量的溫度信息
- bit flag1=0;//定時器時間溢出標志位
- /******************************************************************************/
- // main函數
- /******************************************************************************/
- int main(void){
- beep=0; //揚聲器初始化
- Lcd1602_Init(); //液晶初始化
- while(Ds18b20_Init())
- Lcd1602_Show_String(1,1,"NO SENSOR!");//初始化檢測總線上是否有DS18B20
- Lcd1602_Show_String(1,1,"Initial OK");
- Lcd1602_Write_Cmd(0x01); //清屏LCD1602
- Lcd1602_Custom_Char(1,10,0,lcd1602Table1);//構造溫度符號,位置為第1行第10列
- Lcd1602_Show_String(1,11,"C");
- Lcd1602_Show_String(1,1,"T:");//溫度字母“T”
- Lcd1602_Show_String(2,1,"h:");//距離字母“h”
- Lcd1602_Show_String(2,6,"cm");//單位cm
-
- while(1){
- Ds18b20_Get_Temp(lcd1602Table2); //讀取溫度
- if(tempflag==0)
- {
- Lcd1602_Show_String(1,3,"+"); //顯示正號
- Lcd1602_Show_String(1,4,lcd1602Table2);//顯示溫度
- }
- else
- {
- Lcd1602_Show_String(1,3,"-"); //顯示負號
- Lcd1602_Show_String(1,4,lcd1602Table2);//顯示溫度
- }
- super_distance(disbuff); //超聲波測距
- Lcd1602_Show_String(2,3,disbuff);//顯示距離
- }
- }
復制代碼
所有資料51hei提供下載:
超聲波測距.zip
(94.61 KB, 下載次數: 200)
2020-6-21 11:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|