標(biāo)題: 基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)論文+源碼+資料(數(shù)碼管顯示) [打印本頁(yè)]

作者: zzp2066970838    時(shí)間: 2018-10-23 23:58
標(biāo)題: 基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)論文+源碼+資料(數(shù)碼管顯示)
目錄
摘要
1  緒論
1.1  項(xiàng)目研究背景及意義
2  總體設(shè)計(jì)方案及論證
2.1  總體方案設(shè)計(jì)
3  硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)
3.1  主控制模塊
3.2  電源設(shè)計(jì)
3.3  超聲波測(cè)試模塊
3.3.1  超聲波的特性
3.3.2  超聲波換能器
3.4  超聲波傳感器原理
3.5  測(cè)距分析
3.6  時(shí)鐘電路的設(shè)計(jì)
3.7  復(fù)位電路的設(shè)計(jì)
3.8  聲音報(bào)警電路的設(shè)計(jì)
3.9  顯示模塊
4  軟件設(shè)計(jì)
4.1  主程序工作流程圖
5  總結(jié)
6  參考文獻(xiàn)
附 錄
附件1:原理圖
附件2:程序
附件3:元件清單
附件4:實(shí)物圖



內(nèi)含所有資料請(qǐng)下載附件

摘要
STC89C52是STC系列單片機(jī)里應(yīng)用比較廣泛的一款,在自動(dòng)控制領(lǐng)域里享有很高的價(jià)值,以其易用性和多功能性受到了廣大電子設(shè)計(jì)愛(ài)好者的好評(píng)。本次設(shè)計(jì)主要是利用STC89C52單片機(jī)、超聲波傳感器完成測(cè)距報(bào)警系統(tǒng)的制作,以STC89C52為主控芯片,利用超聲波對(duì)距離的檢測(cè),將前方物體的距離探測(cè)出來(lái),然后單片機(jī)處理運(yùn)算,與設(shè)定的報(bào)警距離值進(jìn)行比較判斷,當(dāng)測(cè)得距離小于設(shè)定值時(shí),STC89C52發(fā)出指令控制蜂鳴器報(bào)警。
1  緒論
1.1  項(xiàng)目研究背景及意義
    由于超聲測(cè)距是一種非接觸檢測(cè)技術(shù),不受光線、被測(cè)對(duì)象顏色等的影響,較其它儀器更衛(wèi)生,更耐潮濕、粉塵、高溫、腐蝕氣體等惡劣環(huán)境,具有少維護(hù)、不污染、高可靠、長(zhǎng)壽命等特點(diǎn)。因此可廣泛應(yīng)用于紙業(yè)、礦業(yè)、電廠、化工業(yè)、水處理廠、污水處理廠、農(nóng)業(yè)用水、環(huán)保檢測(cè)、食品(酒業(yè)、飲料業(yè)、添加劑、食用油、奶制品)、防汛、水文、明渠、空間定位、公路限高等行業(yè)中?稍诓煌h(huán)境中進(jìn)行距離準(zhǔn)確度在線標(biāo)定,可直接用于水、酒、糖、飲料等液位控制,可進(jìn)行差值設(shè)定,直接顯示各種液位罐的液位、料位高度。因此,超聲在空氣中測(cè)距在特殊環(huán)境下有較廣泛的應(yīng)用。利用超聲波檢測(cè)往往比較迅速、方便、計(jì)算簡(jiǎn)單、易于實(shí)現(xiàn)實(shí)時(shí)控制,并且在測(cè)量精度方面能達(dá)到工業(yè)實(shí)用的指標(biāo)要求,因此為了使移動(dòng)機(jī)器人能夠自動(dòng)躲避障礙物行走,就必須裝備測(cè)距系統(tǒng),以使其及時(shí)獲取距障礙物的位置信息(距離和方向)。因此超聲波測(cè)距在移動(dòng)機(jī)器人的研究上得到了廣泛的應(yīng)用。同時(shí)由于超聲波測(cè)距系統(tǒng)具有以上的這些優(yōu)點(diǎn),因此在汽車倒車?yán)走_(dá)的研制方面也得到了廣泛的應(yīng)用。

2  總體設(shè)計(jì)方案及論證
2.1  總體方案設(shè)計(jì)
   本設(shè)計(jì)包括硬件和軟件設(shè)計(jì)兩個(gè)部分。模塊劃分為數(shù)據(jù)采集、按鍵控制、四位數(shù)碼管顯示、報(bào)警等子模塊。電路結(jié)構(gòu)可劃分為:超聲波傳感器、蜂鳴器、單片機(jī)控制電路。就此設(shè)計(jì)的核心模塊來(lái)說(shuō),單片機(jī)就是設(shè)計(jì)的中心單元,所以此系統(tǒng)也是單片機(jī)應(yīng)用系統(tǒng)的一種應(yīng)用。單片機(jī)應(yīng)用系統(tǒng)也是有硬件和軟件組成。硬件包括單片機(jī)、輸入/輸出設(shè)備、以及外圍應(yīng)用電路等組成的系統(tǒng),軟件是各種工作程序的總稱。單片機(jī)應(yīng)用系統(tǒng)的研制過(guò)程包括總體設(shè)計(jì)、硬件設(shè)計(jì)、軟件設(shè)計(jì)等幾個(gè)階段。系統(tǒng)采用STC89C52單片機(jī)作為核心控制單元,當(dāng)測(cè)得的距離小于設(shè)定距離時(shí),主控芯片將測(cè)得的數(shù)值與設(shè)定值進(jìn)行比較處理。然后控制蜂鳴器報(bào)警。系統(tǒng)總體的設(shè)計(jì)方框圖如圖1所示。

圖1 系統(tǒng)方框圖(見(jiàn)附件)
3  硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)
3.1  主控制模塊
主控制最小系統(tǒng)電路如圖2所示。

圖2 最小系統(tǒng)

硬件電路總設(shè)計(jì)見(jiàn)圖3,從以上的分析可知在本設(shè)計(jì)中要用到如下器件: STC89C52、超聲波傳感器、按鍵、四位數(shù)碼管、蜂鳴器等一些單片機(jī)外圍應(yīng)用電路。其中D1為電源工作指示燈。電路中用到3個(gè)按鍵,一個(gè)是設(shè)定鍵, 一個(gè)加鍵,一個(gè)減鍵。

