freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于at89c52單片機超聲波測距儀的設(shè)計畢業(yè)論文-資料下載頁

2025-07-02 09:43本頁面

【導(dǎo)讀】課題提出及研究的意義····························4. 2超聲波的介紹和超聲波的測距原理··················4. 超聲波的特性及特點··································4. 超聲波測距的原理及誤差分析······················5. 超聲波的誤差分析·········&#1

  

【正文】 通過超聲波發(fā)射器輸出;超聲波接收器將接收到的超聲波信號經(jīng)放大器放大,用比較電路進行檢波處理后,啟動單片機中斷程序,測得時間為 t,用溫度測量電路測量當(dāng)時的空氣溫度,等到把數(shù)據(jù)送到單片機后使用軟件對超聲波的傳播速度進行調(diào)整,使測量精度能夠達到要求。再由軟件進行判別、計算,得出距離數(shù)并送 LED 顯示。用復(fù)位電路重置系統(tǒng)后可進行下一次測試。 4 系統(tǒng)軟件設(shè)計 子程序設(shè)計 SXPI 18 超聲波 發(fā)送子程序及超聲波接收中斷子程序 超聲波發(fā)生子程序的作用是通過 端口發(fā)送左右超聲波脈沖信號(頻率約 40kHz 的方波),脈沖寬度為 12μ s 左右,同時把計數(shù)器 T1 打開進行計時,定時器 T1 工作在方式 0。 超聲波測距儀主程序利用外中斷 1 檢測返回超聲波信號,一旦接收到返回超聲波信號(即 1INT 引腳出現(xiàn)低電平),立即進入中斷程序。進入中斷后就立即關(guān)閉計時器 T1 停止計時,并將測距成功標(biāo)志字賦值 1。如果當(dāng)計時器溢出時還未檢測到超聲波返回信號,則定時器 T1 溢出中斷將外中斷 1 關(guān)閉,并 將測距成功標(biāo)志字賦值 0 表示此次測距不成功。 圖 為超聲波發(fā)送及超聲波接收程序流程圖 超聲波發(fā)生子程序的作用是通過 端口發(fā)送左右超聲波脈沖信號(頻率約 40kHz 的方波),脈沖寬度為 12μ s 左右,同時把計數(shù)器 T1 打開進行計時,定時器 T1 工作在方式 0。 超聲波測距儀主程序利用外中斷 1 檢測返回超聲波信號,一旦接收到返回超開始 系統(tǒng)初始化 K1 閉合 發(fā)射超聲波 T1 計時 接受反射波 T1 停止時,保持定時值 SXPI 19 聲波信號(即 1INT 引腳出現(xiàn)低電平),立即進入中斷程序。進入中斷后 就立即關(guān)閉計時器 T1 停止計時,并將測距成功標(biāo)志字賦值 1。如果當(dāng)計時器溢出時還未檢測到超聲波返回信號,則定時器 T1 溢出中斷將外中斷 1 關(guān)閉,并將測距成功標(biāo)志字賦值 0 表示此次測距不成功。 T0 中斷服務(wù)程序如下: sbit send=P1^0。 void timer0(void)interrupt 1 { send=!send。 TH0=0x1f。 TL0=0xf4。 } 超聲波接收(外部中斷 1)程序: void int1(void)interrupt 2 { if(TH1!=0x00amp。amp。TH0!=0x00) { b=1。 TR1=0。 TR0=0。 t=TH1*256+TL1。 t=t/1000000。 TH0=0x1f。 TL0=0xf4。 TH1=0x00。 TL1=0x00。 } else { b=0。 TR1=0。 TR0=0。 TH0=0x1f。 TL0=0xf4。 TH1=0x00。 TL1=0x00。 } } 測溫子程序 測溫的主要器件是 DS18B20,現(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸, DS18B20 中有兩個存測得的溫度值的兩個 8 位存貯器 RAM,用 11 位存貯溫度值,最高位( 5 位)為符號位。對應(yīng)的溫度計算:當(dāng)符號位 S=0 時,直接將二進制位轉(zhuǎn)換為十進制;當(dāng) S=1 時,先將補碼變換為原碼,再計算十進制值。圖 為 DS18B20 的溫度存儲方式: SXPI 20 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 23 22 21 20 2- 1 2- 2 2- 3 2- 4 bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 S S S S S 26 25 24 圖 DS18B20 的溫度存儲方式 負(fù)溫度時 S=1,正溫度時 S=0。因此我們只需要逐位讀出它的溫度就可以了。讀出一個字節(jié) C 代碼如下: uchar readbyte(void) //直接讀一字節(jié)程序 { uchar i,k。 i=8。 k=0。 while(i) { tem_in=1。 delay_us(1)。 tem_in=0。 k=k1。 tem_in=1。 NOP。 if(tem_in)k |= 0x80。 //tem_in 為 1 時,則該位也為 1 delay_us(4)。 } return(k)。 } 距離計算子程序 當(dāng)前溫度和超聲波往返時間均測量出 來后,用 C 語言根據(jù)公式計算距離來LS Byte MS Byte SXPI 21 編程是比較簡單的算法。 根據(jù)測量距離 ctD21?,而其中KTcMRTc 27310 ??? ?,故可簡化為:KTtKTtcD 0 ????,其實現(xiàn)程序算法如下: include void distance(void) { double radical,dist,t。 radical=sqrt(1+(temnum+273)/273)。 dist=*t*radical。 return(dist)。 } 主程序流程 超聲波測距儀的軟件設(shè)計主要由主程序、超聲波發(fā)生子程序、超聲波接收中斷程序及顯示子程序組成。我們知道 C 語言程序有利于實現(xiàn)較復(fù)雜的算法,匯編語言程序則具有較高的效率且容易精細(xì)計算程序運行的時間,而超聲波測距儀的程序既有較復(fù)雜的計算(計算距離時),又要求精細(xì)計算程序運行時間(超聲波測距時),所以控制程序可采用 C 語言和匯編語言混合編程。 因為本設(shè)計對時間要求精度較高的部分全部由單片機內(nèi)部的定時器完成,而雖然溫度傳感器的讀寫對時間精度要求 也高,但經(jīng)詳細(xì)計算所得出的 C 程序已被廣泛應(yīng)用,故直接借用已有程序也能作到對溫度的準(zhǔn)確讀取,所心本設(shè)計全部使用 C 語言編程,這樣能使設(shè)計中所用到的公式能方便快捷的體現(xiàn)和實現(xiàn),又縮短了論文的篇幅。 軟件采用模塊化設(shè)計方法,由主程序、超聲波發(fā)生子程序、超聲波接收中斷子程序、溫度測量子程序、距離計算子程序、顯示子程序、鍵盤掃描處理程序等模塊組成,圖 為主程序流程圖。 系統(tǒng)上電后,首先系統(tǒng)初始化,不斷掃描按鍵 k1,若按鍵 k1 按下,則開始測量空氣溫度,然后將 置位,使定時器 T0 開始定時,控制超聲波傳感器發(fā)出超聲 波,同時使定時器 T1 開始定時。 CPU 循環(huán)檢測 引腳,當(dāng) 為低電平時接收到回波,立即使 T1 停止工作,保存定時器的計數(shù)值。 然后根據(jù)溫度和傳輸時間計算距離,溫度補償措施使測量精度有了明顯提高,計算出距離后調(diào)用距離顯示子程序, LED 顯示距離。 最后檢測按鍵 k2,若 k2 閉合,則調(diào)用溫度顯示子程序, LED 顯示溫度(溫度并非測量距離時用于補償?shù)臏囟?,而是?dāng)前溫度) 5s 后恢復(fù)顯示本次測量距離;若按鍵 k2 沒有閉合,則顯示器恒定顯示最新一次的測量結(jié)果;若要進行下一次測量,則先要按下 k3 重新開始,再按下按鍵 k1 才執(zhí) 行新一次測量。由于不需輸入數(shù)據(jù),鍵盤只設(shè)置了 3 個按鍵,用于開始測量距離并顯示溫度功能設(shè)置等。 SXPI 22 源程序 include include include include define unint unsigned int define uchar unsigned char define LED P1 //際溫度值輸出端口定義 N Y N Y N Y Y N 開始 系統(tǒng)初始化 顯示測量距離 測溫,根據(jù)溫度和時間計算距離 顯示溫度 5s 發(fā)射超聲波, T1 計時 K2 閉合? T1 停止定時,保存定時值 N 接收到反射波? K1 閉合? K3 閉合? SXPI 23 define NOP _nop_() sbit tem_in=P1^1。 sbit k1=P3^7。 sbit k2=P3^6。 sbit k3=P3^5。 sbit send=P1^0。 sbit recieve=P3^2。 uchar temp_h,temp_l。 //溫度值變量 float temnum。 //當(dāng)前溫度值 float t。 //超聲波往返所占用的時間 bit setb。 bit b。 //測距成功標(biāo)志位,當(dāng) b=1 時標(biāo)志測距成功 uchar flag1。 //正負(fù)標(biāo)志位 uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}。//數(shù)碼顯示數(shù)據(jù): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ,消隱 uchar dispbuf[4]={0,0,0,0},tembuf[4]={0,0,0,0}。 /////////////////////////////////////////////////////////////// void delay(unsigned int count) { unint i。 while(count) { i=38。 while(i0)i。 count。 } } /////////////////////////////////////////////////////////////// void delay10ms(unsigned int n) { unsigned int j,k。 while(n!=0) { for(j=0。j10。j++) for(k=0。k72。k++) 。 } } /////////////////////////////////////////////////////////////// void delay_us(uchar n) { uchar i。 SXPI 24 i=0。 while(in) {i++。} return。 } /////////////////////////////////////////////////////////////// void dsreset(void) //DS18B20 重設(shè) { unsigned int i。 tem_in=0。 i=103。 while(i0)i。 tem_in=1。 i=4。 while(i0)i。 } /////////////////////////////////////////////////////////////// uchar readbyte(void) //直接讀一字節(jié)程序 { uchar i,k。 i=8。 k=0。 while(i) { tem_in=1。 delay_us(1)。 tem_in=0。 k=k1。 tem_in=1。 NOP。 if(tem_in)k |= 0x80。 //tem_in 為 1 時,則該位也為 1 delay_us(4)。 } return(k)。 } /////////////////////////////////////////////////////////////// void tmpwrite(unsigned char dat) //函數(shù)功能 :向 B20 寫一字節(jié) { unsigned int i。 unsigned char j。 bit testb。 for(j=1。j=8。j++) { testb=datamp。0x01。 dat=dat1。 if(testb) SXPI 25 { tem_in=0。i++。i++。 tem_in=1。 i=8。while(i0)i。 } else { tem_in=0。 i=8。while(i0)i。 tem_in=1。i++。i++。 } } } ////////////////////////////////////////////////////////////// void tmpchange(void) { dsreset()。 //復(fù)位 delay(1)。 tmpwrite(0xcc)。 //跳過序列號命令 tmpwrite(0x44)。 //轉(zhuǎn)換命令 } //////////////////////////////////////////////////////////// void tmp(void) //溫度采集及轉(zhuǎn)換 {
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1