基于AT89C51單片機超聲波水位液位控制系統設計(含文檔、源碼與proteus仿真,以及系統詳細介紹)

本篇文章論述的是基于AT89C51單片機的16×16點陣LED顯示器字符滾動顯示設計的詳情介紹,如果對您有幫助的話,還請關注一下哦,如果有資源方面的需要可以聯系我。

目錄

設計任務與要求

原理圖

仿真圖

代碼

系統論文

資源下載


設計任務與要求

設計一超聲波測距儀,任務:

  1. 了解超聲波測距原理。
  2. 根據超聲波測距原理,設計超聲波測距器的硬件結構電路。

設計一超聲波測距儀,要求:

  1. 設計出超聲波測距儀的硬件結構電路。
  2. 對設計的電路進行分析能夠產生超聲波,實現超聲波的發送與接收,從而實現利用超聲波方法測量物體間的距離。
  3. 對設計的電路進行分析。
  4. 以數字的形式顯示測量距離。

原理圖


仿真圖


代碼(部分)


#include <REG2051.H>
#define k1 P3_4
#define csbout??? P3_5????????????????? //超聲波發送
#define csbint??? P3_7????????????????? //超聲波接收
#define csbc=0.034
#define bg? P3_3 
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//顯示標識
unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段碼
unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1;
bit cl;????? void csbcj();
void delay(j);????????????????????????????? //延時函數
void scanLED();????????????????????????????? //顯示函數
void timeToBuffer();????????????????? //顯示轉換函數
void keyscan();
void k1cl();
void k2cl();
void k3cl();
void k4cl();
void offmsd();void main()????????????????????????????? //主函數
{EA=1;??????????????????????????????? //開中斷TMOD=0x11;?????????????????? //設定時器0為計數,設定時器1定時ET0=1;????????????????????????????? //定時器0中斷允許 ET1=1;????????????????????????????? //定時器1中斷允許 TH0=0x00;TL0=0x00;TH1=0x9E;TL1=0x57;csbds=0;csbint=1;csbout=1;cl=0;ōpto=0xff;jpjs=0;sj1=45;sj2=200;sj3=400;k4cl();TR1=1;??????????????????????? while(1){keyscan();if(jpjs<1){csbcj();if(s>sj3){buffer[2]=0x76;????? buffer[1]=0x76;????? buffer[0]=0x76;????? }else if(s<sj1){buffer[2]=0x40;?????buffer[1]=0x40;????? buffer[0]=0x40;}else timeToBuffer();????? }else timeToBuffer();??????????? //將值轉換成LED段碼offmsd();scanLED();????????????????? //顯示函數if(s<sj2)bg=0;bg=1;}
}void scanLED()?????????????????????? //顯示功能模塊
{
digit=0x04;for( i=0; i<3; i++)??????? //3位數顯示{P3=~digit&opto;??????? //依次顯示各位數P1=~buffer;??????? //顯示數據送P1口delay(20);????????????? //延時處理P1=0xff;???????????? //P1口置高電平(關閉)if((P3&0x10)==0)????? //判斷3位是否顯示完key=0;digit>>=1;???????????? //循環右移1位}
}
void timeToBuffer()??????????????? //轉換段碼功能模塊
{xm0=s/100;????? xm1=(s-100*xm0)/10;xm2=s-100*xm0-10*xm1;buffer[2]=convert[xm2];????? buffer[1]=convert[xm1];buffer[0]=convert[xm0];
}
void delay(i)????????????????????????????? 
{
while(--i);
}
void timer1int (void)? interrupt 3? using 2 
{TH1=0x9E;TL1=0x57;csbds++;if(csbds>=40){csbds=0;cl=1;}??????????? 
}
void csbcj()
{if(cl==1){TR1=0;TH0=0x00;TL0=0x00;i=10;while(i--){csbout=!csbout;}TR0=1;?????????????????i=mqs;????????????????????????????? //盲區while(i--){}i=0;while(csbint){i++;if(i>=2450)????????????????? //上限值csbint=0;}TR0=0;TH1=0x9E;TL1=0x57;t=TH0;t=t*256+TL0;s=t*csbc/2;TR1=1;cl=0;}
}
void keyscan()??????????????????????? //健盤處理函數
{xx=0;if(k1!=1)????????????????????????????? // 判斷開關是否按下{delay(400);??????????????????????? //延時去抖動if(k1!=1)????????????????????????????? // 判斷開關是否按下?????{??????????? while(!k1){delay(30);????xx++;}if(xx>2000)???????????{jpjs++;if(jpjs>4)jpjs=0;}xx=0;switch(jpjs){case 1: k1cl();break;?????????case 2: k2cl();break;case 3: k3cl();break;case 4: k4cl();break;}}}
}

系統論文


摘 ?要

隨著科技的發展,人們生活水平的提高,城市發展建設加快,城市給排水系統也有較大發展,其狀況不斷改善。但是,由于歷史原因合成時間住的許多不可預見因素,城市給排水系統,特別是排水系統往往落后于城市建設。因此,經常出現開挖已經建設好的建筑設施來改造排水系統的現象。城市污水給人們帶來了困擾,因此箱涵的排污疏通對大城市給排水系統污水處理,人們生活舒適顯得非常重要。而設計研制箱涵排水疏通移動機器人的自動控制系統,保證機器人在箱涵中自由排污疏通,是箱涵排污疏通機器人的設計研制的核心部分。控制系統核心部分就是超聲波測距儀的研制。因此,設計好的超聲波測距儀就顯得非常重要了。

本設計采用以AT89C51單片機為核心的低成本、高精度、微型化數字顯示超聲波測距儀的硬件電路和軟件設計方法。整個電路采用模塊化設計,由主程序、預置子程序、發射子程序、接收子程序、顯示子程序等模塊組成。各探頭的信號經單片機綜合分析處理,實現超聲波測距儀的各種功能。在此基礎上設計了系統的總體方案,最后通過硬件和軟件實現了各個功能模塊。相關部分附有硬件電路圖、程序流程圖。

經實驗證明,這套系統軟硬件設計合理、抗干擾能力強、實時性良好,經過系統擴展和升級,可以有效地解決汽車倒車、建筑施工工地以及一些工業現場的位置監控。

關鍵詞:AT89c51;?超聲波測距

Abstract

With the development of science and technology, the improvement of people's standard of living, speeding up the development and construction of the city. urban drainage system have greatly developed their situation is constantly improving. However, due to historical reasons many unpredictable factors in the synthesis of her time, the city drainage system. In particular drainage system often lags behind urban construction. Therefore, there are often good building excavation has been building facilities to upgrade the drainage system phenomenon. It brought to the city sewage, and it is clear to the city sewage and drainage culvert in the sewage treatment system. comfort is very important to people's lives. Mobile robots designed to clear the drainage culvert and the automatic control system Free sewage culvert clear guarantee robot, the robot is designed to clear the culvert sewage to the core. Control System is the core component of the development of ultrasonic range finder. Therefore, it is very important to design a good ultrasonic range finder. ??

At the core of the design using AT89C51 low-cost, high accuracy, Micro figures show that the ultrasonic range finder hardware and software design methods. Modular design of the whole circuit from the main program, pre subroutine fired subroutine receive subroutine. display subroutine modules form. SCM comprehensive analysis of the probe signal processing, and the ultrasonic range finder function. On the basis of the overall system design, hardware and software by the end of each module.?

The research has led to the discovery that?the?software?and?hardware?designing?is?justified, the?anti-disturbance competence is powerful and the real-time capability is satisfactory?and by?extension and upgrade, this system can resolve the problem of the car availably, building construction the position of the workplace and some industries spot supervision.

Key words:AT89S52; Silent Wave;Measure Distance?

3 ?系統軟件的設計

超聲波測距儀的軟件設計主要由主程序、超聲波發生子程序、超聲波接收中斷程序及顯示子程序組成。我們知道C語言程序有利于實現較復雜的算法,匯編語言程序則具有較高的效率且容易精細計算程序運行的時間,而超聲波測距儀的程序既有較復雜的計算(計算距離時),又要求精細計算程序運行時間(超聲波測距時),所以控制程序可采用C語言和匯編語言混合編程。?

3.1 超聲波測距儀的算法設計?[10]
??????超聲波測距的原理為超聲波發生器T在某一時刻發出一個超聲波信號,當這個超聲波遇到被測物體后反射回來,就被超聲波接收器R所接收到。這樣只要計算出從發出超聲波信號到接收到返回信號所用的時間,就可算出超聲波發生器與反射物體的距離。距離的計算公式為:?
?d=s/2=(c×t)/2?????????????????????????????????????????????????????(1)??
其中,d為被測物與測距儀的距離,s為聲波的來回的路程,c為聲速,t為聲波來回所用的時間。?在啟動發射電路的同時啟動單片機內部的定時器T0,利用定時器的計數功能記錄超聲波發射的時間和收到反射波的時間。當收到超聲波反射波時,接收電路輸出端產生一個負跳變,在INT0或INT1端產生一個中斷請求信號,單片機響應外部中斷請求,執行外部中斷服務子程序,讀取時間差,計算距離。其部分源程序如下:

RECEIVE0PUSH PSW

PUSH ACC

CLR EX0 ;關外部中斷0

? MOV R7, TH0 ;讀取時間值?

MOV R6, TL0?

CLR C

MOV A, R6

SUBB A, #0BBH;計算時間差?

MOV 31H, A ;存儲結果?

MOV A, R7

SUBB A, #3CH

MOV 30H, A?

SETB EX0 ;開外部中斷0

POP ACC?

POP PSW

RETI


3.2 主程序流程圖

軟件分為兩部分,主程序和中斷服務程序,如圖3-1(a)(b)?(c) 所示。主程序完成初始化工作、各路超聲波發射和接收順序的控制。

定時中斷服務子程序完成三方向超聲波的輪流發射,外部中斷服務子程序主要完成時間值的讀取、距離計算、結果的輸出等工作。

主程序首先是對系統環境初始化,設置定時器T0工作模式為16位定時計數器模式。置位總中斷允許位EA并給顯示端口P0和P1清0。然后調用超聲波發生子程序送出一個超聲波脈沖,為了避免超聲波從發射器直接傳送到接收器引起的直射波觸發,需要延時約0.1 ms(這也就是超聲波測距儀會有一個最小可測距離的原因)后,才打開外中斷0接收返回的超聲波信號。由于采用的是12 MHz的晶 振,計數器每計一個數就是1μs,當主程序檢測到接收成功的標志位后,將計數器T0中的數(即超聲波來回所用的時間)按式(2)計算,即可得被測物體與測距儀之間的距離,設計時取20℃時的聲速為344 m/s則有:d=(c×t)/2=172T0/10000cm(2)?其中,T0為計數器T0的計算值。測出距離后結果將以十進制BCD碼方式送往LED顯示約0.5s,然后再發超聲波脈沖重復測量過程。為了有利于程序結構化和容易計算出距離,主程序采用C語言編寫。???????????????????????????? ?

3.3超聲波發生子程序和超聲波接收中斷程序 ?
?

超聲波發生子程序的作用是通過P1.0端口發送2個左右超聲波脈沖信號(頻率約40kHz的方波),脈沖寬度為12μs左右,同時把計數器T0打開進行計時。超聲波發生子程序較簡單,但要求程序運行準確,所以采用匯編語言編程。?
???? ?超聲波測距儀主程序利用外中斷0檢測返回超聲波信號,一旦接收到返回超聲波信號(即INT0引腳出現低電平),立即進入中斷程序。進入中斷后就立即關閉計時器T0停止計時,并將測距成功標志字賦值1。如果當計時器溢出時還未檢測到超聲波返回信號,則定時器T0溢出中斷將外中斷0關閉,并將測距成功標志字賦值2以表示此次測距不成功。?前方測距電路的輸出端接單片機INT0端口,中斷優先級最高,左、右測距電路的輸出通過與門IC3A的輸出接單片機INT1端口,同時單片機P1.3和P1.4接到IC3A的輸入端,中斷源的識別由程序查詢來處理,中斷優先級為先右后左。部分源程序如下:

receive1:push psw

push acc

clr ex1 ;關外部中斷1

jnb p1.1, right ;P1.1引腳為0,轉至右測距電路中斷服務程序

jnb p1.2, left ;P1.2引腳為0,轉至左測距電路中斷服務程序

return:SETB EX1;開外部中斷1

pop? acc

pop? psw

reti

right: ...? ;右測距電路中斷服務程序入口

? ajmp? return

left:... ;左測距電路中斷服務程序入口

? ajmp? return

3.4 系統的軟硬件的調試[11]

超聲波測距儀的制作和調試都比較簡單,其中超聲波發射和接收采用Φ15的超聲波換能器TCT40-10F1(T發射)和TCT40-10S1(R接收),中心頻率為40kHz,安裝時應保持兩換能器中心軸線平行并相距4~8cm,其余元件無特殊要求。若能將超聲波接收電路用金屬殼屏蔽起來,則可提高抗干擾能力。根據測量范圍要求不同,可適當調整與接收換能器并接的濾波電容C0的大小,以獲得合適的接收靈敏度和抗干擾能力。?
???? ???硬件電路制作完成并調試好后,便可將程序編譯好下載到單片機試運行。根據實際情況可以修改超聲波發生子程序每次發送的脈沖寬度和兩次測量的間隔時間,以適應不同距離的測量需要。根據所設計的電路參數和程序,測距儀能測的范圍為0.07~5.5m,測距儀最大誤差不超過1cm。系統調試完后應對測量誤差和重復一致性進行多次實驗分析,不斷優化系統使其達到實際使用的測量要求。


資源下載


如果有需要這個系統的源碼、仿真、論文等資源的可以私信我。感謝你的閱讀~

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

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

相關文章

處理線程安全的列表CopyOnWriteArrayList 和Collections.synchronizedList

ConcurrentModificationException 是 Java 中的一種異常&#xff0c;用于指示在迭代集合時&#xff0c;該集合的結構發生了并發修改。 在 Java 中&#xff0c;許多集合類&#xff08;如 ArrayList, HashMap 等&#xff09;都不是線程安全的。如果一個線程在迭代集合的同時&…

IDEA的JAVA版本沒有8怎么辦

問題&#xff1a; 很多小伙伴會出現如下的情況&#xff0c;java的版本很高&#xff0c;沒有8 解決 更換IDEA內置的Server URL的鏡像地址 就是這個 把其中的地址換成 https://start.aliyun.com/ https://start.aliyun.com/ 我們可以看到JAVA 8就出現了

Vue Router 4:構建高效單頁面應用的路由管理

引言 Vue Router的重要性在于它極大地簡化了單頁面應用(SPA)的開發流程。通過Vue Router&#xff0c;開發者可以輕松地將URL映射到對應的組件&#xff0c;實現頁面的無刷新跳轉&#xff0c;從而提升用戶體驗。 安裝和設置Vue Router 4 如何在Vue 3項目中安裝Vue Router 4 1…

期貨量化交易客戶端開源教學第四節——交易接口協議

指令介紹: 01----09:服務端發送到客戶端指令 10----49:客戶端發送操作指令 50----59:客戶端與服務端通訊指令 60----99:股票接口與服務端交互指令 --------------------------------------------------- 02:商品行情 03:用戶信息接收 04:用戶資產信息接收 ----發送到…

SpringBoot的動態代理默認用的哪個???

在 Spring Boot 中&#xff0c;動態代理的默認實現方式取決于被代理的對象的類型和具體配置&#xff1a; JDK 動態代理&#xff1a; 當代理的對象實現了一個或多個接口時&#xff0c;Spring 默認使用 JDK 動態代理。JDK 動態代理只能代理實現了接口的類。 CGLIB 動態代理&…

Python-PLAXIS自動化建模技術與典型巖土工程案例

有限單元法在巖土工程問題中應用非常廣泛&#xff0c;很多軟件都采用有限單元解法。在使用各大軟件進行數值模擬建模的過程中&#xff0c;巖土工程中的各種問題&#xff08;塑性、滲流、固結、動力、穩定安全、熱力TM&#xff09;&#xff0c;一步一步地搭建自己的Plaxis模型&a…

dm-verity hashtree的結構

參考了&#xff1a;實現 dm-verity | Android Open Source Project (google.cn)。基于這個添加了一層原始數據&#xff0c;便于理解。 結構圖如下&#xff1a; 對hashtree結構圖的解釋&#xff1a; dev data&#xff1a;表示我們的分區數據。這里我們將dev data按照指定的大…

【C++進階學習】第六彈——set和map——體會用C++來構建二叉搜索樹

set和map基礎&#xff1a;【C進階學習】第五彈——二叉搜索樹——二叉樹進階及set和map的鋪墊-CSDN博客 前言&#xff1a; 在上篇的學習中&#xff0c;我們已經學習了如何使用C語言來實現二叉搜索樹&#xff0c;在C中&#xff0c;我們是有現成的封裝好的類模板來實現二叉搜索樹…

第二講 數據結構

#數組模擬鏈表 #include <iostream> using namespace std; const int N 100010; int head ,e[N], ne[N],idx; //ne[i]表示節點i的next指針是多少 //e[i]表示節點i 的值 //head 表示頭結點的下標 //idx 存儲當前已經用了哪個點 void init() {head -1;//頭結點指向下標為…

前端實現PDF文件打印和下載

在Web開發中&#xff0c;經常需要處理PDF文件&#xff0c;尤其是在業務涉及發票、報告或文檔生成的場景下。本文將詳細介紹如何使用前端技術實現PDF文件的打印和下載&#xff0c;我們將利用HTML5的<embed>元素和JavaScript庫FileSaver.js來完成這一任務。 一、環境準備 …

Python 爬蟲:使用打碼平臺來識別各種驗證碼:

本課程使用的是 超級鷹 打碼平臺&#xff0c; 沒有賬戶的請自行注冊&#xff01; 超級鷹驗證碼識別-專業的驗證碼云端識別服務,讓驗證碼識別更快速、更準確、更強大 使用打碼平臺來攻破驗證碼難題&#xff0c; 是很簡單容易的&#xff0c; 但是要錢&#xff01; 案例代碼及測…

React18+Redux+antd 項目實戰 JS

React18Reduxantd 項目實戰 js Ant Design插件官網 Axios官網 (可配置請求攔截器和響應攔截器) JavaScript官網 Echarts官網 一、項目前期準備 1.創建新項目 hotel-manager npx create-react-app hotel-manager2.安裝依賴 //安裝路由 npm i react-router-domnpm i aixos /…

CentOS搭建郵件服務器:DNS配置方法技巧?

CentOS搭建郵件服務器的流程&#xff1f;如何高效使用CentOS&#xff1f; 在當今數字化時代&#xff0c;郵件服務器的需求日益增加。為了確保郵件能夠順利送達&#xff0c;正確的DNS配置是必不可少的一環。AokSend將詳細介紹在CentOS搭建郵件服務器過程中&#xff0c;如何進行…

SpringBoot新手快速入門系列教程7:基于Redis的一個簡單存取數據的例子

我的教程都是親自測試可行才發布的&#xff0c;如果有任何問題歡迎留言或者來群里我每天都會解答。 新手可能有這樣的疑問&#xff0c;有了數據庫的存取方式&#xff0c;我們為什么還要使用Redis這種緩存數據庫讀取方式呢&#xff1f; 原因主要有以下幾點&#xff1a; 1. 性能…

力扣題解(單詞拆分)

139. 單詞拆分單詞拆分 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。 注意&#xff1a;不要求字典中出現的單詞全部都使用&#xff0c;并且字典中的單詞可以重復使用。 思路&#xff1a; 規定dp[i]…

亞馬遜中小型店鋪如何開店?

對于想要在亞馬遜平臺上開設店鋪的中小型賣家來說&#xff0c;這是一個非常值得關注的話題。作為亞馬遜上的一個重要參與者&#xff0c;中小型店鋪有著廣闊的發展空間和無限的可能性&#xff0c;但也由于成本預算與規模限制&#xff0c;無法與大型店鋪的策略相提并論&#xff0…

字符串模板被噶了,JDK 23 刪除了預覽功能“字符串模板”

之前出了一個視頻&#xff0c;介紹 JDK 23 中的新特性。之后我才發現&#xff0c;在 JDK 21 和 22 中的預覽功能“字符串模板&#xff08;String Templates&#xff09;”&#xff0c;在 JDK 23 中已經沒有了。字符串模板的相關代碼&#xff0c;已經被全部刪除了。 字符串模板的…

Spring Boot 3.3 【二】Spring Boot自動配置機制深度解析

簡單動作&#xff0c;深刻聯結。在這技術海洋&#xff0c;我備好舟&#xff0c;等你揚帆。啟航吧&#xff01; &#x1f31f;點擊【關注】&#xff0c;解鎖定期的技術驚喜&#xff0c;讓靈感與知識的源泉不斷涌動。 &#x1f44d;一個【點贊】&#xff0c;如同心照不宣的默契&a…

Unity免費領場景多人實時協作地編2人版局域網和LAN聯機類似谷歌文檔協同合作搭建場景同步資產設置編輯付費版支持10人甚至更多20240709

大家有沒有用過谷歌文檔、石墨文檔、飛書文檔等等之類的協同工具呢&#xff1f; Blender也有類似多人聯機建模的插件&#xff0c; Unity也有類似的多人合作搭建場景的插件啦。 剛找到一款免費插件&#xff0c;可以支持2人局域網和LAN聯機地編。 付費的版本支持組建更大的團隊。…

詳解如何通過稀疏向量優化信息檢索

在信息檢索方法的發展歷程中&#xff0c;我們見證了從傳統的統計關鍵詞匹配到如 BERT 這樣的深度學習模型的轉變。雖然傳統方法提供了堅實的基礎&#xff0c;但往往難以精準捕捉文本的語義關系。如 BERT 這樣的稠密檢索方法通過利用高維向量捕獲文本的上下文語義&#xff0c;為…