圖3 總設(shè)計(jì)電路圖

3.2  電源設(shè)計(jì)
電源部分的設(shè)計(jì)采用3節(jié)5號(hào)干電池4.5V供電。
3.3  超聲波測(cè)試模塊
    超聲波模塊采用現(xiàn)成的HC-SR04超聲波模塊,該模塊可提供 2cm-400cm 的非接觸式距離感測(cè)功能,測(cè)距精度可達(dá)高到 3mm。模塊包括超聲波發(fā)射器、接收器與控制電路;竟ぷ髟恚翰捎 IO 口 TRIG 觸發(fā)測(cè)距,給至少 10us 的高電平信號(hào);模塊自動(dòng)發(fā)送 8 個(gè) 40khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;有信號(hào)返回,通過(guò) IO 口 ECHO 輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測(cè)試距離=(高電平時(shí)間*聲速(340M/S))/2。實(shí)物如下圖4。其中VCC 供5V 電源,GND 為地線,TRIG 觸發(fā)控制信號(hào)輸入,ECHO 回響信號(hào)輸出等四支線。


超聲波探測(cè)模塊HC-SR04的使用方法如下:IO口觸發(fā),給Trig口至少10us的高電平,啟動(dòng)測(cè)量;模塊自動(dòng)發(fā)送8個(gè)40Khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;有信號(hào)返回,通過(guò)IO口Echo輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間,測(cè)試距離=(高電平時(shí)間*340)/ 2,單位為m。程序中測(cè)試功能主要由兩個(gè)函數(shù)完成。
    實(shí)現(xiàn)中采用定時(shí)器0進(jìn)行定時(shí)測(cè)量,8分頻,TCNTT0預(yù)設(shè)值0XCE,當(dāng)timer0溢出中斷發(fā)生2500次時(shí)為125ms,計(jì)算公式為(單位:ms):
T = (定時(shí)器0溢出次數(shù) * (0XFF - 0XCE))/ 1000
其中定時(shí)器0初值計(jì)算依據(jù)分頻不同而有差異。
3.3.1  超聲波的特性
聲音是與人類生活緊密相關(guān)的一種自然現(xiàn)象。當(dāng)聲的頻率高到超過(guò)人耳聽(tīng)覺(jué)的頻率極限(根據(jù)大量實(shí)驗(yàn)數(shù)據(jù)統(tǒng)計(jì),取整數(shù)為20000赫茲)時(shí),人們就會(huì)覺(jué)察不出周圍聲的存在,因而稱這種高頻率的聲為“超”聲。人的聽(tīng)覺(jué)范圍如圖5所示。

圖5 人的聽(tīng)覺(jué)范圍
超聲波的特性有:
(1)束射特性
由于超聲波的波長(zhǎng)短,超聲波射線可以和光線一樣,能夠反射、折射,也能聚焦,而且遵守幾何光學(xué)上的所有定律。即超聲波射線從一種物質(zhì)表面反射時(shí),入射角等于反射角,當(dāng)射線透過(guò)一種物質(zhì)進(jìn)入另一種密度不同的物質(zhì)時(shí)就會(huì)產(chǎn)生折射現(xiàn)象,也就是要改變它的傳播方向,兩種物質(zhì)的密度差別愈大,則折射率也愈大。
(2)吸收特性
聲波在各種介質(zhì)中傳播時(shí),隨著傳播距離的增加,其強(qiáng)度會(huì)逐漸減弱,這是因?yàn)榻橘|(zhì)要吸收掉它的部分能量。對(duì)于同一介質(zhì),聲波的頻率越高,介質(zhì)吸收就越強(qiáng)。對(duì)于一個(gè)頻率一定的聲波,在氣體中傳播時(shí)吸收尤為歷害,在液體中傳播時(shí)吸收就比較弱,在固體中傳播時(shí)吸收是最小的。
(3)超聲波的能量傳遞特性
超聲波之所以能在各個(gè)工業(yè)部門中得到廣泛的應(yīng)用,主要原因還在于比聲波具有強(qiáng)大得多的功率。為什么有這么強(qiáng)大的功率呢?因?yàn)楫?dāng)聲波進(jìn)入某一介質(zhì)中時(shí),由于聲波的作用使物質(zhì)中的分子也隨之振動(dòng),振動(dòng)的頻率和聲波頻率—樣,分子振動(dòng)的頻率決定了分子振動(dòng)的速度。頻率愈高速度愈大。物資分子由于振動(dòng)所獲得的能量除了與分子本身的質(zhì)量有關(guān)外,主要是由分子的振動(dòng)速度的平方?jīng)Q定的,所以如果聲波的頻率愈高,也就是物質(zhì)分子愈能得到更高的能量。超聲波的頻率比普通聲波要高出很多,所以它可以使物質(zhì)分子獲得很大的能量;換句話來(lái)說(shuō),超聲波本身就可以供給物質(zhì)分子足夠大的功率。
(4)超聲波的聲壓特性
當(dāng)聲波進(jìn)入某物體時(shí),由于聲波振動(dòng)使物質(zhì)分子相互之間產(chǎn)生壓縮和稀疏的作用,將使物質(zhì)所受的壓力產(chǎn)生變化。由于聲波振動(dòng)引起附加壓力現(xiàn)象叫聲壓作用。
3.3.2  超聲波換能器
完成產(chǎn)生超聲波和接收超聲波這種功能的裝置就是超聲波傳感器,習(xí)慣上稱為超聲換能器,或者超聲波探頭。超聲波探頭主要由壓電晶片組成,既可以發(fā)射超聲波,也可以接收超聲波。小功率超聲探頭多用作探測(cè)方面。它有許多不同的結(jié)構(gòu),可分直探頭(縱波)、斜探頭(橫波)、表面波探頭(表面波)、蘭姆波探頭(蘭姆波)、雙探頭(一個(gè)探頭反射、一個(gè)探頭接收)等。
  超聲探頭的核心是其塑料外套或者金屬外套中的一塊壓電晶片。構(gòu)成晶片的材料可以有許多種。由于晶片的大小,如直徑和厚度也各不相同,因此每個(gè)探頭的性能都是不同的,我們使用前必須預(yù)先了解清楚該探頭的性能參數(shù)。
