52 基于單片機的超聲波、溫濕度、光照檢測分階段報警

目錄

一、主要功能

二、硬件資源

三、程序編程

四、實現現象


一、主要功能

1.通過DHT11模塊讀取環境溫度和濕度:
2.將濕度、障礙物距顯示在lcd1602上面,第一行顯示溫度和濕度,格式為:xx°Cyy%,第二行顯示超聲波傳感器測得的距離,格式為:Distance: zzz CM:
3.判斷距離是否超過設定閾值,默認閾值為150cm,當測得距離低于150cm時,蜂鳴器長鳴,LED1(黃燈)閃爍,直至恢復安全距離以上:當濕度大于65%時,蜂鳴器間斷報警(需與剛才報警聲有明顯區別),不對LED1進行操作,如果距離和濕度兩個同時滿足報警條件時,距離報警優先。
4.LDR模塊用于檢測環境光亮度,將光敏電陽模擬信號通過ADC0832轉換為數字信號傳遞給單片機,當亮度低于50時自動打開LED2(紅色)常亮。
5.設置模塊,由三個按鍵組成,用于修改距離閾值,當點擊按鍵1時進入閾值設置模式,進入設置模式后點擊按鍵2增大閾值,點擊按鍵了減小閾值,每次變化幅度為1,lcd顯示實時顯示設置情況,Set Distance:sss CM,當設置完畢再次點擊按鍵1會退出設置模式并保存剛才設定的閩值,lcd恢復原來的顯示內容

二、硬件資源

基于KEIL5編寫C++代碼,PROTEUS8.15進行仿真,全部資源在頁尾,提供安裝包。

編輯

三、程序編程

#include?<REGX52.H>#include?<intrins.h>#include?<stdio.h>#include?"Delay.h"#include?"LCD1602.h"#define?uchar?unsigned?char#define?uint?unsigned??inttypedef?unsigned?char?u8;typedef?unsigned?int??u16;typedef?unsigned?char?uint8;typedef?unsigned?int?uint16;typedef?unsigned?long?uint32;
sbit?CS=P1^0;??????
sbit?CLK=P1^1;
sbit?DIO=P1^2;
sbit?Tr=P3^5;//觸發信號sbit?Ec=P3^6;//回響信號sbit?Temp_data=P2^6;??				//DHT11sbit?beep?=?P1^3;
sbit?key1?=?P1^4;
sbit?key2?=?P1^5;
sbit?key3?=?P1^6;
sbit?led?=?P3^7;static?int?jlyz?=?150;
uchar?Recv_Buffer\[4\];
uint?Voltage\[\]={'0','0','0','0'};
bit?bdata?IIC\_ERROR;unsigned?int?distance;unsigned?int?Read\_value(void);//讀值函數static?double?u;unsigned?char?rec\_dat\_lcd0\[6\];unsigned?char?rec\_dat\_lcd1\[6\];unsigned?char?rec\_dat\_lcd2\[6\];unsigned?char?rec\_dat\_lcd3\[6\];unsigned?int?rec_dat\[4\];	
static?int?wd,sd;static?int?flag1=0,flag2=0,flag?=?0;static?int?ymflag=0;static?int?flag3=0;void?DHT11\_delay\_us(unsigned?char?n);void?DHT11\_delay\_ms(unsigned?int?z);void?DHT11\_start();unsigned?char?DHT11\_rec\_byte();void?DHT11\_receive();void?Delay10us(void);//10us延時函數void?display();void?canshu();void?ajpd();void?Time0_Init()??????????//定時器初始化{TMOD?=?0x21;TH0?=?0x00;TL0?=?0x00;TR0?=?0;//先關閉定時器0}void?Time0_Int()?interrupt?1?//中斷程序{TH0??=?0xfe;?????????????//重新賦值TL0??=?0x33;
}unsigned?int?Read_value(){uint?result;Tr=1;//觸發引腳發出11us的觸發信號(至少10us)Delay10us();Tr=0;	while(!Ec);//度過回響信號的低電平TR0=1;//開啟定時器0while(Ec);//度過回響信號高電平TR0=0;//關閉定時器0result=((TH0\*256+TL0)\*0.034)/2;		//?距離cm=(時間us?*?速度cm/us)/2return?result?+?2;	//+2修正補償	}//延時msvoid?DHT11\_delay\_ms(unsigned?int?z){????unsigned?int?i,j;????for(i=z;?i>0;?i--)????????for(j=110;?j>0;?j--);
}//延時us???--2*n+5usvoid?DHT11\_delay\_us(unsigned?char?n){????while(--n);
}//DHT11起始信號void?DHT11_start(){Temp\_data=1;????DHT11\_delay_us(10);Temp\_data=0;????DHT11\_delay_ms(50);//這個延時不能過短,18ms以上,實際在仿真當中要想讀到數據延時要在延時參數要在40以上才能出數據Temp\_data=1;????DHT11\_delay\_us(30);//這個延時不能過短}//接收一個字節unsigned?char?DHT11\_rec_byte(){????unsigned?char?i,dat=0;????for(i=0;?i<8;?i++){????????while(!Temp\_data);????????DHT11\_delay_us(8);dat?<<=1;????????if(Temp_data==1){dat?+=1;}????????while(Temp_data);}????return?dat;
}//接收溫濕度數據void?DHT11\_receive(){????unsigned?int?R\_H,R\_L,T\_H,T\_L;????unsigned?char?RH,RL,TH,TL,revise;????DHT11\_start();Temp\_data=1;????if(Temp\_data==0){????????while(Temp_data==0);???//等待拉高DHT11\_delay\_us(40);??//拉高后延時80usR\_H=DHT11\_rec_byte();????//接收濕度高八位R\_L=DHT11\_rec_byte();????//接收濕度低八位T\_H=DHT11\_rec_byte();????//接收溫度高八位T\_L=DHT11\_rec_byte();????//接收溫度低八位revise=DHT11\_rec\_byte();?//接收校正位DHT11\_delay\_us(25);????//結束if((R\_H+R\_L+T\_H+T\_L)==revise)??????//校正{RH=R_H;RL=R_L;TH=T_H;TL=T_L;}????????/*數據處理,方便顯示*/rec_dat\[0\]=RH;rec_dat\[1\]=RL;rec_dat\[2\]=TH;rec_dat\[3\]=TL;}}void?dht11(){	??????DHT11\_delay\_ms(150);????????DHT11\_receive();	??????sprintf(rec\_dat\_lcd0,"%d",rec\_dat\[0\]);????????sprintf(rec\_dat\_lcd1,"%d",rec\_dat\[1\]);????????sprintf(rec\_dat\_lcd2,"%d",rec\_dat\[2\]);????????sprintf(rec\_dat\_lcd3,"%d",rec\_dat\[3\]);????????DHT11\_delay_ms(100);	?sd?=?rec\_dat\[1\]*10?+?rec\_dat\[0\];wd?=?rec\_dat\[3\]*10?+?rec\_dat\[2\];
}uchar?get\_AD\_Res()????????????//ADC0832啟動讀取函數{uchar?i,?data1=0,?data2=0;CS=0;CLK=0;DIO=1;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_();?CLK=1;\_nop\_();CLK=0;DIO=0;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_();?for(i=0;?i<8;?i++){CLK=1;\_nop\_();CLK=0;\_nop\_();data1=(data1<<1)|(uchar)DIO;?}	for(i=0;?i<8;?i++){data2=data2|(uchar)DIO<<i;CLK=1;\_nop\_();CLK=0;\_nop\_();}CS=1;	return(data1?==?data2)?data1:0;
}void?beep_warning(){	if(distance?<?jlyz){flag1?=?1;}	else{flag1?=?2;}	if(sd?>?65){flag2?=?3;}	else{flag2?=?4;}flag?=?flag1?*?flag2;	if(flag?==?3?||?flag?==?4){beep?=~?beep;		Delay(500);}	else?if(flag?==?6){beep?=~?beep;		Delay(100);}	else?if(flag?==?8){beep?=?1;}	if(u>=50){led?=?0;}	else{led?=?1;}
}void?main()					??//主函數{	Tr=0;???????????????//出發引腳首先拉低LCD_Init();?????????//顯示屏初始化Time0_Init();	???//定時初始化beep?=?1;led?=?0;	while(1){		canshu();??//參數獲取display();??//顯示beep_warning();//報警ajpd();??//按鍵判斷}
}void?ajpd(){	if(key1==0){		Delay(100);		if(key1?==?0){			LCD_Init();?????????//顯示屏初始化ymflag++;			if(ymflag>1){ymflag?=?0;}}}	if(key2==0){		Delay(100);		if(key2?==?0){jlyz++;}}	if(key3==0){		Delay(100);		if(key3?==?0){jlyz--;}}
}void?canshu()?{distance?=?Read_value();//讀值distance+=12;	?dht11();?//溫濕度獲取u=get\_AD\_Res();u?=?(u/177)*50;}void?display(){	if(ymflag?==?0){	??LCD_ShowNum(2,10,distance,3);?//顯示距離LCD\_ShowNum(1,1,wd,2);	??LCD\_ShowNum(1,7,sd,2);flag3?=?0;}	else?if(ymflag?==?1){		LCD_ShowNum(2,1,jlyz,3);?//顯示距離flag3?=?1;}	if(flag3?==?0){	LCD_ShowString(2,1,"Distance:");?//顯示字符串DistanceLCD_ShowString(2,14,"CM");?//顯示字符串DistanceLCD_ShowString(1,3,"C");?//顯示字符串DistanceLCD_ShowString(1,9,"%");?//顯示字符串Distanceflag3?=?2;}	else?if?(flag3?==?1){		LCD_ShowString(1,1,"SetDistance");?//顯示字符串DistanceLCD_ShowString(2,4,"CM");flag3?=?2;}
}	
//	void?Delay10us(){TL0=0xF5;TH0=0xFF;TR0=1;	while?(TF0==0);TR0=0;TF0=0;
}

四、實現現象

具體動態效果看B站演示視頻:

基于單片機的超聲波、溫濕度、光照檢測分階段報警_嗶哩嗶哩_bilibili

全部資料(源程序、仿真文件、安裝包、演示視頻):

http://?https://pan.baidu.com/s/1nZjWADtV0UnN-OcZPSpc1Q?pwd=rqn5

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/web/63266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63266.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據與AI:從分析到預測的躍遷

引言&#xff1a;數據時代的新紀元 從每天的社交分享到企業的運營決策&#xff0c;數據早已成為現代社會不可或缺的資源。我們正置身于一個數據爆炸的時代&#xff0c;數以億計的信息流實時生成&#xff0c;為人類帶來了前所未有的洞察能力。然而&#xff0c;數據的價值并不僅限…

3D視覺[一]3D計算機視覺

3D視覺[一]3D計算機視覺 3D計算機視覺概述 像機標定 文章目錄 3D視覺[一]3D計算機視覺前言一、人類視覺二、計算機視覺2.1 計算機視覺的研究目的2.2 計算機視覺的研究任務2.3 計算機視覺的研究方法2.4 視覺計算理論2.5 馬爾框架中計算機視覺表達的四個層次2.5.1 圖像&#xff…

OpenCV目標檢測 級聯分類器 C++實現

一.目標檢測技術 目前常用實用性目標檢測與跟蹤的方法有以下兩種&#xff1a; 幀差法 識別原理&#xff1a;基于前后兩幀圖像之間的差異進行對比&#xff0c;獲取圖像畫面中正在運動的物體從而達到目標檢測 缺點&#xff1a;畫面中所有運動中物體都能識別 舉個例子&#xf…

QT從入門到精通(二) ——信號與槽機制

Qt 的信號與槽機制&#xff08;Signal and Slot&#xff09;是 Qt 框架 中用于對象間通信的核心機制之一。它允許對象之間進行松耦合的事件驅動式通信&#xff0c;尤其適合 GUI 應用程序 中的事件處理。 1. 基本概念 信號 (Signal) 當對象的狀態發生變化時&#xff0c;它會發…

如何使用git新建本地倉庫并關聯遠程倉庫的步驟(詳細易懂)

一、新建本地倉庫并關聯遠程倉庫的步驟 新建本地倉庫 打開終端&#xff08;在 Windows 上是命令提示符或 PowerShell&#xff0c;在 Linux 和Mac上是終端應用&#xff09;&#xff0c;進入你想要創建倉庫的目錄。例如&#xff0c;如果你想在桌面上創建一個名為 “my - project”…

1Panel應用推薦:MaxKB開源知識庫問答系統

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款現代化、開源的Linux服務器運維管理面板&#xff0c;它致力于通過開源的方式&#xff0c;幫助用戶簡化建站與運維管理流程。為了方便廣大用戶快捷安裝部署相關軟件應用&#xff0c;1Panel特別開通應用商店&am…

element plus的table組件,點擊table的數據是,會出現一個黑色邊框

在使用 Element Plus 的 Table 組件時&#xff0c;如果你點擊表格數據后出現了一個黑色邊框&#xff0c;這通常是因為瀏覽器默認的焦點樣式&#xff08;outline&#xff09;被觸發了。如圖&#xff1a; 你可以通過自定義 CSS 來隱藏這個黑色邊框&#xff0c;代碼如下&#xff1…

瀧羽sec學習打卡-brupsuite7搭建IP炮臺

聲明 學習視頻來自B站UP主 瀧羽sec,如涉及侵權馬上刪除文章 筆記的只是方便各位師傅學習知識,以下網站只涉及學習內容,其他的都 與本人無關,切莫逾越法律紅線,否則后果自負 關于brupsuite的那些事兒-Brup-IP炮臺搭建 搭建炮臺服務端安裝zmap1、更新系統和安裝基礎依賴&#xff…

赫布定律 | 機器學習 / 反向傳播 / 經驗 / 習慣

注&#xff1a;本文為 “赫布定律” 相關文章合輯。 未整理。 赫布定律 Hebb‘s law 馥墨軒 2021 年 03 月 13 日 00:03 1 赫布集合的基本定義 唐納德?赫布&#xff08;Donald Hebb&#xff09;在 1949 年出版了《行為的組織》&#xff08;The Organization of Behavior&a…

各個數據庫優劣勢對比

1.關系型數據庫&#xff08;RDBMS&#xff09; 優勢&#xff1a; ? 數據一致性&#xff1a;通過嚴格的事務處理和ACID&#xff08;原子性、一致性、隔離性、持久性&#xff09;特性&#xff0c;確保數據的一致性和完整性。 ? 易于理解和使用&#xff1a;關系型數據庫的表結構…

Excel中如何消除“長短款”

函數微調可以可以實施&#xff0c;簡單且易于操作的氣球&#x1f388;漲縮更妙。 (筆記模板由python腳本于2024年12月17日 06:19:13創建&#xff0c;本篇筆記適合用Excel操作數據的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網&#xff1a;https://www.python.org/ Fre…

Jdk1.7到Jdk1.8 HashMap 發生了什么變化(底層)

從JDK 1.7到JDK 1.8&#xff0c;HashMap在底層實現上發生了顯著的變化&#xff0c; 主要體現在數據結構、鏈表插入方式、哈希算法、擴容機制以及并發性方面。 以下是具體的變化點&#xff1a; 1. 數據結構的變化 JDK 1.7&#xff1a;HashMap的底層數據結構是數組單向鏈表。…

RJ45 網線線序、E1線線序、2B+d線序

1、RJ45 網線線序 線序排列如下&#xff1a; T568A線序&#xff1a;綠白—1&#xff0c;綠—2&#xff0c;橙白—3&#xff0c;藍—4&#xff0c;藍白—5&#xff0c; 橙—6&#xff0c;棕白—7&#xff0c;棕—8 T568B線序&#xff1a;橙白—1&#xff0c;橙—2&#xff0c…

FreeBSD安裝教程

FreeBSD 是一個功能強大且可靠的開源 UNIX 操作系統&#xff0c;適合服務器和桌面環境。本文將介紹如何安裝 FreeBSD&#xff0c;從系統準備到基礎設置&#xff0c;為你快速上手提供幫助。 一、準備工作 1. 硬件要求 CPU&#xff1a;支持 x86 或 AMD64 架構的處理器。 內存&a…

Fortify_SCA_v24.2.0

前言 Fortify SCA 支持豐富的開發環境、語言、平臺和框架&#xff0c;可對開發與生產混合環境進行安全檢查。25 種編程語言 超過 911,000 個組件級 API 可檢測超過 961 個漏洞類別 支持所有主流平臺、構建環境和 IDE。 Fortify SCA是一款商業軟件&#xff0c;價格較為昂貴&am…

MyBatis框架的入門

目錄 MyBatis第一章&#xff1a;框架的概述1. MyBatis框架的概述 第二章&#xff1a;MyBatis的入門程序1. 創建數據庫和表結構2. MyBatis的入門步驟 MyBatis 第一章&#xff1a;框架的概述 1. MyBatis框架的概述 MyBatis是一個優秀的基于Java的持久層框架&#xff0c;內部對…

rust的axux框架開啟負載均衡和重啟自身的方法-會議簽到的調優

開啟負載均衡和重啟自身 更換axum后臺的意外解決的嘗試在caddy反代,使用負載均衡,加多一個節點axum主程序 ip映射信息做全局共享axum重啟自身刷新全局共享配置 前期剛實現了rust的后臺關鍵業務.結果出現了兩類大問題停止服務.在正用著的時候,出現很多意外,真是刺激… 更換axum…

深入理解數據庫索引:原理、分類與優化

目錄 1. 索引基礎1.1 索引的工作原理 2. 最左匹配原則2.1 什么是最左匹配原則&#xff1f;2.2 示例說明2.3 最左匹配原則的圖示 3. 索引分類3.1 按數據結構分類3.2 按索引列數分類3.3 按唯一性分類3.4 按存儲方式分類 4. 聚集索引與非聚集索引的區別4.1 聚集索引4.2 非聚集索引…

Three.js相機Camera控件知識梳理

原文&#xff1a;https://juejin.cn/post/7231089453695238204?searchId20241217193043D32C9115C2057FE3AD64 1. 相機類型 Three.js 主要提供了兩種類型的相機&#xff1a;正交相機&#xff08;OrthographicCamera&#xff09;和透視相機&#xff08;PerspectiveCamera&…

Bernstein-type inequality (BTI)

參見論文&#xff1a; Dual-Functional Artificial Noise (DFAN) Aided Robust Covert Communications in Integrated Sensing and Communications 理論 \boxed{} ?用于加框 Lemma 2. (BTI): For any A ∈ C N N \mathbf{A} \in\mathbb{C}^{N\times N} A∈CNN, b ∈ C N …