超聲波傳感器的主要性能指標(biāo)包括:
(1)工作頻率。工作頻率就是壓電晶片的共振頻率。當(dāng)加到它兩端的交流電壓的頻率和晶片的共振頻率相等時(shí),輸出的能量最大,靈敏度也最高。
  (2)工作溫度。由于壓電材料的居里點(diǎn)一般比較高,特別時(shí)診斷用超聲波探頭使用功率較小,所以工作溫度比較低,可以長(zhǎng)時(shí)間地工作而不失效。醫(yī)療用的超聲探頭的溫度比較高,需要單獨(dú)的制冷設(shè)備。
 。3)靈敏度。主要取決于制造晶片本身。機(jī)電耦合系數(shù)大,靈敏度高。
人類能聽(tīng)到的聲音頻率范圍為:20Hz~20kHz,即為可聽(tīng)聲波,超出此頻率范圍的聲音,即20Hz以下頻率的聲音稱為低頻聲波,20kHz以上頻率的聲音稱為超聲波。超聲波為直線傳播方式,頻率越高,繞射能力越弱,但反射能力越強(qiáng)。為此,利用超聲波的這種性能就可制成超聲波傳感器。另外,超聲波在空氣中的傳播速度較慢,為340m/s,這就使得超聲波傳感器使用變得非常簡(jiǎn)便。我們選用壓電式超聲波傳感器。它的探頭常用材料是壓電晶體和壓電陶瓷,是利用壓電材料的壓電效應(yīng)來(lái)進(jìn)行工作的。逆壓電效應(yīng)將高頻電振動(dòng)轉(zhuǎn)換成高頻機(jī)械振動(dòng),從而產(chǎn)生超聲波,可作為發(fā)射探頭;而利用正壓電效應(yīng),將超聲振動(dòng)波轉(zhuǎn)換成電信號(hào),可作為接收探頭。
為了研究和利用超聲波,人們已經(jīng)設(shè)計(jì)和制成了許多種超聲波發(fā)生器?傮w上講,超聲波發(fā)生器大體可以分為兩大類:一類是用電氣方式產(chǎn)生超聲波,一類是用機(jī)械方式產(chǎn)生超聲波。電氣方式包括壓電型、磁致伸縮型和電動(dòng)型等;機(jī)械方式有加爾統(tǒng)笛、液哨和氣流旋笛等。它們所產(chǎn)生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。目前較為常用的是壓電式超聲波發(fā)生器。                                                           
圖6 超聲波傳感器結(jié)構(gòu)
    壓電式超聲波發(fā)生器實(shí)際上是利用壓電晶體的諧振來(lái)工作的。超聲波發(fā)生器內(nèi)部結(jié)構(gòu)如圖所示,它有兩個(gè)壓電晶片和一個(gè)共振板。當(dāng)它的兩極外加脈沖信號(hào),其頻率等于壓電晶片的固有振蕩頻率時(shí),壓電晶片將會(huì)發(fā)生共振,并帶動(dòng)共振板振動(dòng),便產(chǎn)生超聲波。反之,如果兩電極間未外加電壓,當(dāng)共振板接收到超聲波時(shí),將壓迫壓電晶片作振動(dòng),將機(jī)械能轉(zhuǎn)換為電信號(hào),這時(shí)它就成為超聲波接收器了。如圖6所示。
3.4  超聲波傳感器原理
市面上常見(jiàn)的超聲波傳感器多為開(kāi)放型,其內(nèi)部結(jié)構(gòu)如圖7所示,一個(gè)復(fù)合式振動(dòng)器被靈活地固定在底座上。該復(fù)合式振動(dòng)器是由諧振器以及一個(gè)金屬片和一個(gè)壓電陶瓷片組成的雙壓電晶片元件振動(dòng)器。諧振器呈喇叭形,目的是能有效地輻射由于振動(dòng)而產(chǎn)生的超聲波,并且可以有效地使超聲波聚集在振動(dòng)器的中央部位。
當(dāng)電壓作用于壓電陶瓷時(shí),就會(huì)隨電壓和頻率的變化產(chǎn)生機(jī)械變形。另一方面,當(dāng)振動(dòng)壓電陶瓷時(shí),則會(huì)產(chǎn)生一個(gè)電荷。利用這一原理,當(dāng)給由兩片壓電陶瓷或一片壓電陶瓷和一個(gè)金屬片構(gòu)成的振動(dòng)器,所謂叫雙壓電晶片元件,施加一個(gè)電信號(hào)時(shí),就會(huì)因彎曲振動(dòng)發(fā)射出超聲波。相反,當(dāng)向雙壓電晶片元件施加超聲振動(dòng)時(shí),就會(huì)產(chǎn)生一個(gè)電信號(hào)。基于以上作用,便可以將壓電陶瓷用作超聲波傳感器。


圖7 超聲波內(nèi)部結(jié)構(gòu)
超聲波是一種在彈性介質(zhì)中的機(jī)械振蕩,其頻率超過(guò)20KHz,分橫向振蕩和縱向振蕩兩種,超聲波可以在氣體、液體及固體中傳播,其傳播速度不同。它有折射和反射現(xiàn)象,且在傳播過(guò)程中有衰減。
超聲波的基本特性如下所述:
波的傳播速度是用頻率乘以波長(zhǎng)來(lái)表示。電磁波的傳播速度是3×108m/s,而聲波在空氣中的傳播速度很慢,約為344m/s (20℃時(shí))。在這種比較低的傳播速度下,波長(zhǎng)很短,這就意味著可以獲得較高的距離和方向分辨率。正是由于這種較高的分辨率特性,才使我們有可能在進(jìn)行測(cè)量時(shí)獲得很高的精確度。
要探測(cè)某個(gè)物體是否存在,超聲波就能夠在該物體上得到反射。由于金屬、木材、混凝土、玻璃、橡膠和紙等可以反射近乎100%的超聲波,因此我們可以很容易地發(fā)現(xiàn)這些物體。由于布、棉花、絨毛等可以吸收超聲波,因此很難利用超聲波探測(cè)到它們。同時(shí),由于不規(guī)則反射,通?赡芎茈y探測(cè)到凹凸表面以及斜坡表面的物體,這些因素決定了超聲波的理想測(cè)試環(huán)境是在空曠的場(chǎng)所,并且測(cè)試物體必須反射超聲波。
聲波傳播的速度“c”可以用下列公式表示。c=331.5+0.607t (m/s) 式中,t=溫度 (℃)也就是說(shuō),聲音傳播速度隨周圍溫度的變化而有所不同。因此,要精確的測(cè)量與某個(gè)物體之間的距離時(shí),始終檢查周圍溫度是十分必要的,尤其冬季室內(nèi)外溫差較大,對(duì)超聲波測(cè)距的精度影響很大,此時(shí)可用18B20作溫度補(bǔ)償來(lái)減小溫度變化所帶來(lái)的測(cè)量誤差,考慮到本設(shè)計(jì)的測(cè)試環(huán)境是在室內(nèi),而且超聲波主要是用于測(cè)距功能,對(duì)測(cè)量精度要求不高,所以關(guān)于溫度效應(yīng)對(duì)系統(tǒng)的影響問(wèn)題在這里不做深入的探討。
4.  衰減
傳播到空氣中的超聲波強(qiáng)度隨距離的變化成比例地減弱,這是因?yàn)檠苌洮F(xiàn)象所導(dǎo)致的在球形表面上的擴(kuò)散損失,也是因?yàn)榻橘|(zhì)吸收能量產(chǎn)生的吸收損失。如圖8所示,超聲波的頻率越高,衰減率就越高,超聲波的傳播距離也就越短,由此可見(jiàn)超聲波的衰減特性直接影響了超聲波傳感器有效距離。
圖8 聲壓在不同距離下的衰減特性

5.聲壓特性
聲壓級(jí) (S.P.L.) 是表示音量的單位,利用下列公式予以表示。
S.P.L.= 20logP/Pre (dB)式中,“P”為有效聲壓 (μbar),“Pre”為參考聲壓 (2×10-4μbar)如圖6所示為幾種常用超聲波傳感器的聲壓圖。

圖9 超聲波傳感器的聲壓圖

6.靈敏度特性
靈敏度是表示聲音接收級(jí)的單位,使用下列公式予以表示。
靈敏度= 20log E/P (dB)式中,“E”為所產(chǎn)生的電壓 (Vrms),“P”為輸入聲壓(μbar)。超聲波傳感器的靈敏度直接影響著系統(tǒng)測(cè)距范圍,如圖7所示為幾種中常見(jiàn)超聲波傳感器的靈敏度圖,從圖中可以發(fā)現(xiàn)40KHz時(shí)傳感器的聲壓級(jí)最高,也就是說(shuō)40KHz時(shí)所對(duì)應(yīng)的靈敏度最高。
圖10 超聲波傳感器靈敏度示意圖
7.輻射特性
把超聲波傳感器安裝在臺(tái)面上。然后,測(cè)量角度與聲壓 (靈敏度) 之間的關(guān)系。為了準(zhǔn)確地表達(dá)輻射,與前部相對(duì)比,聲壓 (靈敏度) 級(jí)衰減6dB的角度被稱為半衰減角度,用θ1/2表示。超聲波設(shè)備的外表面尺寸較小易于獲得精確的輻射角度。如圖11所示為幾種常見(jiàn)超聲波傳感器的輻射特性示意圖。
圖11 超聲波傳感器輻射特性示意圖
分析以上研究結(jié)果不難看出超聲波傳感器工作在40KHz范圍內(nèi)具有最大的聲壓級(jí)和最高的靈敏度。

3.5  測(cè)距分析
超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為340m/s,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),即:s=340t/2
最常用的超聲測(cè)距的方法是回聲探測(cè)法,超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)計(jì)數(shù)器開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物面阻擋就立即反射回來(lái),超聲波接收器收到反射回的超聲波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為340m/s,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物面的距離s,即:s=340t/2。   
由于超聲波也是一種聲波,其聲速V與溫度有關(guān)。在使用時(shí),如果傳播介質(zhì)溫度變化不大,則可近似認(rèn)為超聲波速度在傳播的過(guò)程中是基本不變的。如果對(duì)測(cè)距精度要求很高,則應(yīng)通過(guò)溫度補(bǔ)償?shù)姆椒▽?duì)測(cè)量結(jié)果加以數(shù)值校正。聲速確定后,
只要測(cè)得超聲波往返的時(shí)間,即可求得距離。這就是超聲波測(cè)距儀的基本原理。如圖12所示:(見(jiàn)附件)

圖12 超聲波的測(cè)距原理

                              (3-1)

                            (3-2)

式中:L---兩探頭之間中心距離的一半.
又知道超聲波傳播的距離為:
                                 ( 3-3)
式中:v—超聲波在介質(zhì)中的傳播速度;
     t—超聲波從發(fā)射到接收所需要的時(shí)間.
將(3—2)、(3—3)代入(3-1)中得:
                        ( 3-4)
其中,超聲波的傳播速度v在一定的溫度下是一個(gè)常數(shù)(例如在溫度T=30度時(shí),V=349m/s);當(dāng)需要測(cè)量的距離H遠(yuǎn)遠(yuǎn)大于L時(shí),則(3—4)變?yōu)?
                                                         ( 3-5)
所以,只要需要測(cè)量出超聲波傳播的時(shí)間t,就可以得出測(cè)量的距離H.
3.6  時(shí)鐘電路的設(shè)計(jì)
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。
因?yàn)橐粋(gè)機(jī)器周期含有6個(gè)狀態(tài)周期,而每個(gè)狀態(tài)周期為2個(gè)振蕩周期,所以一個(gè)機(jī)器周期共有12個(gè)振蕩周期,如果外接石英晶體振蕩器的振蕩頻率為12MHZ,一個(gè)振蕩周期為1/12us,故而一個(gè)機(jī)器周期為1us。如圖13所示為時(shí)鐘電路。
圖13 時(shí)鐘電路圖
3.7  復(fù)位電路的設(shè)計(jì)
復(fù)位方法一般有上電自動(dòng)復(fù)位和外部按鍵手動(dòng)復(fù)位,單片機(jī)在時(shí)鐘電路工作以后, 在RESET端持續(xù)給出2個(gè)機(jī)器周期的高電平時(shí)就可以完成復(fù)位操作。例如使用晶振頻率為12MHz時(shí),則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)不小于2us。本設(shè)計(jì)采用的是自動(dòng)復(fù)位電路。如圖14示為復(fù)位電路。
圖14 復(fù)位電路圖

3.8  聲音報(bào)警電路的設(shè)計(jì)
如下圖所示,用一個(gè)Speaker和三極管、電阻接到單片機(jī)的P13引腳上,構(gòu)成聲音報(bào)警電路,如圖15示為聲音報(bào)警電路。


圖15 聲音報(bào)警電路圖
3.9  顯示模塊
顯示模塊采用數(shù)碼管顯示接口電路如圖16


圖16 數(shù)碼管電路
4  軟件設(shè)計(jì)            
4.1  主程序工作流程圖
按上述工作原理和硬件結(jié)構(gòu)分析可知系統(tǒng)主程序工作流程圖如下圖17所示;


圖17 主程序工作流程圖

超聲波探測(cè)程序流程圖:

5  總結(jié)
本設(shè)計(jì)研究了一種基于單片機(jī)技術(shù)的超聲波智能測(cè)距報(bào)警系統(tǒng)。該系統(tǒng)通過(guò)以STC89C52單片機(jī)為工作處理器核心,超聲波傳感器,它是一種新穎的被動(dòng)式超聲波探測(cè)器件,能夠以非接觸測(cè)出前方物體距離,并將其轉(zhuǎn)化為相應(yīng)的電信號(hào)輸出.該報(bào)警器的最大特點(diǎn)就是使用戶能夠操作簡(jiǎn)單、易懂、靈活;且安裝方便、智能性高、誤報(bào)率低。隨著現(xiàn)代人們安全意識(shí)的增強(qiáng)以及科學(xué)技術(shù)的快速發(fā)展,相信報(bào)警器必將在更廣闊的領(lǐng)域得到更深層次的應(yīng)用。

6  參考文獻(xiàn)
[1] 吳政江. 單片機(jī)控制紅外線防盜報(bào)警器[J]. 錦州師范學(xué)院學(xué)報(bào), 2001.
[2] 宋文緒. 傳感器與檢測(cè)技術(shù)[M]. 北京: 高等教育出版社, 2004.
[3] 余錫存. 單片機(jī)原理及接口技術(shù)[M]. 西安: 西安電子科技大學(xué)出版社, 2000.
[4] 唐桃波, 陳玉林. 基于AT89C51的智能無(wú)線安防報(bào)警器 [J]. 電子設(shè)計(jì)應(yīng)用, 2003, 5(6): 49~51.
[5] 李全利. 單片機(jī)原理及接口技術(shù)[M]. 北京: 北京航空航天大學(xué)出版社, 2004.
[6] 薛均義, 張彥斌. MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用[M]. 西安: 西安交通大學(xué)出版社, 2005.
[7] 徐愛(ài)鈞, 彭秀華. 單片機(jī)高級(jí)語(yǔ)言C51應(yīng)用程序設(shè)計(jì)[M]. 北京: 北京航空航天大學(xué)出版社, 2006.
[8] 康華光. 電子技術(shù)基礎(chǔ)(模擬部分)[M]. 北京: 高等教育出版社, 2004.

附件1:原理圖

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "eepom52.h"
  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. //數(shù)碼管段選定義      0     1    2    3    4    5              6              7                8                 9            
  7. uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  8.                                                                         0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};              //斷碼
  9. //數(shù)碼管位選定義
  10. uchar code smg_we[]={0xe0,0xd0,0xb0,0x70};
  11. uchar dis_smg[8]   ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};

  12. sbit smg_we1 = P3^4;                //數(shù)碼管位選定義
  13. sbit smg_we2 = P3^5;
  14. sbit smg_we3 = P3^6;
  15. sbit smg_we4 = P3^7;

  16. sbit c_send   = P3^2;                            //超聲波發(fā)射
  17. sbit c_recive = P3^3;                            //超聲波接收
  18. uchar flag_hc_value;        //超聲波中間變量

  19. sbit beep = P2^3;   //蜂鳴器IO口定義
  20. bit flag_key_b_en,flag_key_set_en;   //按鍵蜂鳴器使能


  21. uchar smg_i = 3;    //顯示數(shù)碼管的個(gè)位數(shù)
  22. bit flag_300ms ;

  23. bit key_500ms  ;


  24. long distance;                      //距離
  25. uint set_d;                          //距離
  26. bit flag_csb_juli;        //超聲波超出量程
  27. uint  flag_time0;     //用來(lái)保存定時(shí)器0的時(shí)候的

  28. //  按鍵的IO變量的定義
  29. uchar key_can;                            //按鍵值的變量
  30. uchar zd_break_en,zd_break_value;   //自動(dòng)退出設(shè)置界面
  31. uchar menu_shudu = 10;  //用來(lái)控制連加的速度
  32. bit flag_lj_en;                            //按鍵連加使能
  33. bit flag_lj_3_en;              //按鍵連3次連加后使能 加的數(shù)就越大了
  34. uchar key_time,flag_value;      //用做連加的中間變量
  35. uchar menu_1;        //菜單設(shè)計(jì)的變量
  36. uchar a_a;


  37. /***********************1ms延時(shí)函數(shù)*****************************/
  38. void delay_1ms(uint q)
  39. {
  40.               uint i,j;
  41.               for(i=0;i<q;i++)
  42.                             for(j=0;j<120;j++);
  43. }

  44. /***********************處理距離函數(shù)****************************/
  45. void smg_display()
  46. {
  47.               dis_smg[0] = smg_du[distance % 10];
  48.               dis_smg[1] = smg_du[distance / 10 % 10];
  49.               dis_smg[2] = smg_du[distance / 100 % 10] & 0x7f;            
  50. }

  51. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中******************/
  52. void write_eepom()
  53. {
  54.               SectorErase(0x2000);
  55.               byte_write(0x2000, set_d % 256);
  56.               byte_write(0x2001, set_d / 256);
  57.               byte_write(0x2058, a_a);            
  58. }

  59. /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來(lái)*****************/
  60. void read_eepom()
  61. {
  62.               set_d  = byte_read(0x2001);
  63.               set_d <<= 8;
  64.               set_d  |= byte_read(0x2000);
  65.               a_a      = byte_read(0x2058);
  66. }

  67. /**************開(kāi)機(jī)自檢eepom初始化*****************/
  68. void init_eepom()
  69. {
  70.               read_eepom();                            //先讀
  71.               if(a_a != 1)                            //新的單片機(jī)初始單片機(jī)內(nèi)問(wèn)EEPOM
  72.               {
  73.                             set_d = 100;
  74.                             a_a = 1;
  75.                             write_eepom();
  76.               }            
  77. }
  78. /****************獨(dú)立按鍵處理函數(shù)********************/
  79. void key()
  80. {
  81.               static uchar key_new = 0,key_old = 0,key_value = 0;
  82.               if(key_new == 0)                                         
  83.               {                                                                                       //按鍵松開(kāi)的時(shí)候做松手檢測(cè)
  84.                             if((P2 & 0x07) == 0x07)
  85.                                           key_value ++;
  86.                             else
  87.                                           key_value = 0;
  88.                             if(key_value >= 5)
  89.                             {
  90.                                           key_value = 0;
  91.                                           key_new = 1;
  92.                                           flag_lj_en = 0;                            //關(guān)閉連加使能
  93.                                           flag_lj_3_en = 0;              //關(guān)閉3秒后使能
  94.                                           flag_value = 0;                            //清零
  95.                                           key_time = 0;
  96.                                           write_eepom();
  97.                             }
  98.               }
  99.               else
  100.               {
  101.                             if((P2 & 0x07) != 0x07)
  102.                                           key_value ++;  //按鍵按下的時(shí)候
  103.                             else
  104.                                           key_value = 0;
  105.                             if(key_value >= 5)
  106.                             {
  107.                                           key_value = 0;
  108.                                           key_new = 0;
  109.                                           flag_lj_en = 1;              //連加使能
  110.                                           zd_break_en = 1; //自動(dòng)退出設(shè)置界使能
  111.                                           zd_break_value = 0; //自動(dòng)退出設(shè)置界變量清零
  112.                                           flag_key_b_en = 1;  //按鍵蜂鳴器使能
  113.                             }
  114.               }
  115.               key_can = 20;
  116.               if(key_500ms == 1)              //連加
  117.               {
  118.                             key_500ms = 0;
  119.                             key_new = 0;
  120.                             key_old = 1;
  121.                             zd_break_value = 0;
  122.               }
  123.               if((key_new == 0) && (key_old == 1))
  124.               {
  125.                             switch(P2 & 0x07)
  126.                             {
  127.                                           case 0x06: key_can = 3; break;                 //得到k2鍵值
  128.                                           case 0x05: key_can = 2; break;                 //得到k3鍵值
  129.                                           case 0x03: key_can = 1; break;                 //得到k4鍵值
  130.                             }
  131. //                            dis_smg[3] = smg_du[key_can % 10];

  132.               }                                         
  133.               key_old = key_new;            
  134. }


  135. void smg_we_switch(uchar i)
  136. {
  137.               switch(i)
  138.               {
  139.                             case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  140.                             case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  141.                             case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  142.                             case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
  143.               }            
  144. }

  145. /***********************數(shù)碼顯示函數(shù)*****************************/
  146. void display()
  147. {
  148.               static uchar i;  
  149.               i++;
  150.               if(i >= smg_i)
  151.               i = 0;            
  152. //              P1 = 0xff;                            //段選                  
  153. //              P3 = 0xf0 | (P3 & 0x0f); //位選
  154. //              P3 = smg_we[i] | (P3 & 0x0f); //位選
  155.               smg_we_switch(i);
  156.               P1 = dis_smg[i];                            //段選                  

  157. }

  158. void delay()
  159. {
  160.               _nop_();                                        //執(zhí)行一條_nop_()指令就是1us
  161.               _nop_();
  162.               _nop_();
  163.               _nop_();
  164.               _nop_();
  165.               _nop_();
  166.               _nop_();
  167. }


  168. /*********************超聲波測(cè)距程序*****************************/
  169. void send_wave()
  170. {
  171.               c_send = 1;                                       //10us的高電平觸發(fā)
  172.               delay();
  173.               c_send = 0;            
  174.               TH0 = 0;                                      //給定時(shí)器0清零
  175.               TL0 = 0;
  176.               TR0 = 0;                                                          //關(guān)定時(shí)器0定時(shí)
  177.               flag_hc_value = 0;
  178.               while(!c_recive);                              //當(dāng)c_recive為零時(shí)等待
  179.               TR0=1;
  180.               while(c_recive)                                  //當(dāng)c_recive為1計(jì)數(shù)并等待
  181.               {
  182.                             flag_time0 = TH0 * 256 + TL0;
  183.                             if((flag_hc_value > 1) || (flag_time0 > 65000))      //當(dāng)超聲波超過(guò)測(cè)量范圍時(shí),顯示3個(gè)888
  184.                             {
  185.                                           TR0 = 0;
  186.                                           flag_csb_juli = 2;
  187.                                           distance = 888;
  188.                                           flag_hc_value = 0;
  189.                                           break ;                           
  190.                             }
  191.                             else
  192.                             {
  193.                                           flag_csb_juli = 1;            
  194.                             }
  195.               }
  196.               if(flag_csb_juli == 1)
  197.               {            
  198.                             TR0=0;                                                                                                  //關(guān)定時(shí)器0定時(shí)
  199.                             distance = TH0;                                                             //讀出定時(shí)器0的時(shí)間
  200.                             distance = distance * 256 + TL0;
  201.                             distance +=( flag_hc_value * 65536);//算出超聲波測(cè)距的時(shí)間              得到單位是ms
  202.                             distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出來(lái)是米
  203.                             if(distance > 350)                                                        //距離 = 速度 * 時(shí)間
  204.                             {            
  205.                                           distance = 888;                                                        //如果大于3.8m就超出超聲波的量程
  206.                             }
  207.               }
  208. }


  209. /*********************定時(shí)器0、定時(shí)器1初始化******************/
  210. void time_init()               
  211. {
  212.               EA  = 1;                              //開(kāi)總中斷
  213.               TMOD = 0X11;                //定時(shí)器0、定時(shí)器1工作方式1
  214.               ET0 = 1;                              //開(kāi)定時(shí)器0中斷
  215.               TR0 = 1;                              //允許定時(shí)器0定時(shí)
  216.               ET1 = 1;                              //開(kāi)定時(shí)器1中斷
  217.               TR1 = 1;                              //允許定時(shí)器1定時(shí)            
  218. }

  219. /****************按鍵處理數(shù)碼管顯示函數(shù)***************/
  220. void key_with()
  221. {
  222.               if(key_can == 1)
  223.               {
  224.                             menu_1 ++;
  225.                             if(menu_1 >= 2)
  226.                             {
  227.                                           menu_1 = 0;
  228.                             }
  229.                             if(menu_1 == 0)
  230.                             {
  231.                                           menu_shudu = 20;
  232.                                           dis_smg[0] = smg_du[distance % 10];            
  233.                                           dis_smg[1] = smg_du[distance / 10 % 10] ;
  234.                                           dis_smg[2] = smg_du[distance / 100 % 10] & 0x7f;               
  235.                                           smg_i = 3;
  236.                             }
  237.                             if(menu_1 == 1)
  238.                             {
  239.                                           menu_shudu = 1;
  240.                                           dis_smg[0] = smg_du[set_d % 10];                        
  241.                                           dis_smg[1] = smg_du[set_d / 10 % 10];
  242.                                           dis_smg[2] = smg_du[set_d / 100 % 10] & 0x7f ;               
  243.                                           dis_smg[3] = 0x88;            
  244.                                           smg_i = 4;
  245.                             }
  246.               }
  247.               if(menu_1 == 1)                                          //設(shè)置高溫報(bào)警
  248.               {
  249.                             if(flag_lj_3_en == 0)  //三次連加之后速度加快
  250.                                           menu_shudu = 10 ;  //500ms               加減一次
  251.                             else
  252.                                           menu_shudu = 1;  //250ms 加減一次
  253.                             if(key_can == 2)
  254.                             {
  255.                                           set_d ++ ;                            //按鍵按下未松開(kāi)自動(dòng)加三次            
  256.                                           if(set_d > 350)
  257.                                                         set_d = 350;
  258.                                           dis_smg[0] = smg_du[set_d % 10];                         //取小數(shù)顯示
  259.                                           dis_smg[1] = smg_du[set_d / 10 % 10] ;         //取個(gè)位顯示
  260.                                           dis_smg[2] = smg_du[set_d / 100 % 10] & 0x7f;  //取十位顯示
  261.                                           dis_smg[3] = 0x88;              //a
  262.                             }
  263.                             if(key_can == 3)
  264.                             {
  265.                                           set_d -- ;                            //按鍵按下未松開(kāi)自動(dòng)加三次            
  266.                                           if(set_d <= 1)
  267.                                                         set_d = 1;
  268.                                           dis_smg[0] = smg_du[set_d % 10];                         //取小數(shù)顯示
  269.                                           dis_smg[1] = smg_du[set_d / 10 % 10] ;  //取個(gè)位顯示
  270.                                           dis_smg[2] = smg_du[set_d / 100 % 10] & 0x7f ;                 //取十位顯示
  271.                                           dis_smg[3] = 0x88;              //a
  272.                             }
  273. //                            write_eepom();
  274.               }            
  275. }

  276. /****************報(bào)警函數(shù)***************/
  277. void clock_h_l()
  278. {
  279.               static uchar value;
  280.               if(distance <= set_d)
  281.               {
  282.                             value ++;  //消除實(shí)際距離在設(shè)定距離左右變化時(shí)的干擾
  283.                             if(value >= 5)
  284.                             {
  285.                                           beep = ~beep;                 //蜂鳴器報(bào)警                                         
  286.                             }
  287.               }
  288.               else
  289.               {
  290.                             value = 0;
  291.                             beep = 1;                            //取消報(bào)警
  292.               }            
  293. }

  294. /****************按鍵按下蜂鳴器響下**********************/               
  295. void key_beep()
  296. {
  297.               static uint value;            
  298.               if((flag_key_b_en == 1) && (flag_key_set_en == 1))
  299.               {
  300.                             beep = 0;    //打開(kāi)蜂鳴器               
  301.                             value ++;
  302.                             if(value > 800)
  303.                             {
  304.                                           value = 0;
  305.                                           flag_key_b_en = 0;
  306.                                           beep = 1;//關(guān)閉蜂鳴器
  307.                             }
  308.               }            
  309. }


  310. void main()
  311. {
  312.               send_wave();              //測(cè)距離函數(shù)
  313.               smg_display();              //處理距離顯示函數(shù)
  314.               time_init();
  315.               init_eepom();  //讀eepom數(shù)據(jù)
  316.               while(1)
  317.               {
  318.                             if(flag_300ms == 1)
  319.                             {
  320.                                           flag_300ms = 0;
  321.                                           clock_h_l();    //報(bào)警函數(shù)
  322.                                           send_wave();              //測(cè)距離函數(shù)
  323.                                           if(menu_1 == 0)
  324.                                                         smg_display();              //處理距離顯示函數(shù)
  325.                                           if(zd_break_en == 1)              //自動(dòng)退出設(shè)置界面程序
  326.                                           {
  327.                                                         zd_break_value ++;  //每300ms加一次
  328.                                                         if(zd_break_value > 100)   //30秒后自動(dòng)退出設(shè)置界面
  329.                                                         {
  330.                                                                       menu_1 = 0;                                            //
  331.                                                                       smg_i = 3;
  332.                                                                       zd_break_en = 0;
  333.                                                                       zd_break_value = 0;
  334.                                                         }                           
  335.                                           }
  336.                             }
  337.                             key();                                                                      //按鍵函數(shù)
  338.                             if(key_can < 10)
  339.                             {
  340.                                           key_with();                                          //按鍵處理函數(shù)
  341.                             }
  342.               }
  343. }


  344. /*********************定時(shí)器0中斷服務(wù)程序 用做超聲波測(cè)距的************************/
  345. void time0_int() interrupt 1
  346. {                                                                                      
  347.               set_d ++;                            //              TH0 TL0 到65536后溢出中斷
  348. }                             

  349. /*********************定時(shí)器0中斷服務(wù)程序************************/
  350. void time1_int() interrupt 3
  351. {            
  352.               static uchar value;                                          //定時(shí)10ms中斷一次
  353.               TH1 = 0xf8;
  354.               TL1 = 0x30;     //2ms
  355.               display();                            //數(shù)碼管顯示函數(shù)
  356.               value++;
  357.               if(value >= 150)
  358.               {
  359.                             value = 0;
  360.                             flag_300ms = 1;
  361.               }
  362.               if(value % 25 == 0)
  363.               {
  364.                             if(flag_lj_en == 1)                 //按下按鍵使能  50ms
  365.                             {
  366.                                           key_time ++;
  367.                                           if(key_time >= menu_shudu) //500ms
  368.                                           {
  369.                                                         key_time = 0;
  370.                                                         key_500ms = 1; //500ms
  371.                                                         flag_value ++;
  372.                                                         if(flag_value >= 3)
  373.                                                         {
  374.                                                                       flag_value = 10;
  375.                                                                       flag_lj_3_en = 1; //3次后1.5秒后連加大些
  376.                                                         }                                                                                   
  377.                                           }
  378.                             }
  379.               }
  380. }
復(fù)制代碼



全部資料51hei下載地址:
超聲波測(cè)距儀模塊 數(shù)碼管.rar (11.14 MB, 下載次數(shù): 785)



作者: 小毛驢666    時(shí)間: 2019-3-29 11:06
這個(gè)數(shù)碼管要自己封存嗎
作者: 小毛驢666    時(shí)間: 2019-3-29 11:12
這個(gè)數(shù)碼管要自己封存嗎   庫(kù)里面只有一個(gè)的
作者: 貪吃的老鱷魚(yú)    時(shí)間: 2019-4-21 16:41
小毛驢666 發(fā)表于 2019-3-29 11:12
這個(gè)數(shù)碼管要自己封存嗎   庫(kù)里面只有一個(gè)的

要自己畫(huà)封裝,網(wǎng)上也有現(xiàn)成的封裝可以下載
作者: 青春都喂了狗    時(shí)間: 2019-4-22 17:38
玩一下
作者: 夏天是可樂(lè)味的    時(shí)間: 2019-4-29 19:41
請(qǐng)問(wèn)有原理圖的源文件嗎 發(fā)一份到1105098720@qq.com
作者: QIAO17    時(shí)間: 2019-5-2 19:06
感謝啊啊
作者: angerh    時(shí)間: 2019-5-3 22:34
很需要這份文件
作者: w139572656    時(shí)間: 2019-6-13 15:55
這個(gè)我覺(jué)得超有用,謝謝了
作者: Plotos    時(shí)間: 2019-8-28 08:59
感覺(jué)樓主發(fā)的特別有用啊
作者: User999    時(shí)間: 2019-9-1 09:55
牛逼啊LL
作者: 武。。。。    時(shí)間: 2019-9-25 13:37
怎么往這個(gè)測(cè)距儀加入藍(lán)牙傳輸模塊,讓他能在電腦上顯示出測(cè)距
作者: Zxxxxxxxxxxx    時(shí)間: 2019-10-12 16:11
下載下來(lái)學(xué)習(xí)一下
作者: AT89c51220    時(shí)間: 2019-12-11 13:38
大神那個(gè)電路總圖各個(gè)部分能不能標(biāo)注一下啊
作者: 1315588646    時(shí)間: 2019-12-16 13:32
謝謝樓主啊
作者: snowy.    時(shí)間: 2019-12-19 11:05
這個(gè)正好需要,雪中送炭
作者: lindeijun1    時(shí)間: 2020-1-4 06:58
謝謝樓主分享。!
作者: 半壁松    時(shí)間: 2020-3-9 20:57
樓主能分享一下學(xué)習(xí)資料嗎,發(fā)到我的郵箱里
作者: 半壁松    時(shí)間: 2020-3-9 21:10
請(qǐng)問(wèn)樓主有原理圖的源文件嗎,能分享一下嗎,我剛好有一套硬件焊接
作者: langyalinrui    時(shí)間: 2020-3-31 10:41
謝謝樓主分享。
作者: asd250969565    時(shí)間: 2020-4-25 15:58
小毛驢666 發(fā)表于 2019-3-29 11:06
這個(gè)數(shù)碼管要自己封存嗎

數(shù)碼管封存在于軟件數(shù)據(jù)庫(kù)library上
作者: xiaokai0215    時(shí)間: 2020-4-25 22:30
這個(gè)我覺(jué)得超有用,謝謝了
作者: asd250969565    時(shí)間: 2020-4-26 23:30
感謝樓主
作者: 單片機(jī)編程好難    時(shí)間: 2020-5-19 20:49
請(qǐng)問(wèn)如果數(shù)碼管要顯示四位的話,只加”dis_smg[3] = smg_du[set_d / 1000]“ 就行了嗎?
作者: yinke-21    時(shí)間: 2020-5-28 09:17
想問(wèn)樓主 有沒(méi)有測(cè)距的信息數(shù)據(jù)?
作者: lmhh    時(shí)間: 2020-12-29 15:15
可以用proteus仿真嗎





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1