欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11372|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的聲音定位系統(tǒng)電路與源程序設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:58647 發(fā)表于 2021-7-11 18:49 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
壓縮包包含文檔、程序等全部資料。
設(shè)計(jì)一套聲音定位系統(tǒng)。在一塊不大于 1m2 的平板上貼一張 500mm×350mm
的坐標(biāo)紙,在其四角外側(cè)分別固定安裝一個(gè)聲音接收模塊,聲音接收模塊通過(guò)導(dǎo)
線將聲音信號(hào)傳輸?shù)叫畔⑻幚砟K,聲音定位系統(tǒng)根據(jù)聲響模塊通過(guò)空氣傳播到 各聲音接收模塊的聲音信號(hào),判定聲響模塊所在的位置坐標(biāo)。系統(tǒng)結(jié)構(gòu)示意圖如 圖 1 所示。



2.1 要求
圖 1 聲音定位系統(tǒng)結(jié)構(gòu)示意圖

(1) 設(shè)計(jì)制作一個(gè)聲響模塊,含信號(hào)產(chǎn)生電路、放大電路和微型揚(yáng)聲器等, 每按鍵一次發(fā)聲一次,聲音信號(hào)持續(xù)時(shí)間約為 1s。要求聲響模塊采用 5V 以下電 池供電,功耗不大于 200mW。
(2) 設(shè)計(jì)制作四路聲音接收模塊,由麥克風(fēng)、放大電路等組成,并分別與信 息處理模塊相連接,以便將聲音信號(hào)傳送至信息處理模塊。
(3) 設(shè)計(jì)制作一個(gè)信息處理模塊,要求該模塊能根據(jù)從聲音接收模塊傳來(lái)的 信號(hào)判斷聲響模塊所在位置的 x、y 坐標(biāo),并以數(shù)字形式顯示 x、y 坐標(biāo)值,位置 坐標(biāo)值誤差的絕對(duì)值不大于 30mm。
3.1 說(shuō)明
(1)  注意預(yù)留測(cè)量聲響模塊功耗的電流電壓和信號(hào)放大電路輸出信號(hào)的測(cè)試
點(diǎn)。
(2) 采用三個(gè)聲音接收模塊即可實(shí)現(xiàn)定位,第四個(gè)模塊可對(duì)定位作進(jìn)一步校 正。
(3) 不允許聲響模塊與其他電路有任何連接,并要求在聲響模塊上做出明顯 標(biāo)記,以便清晰判讀模塊所在坐標(biāo)數(shù)值。
(4) 注意聲音通過(guò)其它傳播介質(zhì)帶來(lái)的影響。 二、總體設(shè)計(jì)與分析


為了實(shí)現(xiàn)本次設(shè)計(jì)的要求,系統(tǒng)必須具備以下功能:按鍵聲源發(fā)聲且持續(xù)時(shí) 間 1s、接收聲音、信號(hào)放大濾波、聲源定位等功能。其系統(tǒng)主要可以劃分為:聲 響模塊、聲音接收模塊、控制器和顯示模塊。
在整體的方案上,聲響模塊利用 555 單穩(wěn)態(tài)振蕩電路來(lái)達(dá)到每按鍵一次發(fā)聲一次
的功能。另外由于聲響模塊產(chǎn)生的聲音信號(hào)傳遞到接收模塊時(shí)是十分微弱的,所
以聲音接收模塊必須含有濾波,放大和比較等環(huán)節(jié),以便觸發(fā)控制器進(jìn)行運(yùn)算和 處理。本次設(shè)計(jì)采用了比較器 LM358 結(jié)合放大電路形成的聲音接收模塊。此系 統(tǒng)結(jié)構(gòu)框圖如下所示:



三、方案比較與選擇
3.1 處理器
圖 2.1 系統(tǒng)結(jié)構(gòu)框圖

方案一:采用 TI 公司生產(chǎn)的 MSP430 單片機(jī)。MSP430 系列單片機(jī)含有一種 超高速、低功耗的同時(shí)具有精簡(jiǎn)指令集(RISC)的 16 位處理器。該系列芯片片內(nèi) 資源豐富,中斷源的數(shù)量較多,足以滿足本次設(shè)計(jì)對(duì)中斷源的需求。同時(shí) MSP430 系列單片機(jī)運(yùn)算速度快,片內(nèi)硬件資源豐富,能夠?qū)崿F(xiàn)一些較為復(fù)雜的算法和數(shù) 據(jù)處理。但在短時(shí)間內(nèi)掌握 MSP430 的編程與開發(fā)具有一定的難度。
方案二:采用 STC 公司生產(chǎn)的 STC89C52RC 單片機(jī)。STC89C52RC 是 STC 公司 生產(chǎn)的一種高性能 CMOS、低功耗的 8 位微控制器。其片內(nèi)含有五個(gè)可屏蔽中斷 源,且容易對(duì)其進(jìn)行編程處理,基本可以滿足本次設(shè)計(jì)要求。另外 STC89C52RC 單片機(jī)小系統(tǒng)的焊接較為簡(jiǎn)單,后期調(diào)試工作也更加方便。 綜上所述,方案一成本較高,并且考慮到短時(shí)間內(nèi)不易掌握,經(jīng)過(guò)討論采取方案 二。
3.2 聲源裝置 方案一:采用單片機(jī)產(chǎn)生聲音信號(hào),經(jīng)過(guò)功率放大電路,驅(qū)動(dòng)無(wú)源蜂鳴器發(fā)
聲,這可以通過(guò)程序?qū)崿F(xiàn)。但由于 STC89C52RC 單片機(jī)片內(nèi)資源有限,需要另外 再焊接一個(gè)單片機(jī)小系統(tǒng),較為浪費(fèi)資源。
方案二:采用 555 單穩(wěn)態(tài)振蕩電路產(chǎn)生聲音信號(hào),經(jīng)過(guò)三極管放大電路,驅(qū) 動(dòng)無(wú)源蜂鳴器發(fā)聲。其通過(guò)內(nèi)部的定時(shí)器產(chǎn)生時(shí)基電路,外部只需簡(jiǎn)單的驅(qū)動(dòng)電 路便可實(shí)現(xiàn)按鍵一次,聲音持續(xù)時(shí)間 1s 的功能。該電路結(jié)構(gòu)簡(jiǎn)單,可外接 5V 電 源,方便焊接與測(cè)試。
綜上所述,經(jīng)討論采取方案二。

3.3 聲音接收裝置 方案一:采用壓電式聲敏傳感器。壓電式聲敏傳感器是利用壓電晶體的壓電
效應(yīng)制成一種能實(shí)現(xiàn)聲-電轉(zhuǎn)換器件。但壓電聲敏傳感器不是常用器件,價(jià)格較 貴。
方案二:采用電容式駐極體話筒(咪頭)。該元件能將一般的聲音信號(hào)轉(zhuǎn)化為 電信號(hào)。價(jià)格便宜,便于設(shè)計(jì),之后再自行設(shè)計(jì)濾波與放大電路,一起構(gòu)成聲音 信號(hào)接收模塊。
綜上所述,電容式駐極體話筒對(duì)于滿足設(shè)計(jì)要求綽綽有余,經(jīng)過(guò)討論采取方 案二。
3.4 聲音信號(hào)放大電路 方案一:采用聲控開關(guān)。聲控開關(guān)使用簡(jiǎn)單,價(jià)格便宜,但是反應(yīng)不夠靈敏,
精度較低。 方案二:采用多級(jí)放大整波電路,將接收的信號(hào)經(jīng)放大、濾波、電壓比較排
除噪聲干擾,精度高。 綜上所述,雖然方案二電路復(fù)雜運(yùn)用模電知識(shí),但是項(xiàng)目要求精度比較高,
所以采用方案二。3.5 顯示模塊
方案一:LCD1602 液晶顯示屏,是一種工業(yè)字符型液晶,能夠同時(shí)顯示 16x02
(16 列 2 行)即 32 個(gè)字符。對(duì)于本次設(shè)計(jì)而言,雖然其能基本完成顯示坐標(biāo)軸
上 X 與 Y 的值,但考慮在調(diào)試過(guò)程中,需要顯示時(shí)間差值和因中斷觸發(fā)產(chǎn)生的標(biāo)
志值。LCD1602 顯然做不到實(shí)時(shí)顯示,增加了調(diào)試的難度。
方案二:LCD12864 液晶顯示屏,是一種具有多種接口方式,內(nèi)部簡(jiǎn)體中文字
庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為 128×64, 內(nèi)置 8192 個(gè) 16*16 點(diǎn)
漢字,和 128 個(gè) 16*8 點(diǎn) ASCII 字符集。利用該模塊靈活的接口方式和簡(jiǎn)單、方
便的操作指令,完全滿足本次設(shè)計(jì)中的顯示需求和調(diào)試需求。
綜上所述,經(jīng)討論采取方案二。 四、電路設(shè)計(jì)
4.1 按鍵發(fā)聲模塊電路設(shè)計(jì)
聲音信號(hào)是通過(guò) 555 單穩(wěn)態(tài)振蕩電路產(chǎn)生。通過(guò)按下開關(guān)按鈕后,下降沿觸
發(fā),555 電路產(chǎn)生持續(xù)時(shí)間為 1s 的聲音信號(hào),使三極管電路飽和導(dǎo)通并放大電
流,驅(qū)動(dòng)無(wú)源蜂鳴器發(fā)聲。整個(gè)電路由 5V 紐扣電池供電,使用小功率三極管 A42
進(jìn)行放大電流,以實(shí)現(xiàn)低功耗。
按鍵發(fā)聲模塊的具體電路如下圖所示:

圖 4.1 按鍵發(fā)聲模塊電路


圖中公有兩個(gè) 555 單穩(wěn)態(tài)振蕩電路,其中第一個(gè) 555 單穩(wěn)態(tài)振蕩電路對(duì)按鍵延 時(shí)防抖,產(chǎn)生準(zhǔn)確的負(fù)脈沖。第二個(gè) 555 單穩(wěn)態(tài)振蕩電路中則產(chǎn)生持續(xù) 1s 的正 脈沖。可見 555 單穩(wěn)態(tài)振蕩電路中,每來(lái)一次負(fù)脈沖,便輸出一個(gè)正脈沖,其寬 度 Tw 由 RC 決定,滿足下列公式:
Tw = 1.1 × RC (s)
其中 R 在圖 4.1 中分別為 R22、R28;C 分別為 C17、C18。通過(guò)調(diào)節(jié) R28 即 可產(chǎn)生持續(xù) 1s 的高電平信號(hào)。
4.2 聲音接收模塊電路設(shè)計(jì) 聲音接收模塊采用駐極體話筒作為聲電轉(zhuǎn)換元件。駐極體話筒輸出端是內(nèi)部
場(chǎng)效應(yīng)管的漏極 D 和源極 S,此電路采用源極輸出,漏極接地的連接方式,故在 源極 S 與電源正極之間接入 10K 電阻。通過(guò)共基極放大電路放大電流信號(hào),再經(jīng) 過(guò)由 LM358 組成的過(guò)零比較器電路輸出方波信號(hào)。電路中設(shè)置有 1K 的電位器 R18,以便調(diào)節(jié) LM358 比較器端的參考電壓,改變電路的靈敏度,使調(diào)試更為方 便。
聲音接收模塊電路具體如下圖所示:
圖 3.2 聲音接收模塊電路 由圖 3.2 可知,比較器輸入端參考電壓實(shí)際為:


本次設(shè)計(jì)采用 STC89C52RC 單片機(jī)進(jìn)行運(yùn)算處理和驅(qū)動(dòng) LCD12864 液晶顯示 屏顯示定位結(jié)果,即利用單片機(jī)內(nèi)部定時(shí)器 0 計(jì)時(shí),由外部中斷 0、外部中斷 1 和定時(shí)器 1 觸發(fā),檢測(cè)接收信號(hào)的下降沿,通過(guò)這種方式計(jì)算聲音傳播后,不同 模塊接收到信號(hào)的時(shí)間差,通過(guò)時(shí)間差計(jì)算出聲源信號(hào)到接收模塊距離,然后由
單片機(jī)編程計(jì)算出聲源的位置坐標(biāo),最終顯示在液晶屏上。
STC89C52RC 單片機(jī)小系統(tǒng)電路和 LCD12864 驅(qū)動(dòng)電路如下圖所示:



五、算法與程序設(shè)計(jì)
5.1 數(shù)據(jù)處理原理:
圖 4.3 STC89C52RC 單片機(jī)模塊

本算法基于時(shí)間差算出未知點(diǎn)的坐標(biāo)點(diǎn)。從理論上分析,只需三個(gè)已知點(diǎn)就 可以對(duì)聲音源進(jìn)行定位,我們首先先將問(wèn)題簡(jiǎn)化為二維平面內(nèi)對(duì)聲音源進(jìn)行定位。
如下圖所示,在一個(gè)平面內(nèi)分布有三個(gè)傳感器 A、B 和 C 坐標(biāo)分別為(0,350)、
(0,0)、(500,0)。當(dāng)平面內(nèi)某處 S(x,y)發(fā)出聲音時(shí),3 個(gè)傳感器將先后接收 到信號(hào),設(shè)信號(hào)到達(dá) A,B 的時(shí)間差為 t1,到達(dá) B,C 的時(shí)間差為 t2,則有:

我們只需在單片機(jī)程序中將 x, y 所有可能值都帶入到上式中,檢查有哪些值滿 足條件即可。



5.2 程序流程圖
圖 5.1 聲音定位系統(tǒng)等效平面圖

圖 5.2

5.3 子程序流程圖:


六、測(cè)試方案
6.1 主要的測(cè)試儀器、儀表
圖 5.3


本次主要使用的測(cè)試儀器與儀表有,函數(shù)信號(hào)發(fā)生器、示波器與數(shù)字萬(wàn)用表。
6.2 測(cè)試方法 在硬件測(cè)試中,按鍵發(fā)聲模塊通過(guò)示波器測(cè)試電路輸出波形,調(diào)節(jié)電位器改
變電阻值來(lái)調(diào)節(jié)觸發(fā)時(shí)間,保證發(fā)出的聲響持續(xù)時(shí)間為 1s;另外使用數(shù)字萬(wàn)用表 測(cè)量按鍵發(fā)聲模塊的功耗。聲音接收模塊通過(guò)數(shù)字萬(wàn)用表,測(cè)量當(dāng)發(fā)聲模塊距接 收模塊不同距離時(shí),比較器輸出電壓,直至調(diào)節(jié)電位器,改變比較器靈敏度使輸
出電壓在要求距離內(nèi)能受到信號(hào),并以下降沿觸發(fā)單片機(jī)。聲響模塊和接收模塊 都可以使用函數(shù)發(fā)生器和示波器來(lái)檢測(cè)電路的連接是否正常。
在軟件測(cè)試中,我們組軟件調(diào)試的中心思想是分模塊調(diào)試。先將程序分為三 個(gè)接受模塊,算法模塊,顯示模塊,我們?cè)诜謮K調(diào)試時(shí),將各個(gè)模塊的輸出都顯 示出來(lái)以便于觀察各模塊是否正確。運(yùn)用這種方法,可以將軟件上的錯(cuò)誤精確定


位到某一個(gè)環(huán)節(jié),大大提高了調(diào)試的效率。以下是具體方法:
1、將程序中的標(biāo)志位 signalA,signalB,signalC 通過(guò) LCD 屏幕顯示出來(lái),以方便 觀察是否所有傳感器都收到了信號(hào)。
2、將各信號(hào)間的時(shí)間差通過(guò) LCD 屏幕顯示出來(lái),以方便觀察各傳感器的響
應(yīng)速度以及接受信號(hào)的先后順序是否與實(shí)際一致。
3、在接入傳感器前,先用另一片單片機(jī)模仿傳感器發(fā)出的信號(hào),并通過(guò)程序 設(shè)置時(shí)間差等參數(shù),用于檢查算法是否正確。
七、系統(tǒng)調(diào)試
7.1 按鍵發(fā)聲模塊
測(cè)試輸出電流(通過(guò)測(cè)量蜂鳴器串聯(lián)的 1Ω的電阻得到電流值),從圖中可知
為 0.042A:


圖 7.1.1
測(cè)試蜂鳴器兩端電壓,從圖中可知為 4.36V:



7.2 聲音接收模塊
圖 7.1.2


當(dāng)聲響模塊離接收模塊距離較近時(shí),接收模塊輸出電壓達(dá)到 3.6V 左右。



圖 7.2.1
當(dāng)聲響模塊離接收模塊較遠(yuǎn)時(shí)(但坐標(biāo)仍屬于坐標(biāo)紙的范圍),接收模塊輸出
電壓將會(huì)變小。這個(gè)時(shí)候就需要調(diào)節(jié)電位器,改變電阻值以減小比較器 LM358 輸 入端參考電壓的值。



7.3 LCD 液晶顯示模塊
圖 7.2.1


進(jìn)行測(cè)試時(shí),LCD12864 液晶顯示模塊除了顯示坐標(biāo) X 與 Y 的值外,還會(huì)顯示 A、B、C 三個(gè)聲音接收模塊的中斷觸發(fā)標(biāo)志值(如下圖顯示屏中第一行所顯示的 內(nèi)容,其中顯示值為 0 表示未觸發(fā),為 1 則表示已觸發(fā)),以及 A、B 和 C 三個(gè) 聲音接收模塊依次收到信號(hào)時(shí)的計(jì)時(shí)時(shí)刻(其中從右到左依次為 0us,65us 和 68us, 此時(shí)模塊 C 最先收到聲音信號(hào)),這樣方便系統(tǒng)調(diào)試。
下圖坐標(biāo) X 與 Y 值在誤差范圍內(nèi),滿足測(cè)量要求。





八、數(shù)據(jù)測(cè)試與處理
圖 7.3.1


8.1 聲響模塊參數(shù)記錄表與測(cè)試數(shù)據(jù) 當(dāng)給聲響模塊供電時(shí)聲響模塊測(cè)試結(jié)果如下表所示:
測(cè)試內(nèi)容
測(cè)試結(jié)果
按鍵發(fā)生
聲音信號(hào)持續(xù)時(shí)間
1 .023s
功耗測(cè)試
183.12mW(4.36V,0.042A)
表 8.1
8.2 聲音接收模塊輸出電壓記錄表與測(cè)試數(shù)據(jù)
比較電路在不同靈敏度下,距聲源不同距離時(shí)聲音接收模塊輸出電壓測(cè)試結(jié)
果如下表所示:
表 8.2
從表 8.2 可以看出,當(dāng)電位器阻值較小時(shí)即比較器輸入端參考電壓接近 0 時(shí)
更易收到信號(hào),但實(shí)際上這樣做也更容易受到干擾。接收模塊 C 相較于 A、B 模
塊了,由于焊接工藝的問(wèn)題,靈敏度較低。合理調(diào)節(jié)電位器阻值之后,三個(gè)模塊
最終都能受到信號(hào),滿足設(shè)計(jì)要求。
8.3 聲源實(shí)測(cè)坐標(biāo)記錄表 對(duì)處于不同坐標(biāo)的聲源進(jìn)行了實(shí)際測(cè)量,最終得到了以下的一些實(shí)測(cè)數(shù)據(jù)如

下表所示:

從表中可以看出,除個(gè)別點(diǎn)外,坐標(biāo)紙的四個(gè)方向邊緣區(qū)域以及中間區(qū)域共
取了 5 個(gè)點(diǎn),其實(shí)測(cè)坐標(biāo)基本滿足設(shè)計(jì)要求。而個(gè)別點(diǎn)的誤差可能是由于接收模 塊放置的位置不準(zhǔn)確或聲源放置地不準(zhǔn)確而產(chǎn)生。
九、總結(jié)
本次設(shè)計(jì)以 STC89C52 為核心部件,利用了聲音檢測(cè)與辨識(shí)技術(shù),利用嚴(yán)密的 數(shù)學(xué)方法實(shí)現(xiàn)和確定了聲源的準(zhǔn)確定位。在系統(tǒng)設(shè)計(jì)過(guò)程中,力求硬件電路簡(jiǎn)單, 降低硬件成本,節(jié)約功耗。
在這次設(shè)計(jì)中,我們遇到了許多問(wèn)題,這些問(wèn)題我們之前從未遇到過(guò), 但最終我們都找到了解決這些問(wèn)題的辦法,這對(duì)我們來(lái)說(shuō)是一次很好的鍛煉。在 程序設(shè)計(jì)與軟件調(diào)試的過(guò)程之中,由于我們同時(shí)使用了 STC89C52 單片機(jī)中的四 個(gè)中斷進(jìn)行控制處理,對(duì)于單片機(jī)各個(gè)中斷的優(yōu)先級(jí)與觸發(fā)的考慮更為復(fù)雜,但 只要結(jié)合函數(shù)信號(hào)發(fā)生器模擬聲音信號(hào)觸發(fā)單片機(jī)得到調(diào)試結(jié)果,并且根據(jù)這些
結(jié)果不斷改正程序,就能得到最優(yōu)的程序設(shè)計(jì)。另外在程序設(shè)計(jì)過(guò)程,由于子程 序中數(shù)據(jù)處理十分重要,我們查閱了許多的資料,對(duì)于 C51 中的數(shù)據(jù)類型以及常 用的庫(kù)函數(shù)也更加的熟悉。在硬件調(diào)試過(guò)程中,出現(xiàn)了聲音接收模塊電路不穩(wěn)定, 易受到干擾,以及放大電路難以調(diào)試的問(wèn)題。對(duì)于接下來(lái)設(shè)計(jì)之后,我們也 會(huì)考慮重新設(shè)計(jì)相關(guān)電路,例如采用雙比較器電路進(jìn)行比較放大,來(lái)提高電路的性能。
電路原理圖



相關(guān)作品圖片
(1)作品整體圖:

(2)按鍵發(fā)聲模塊


(3)聲音接收模塊
(4)單片機(jī)小系統(tǒng)



單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include "delay.h"
  4. #include "lcd.h"
  5. #include<math.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. #define BOOL bit
  9. #define BYTE unsigned char
  10. #define WORD unsigned int

  11. uchar signalA,signalB,signalC;
  12. uchar wolsignalA,wolsignalB,wolsignalC;
  13. uchar wolCount,obv;
  14. unsigned int posX,posY;         //坐標(biāo)取值

  15. code unsigned char byValidShow[] = {" V值:           "};
  16. code unsigned char DispX[] = {" X軸:           "};
  17. code unsigned char DispY[] = {" Y軸:           "};

  18. void Init_Show()           //LCD初始化顯示子程序
  19. {
  20.         Delay400Ms();
  21.         LCDInit();
  22.         LCDClear();
  23.         Delay5Ms();
  24.         LCDClear();
  25.         //DisplayListChar(0,1,byValidShow);
  26.         DisplayListChar(0,2,DispX);
  27.         DisplayListChar(0,3,DispY);
  28.         Delay5Ms();
  29. }

  30. void Init_isr()                //中斷初始化設(shè)置子程序
  31. {
  32.         EA = 0;
  33.         TMOD = 0x62;        
  34.         /*外部中斷0*/
  35.         IT0 = 1; EX0 = 1;
  36.         /*外部中斷1*/
  37.         IT1 = 1; EX1 = 1;
  38.         /* 計(jì)數(shù)器 0*/
  39.         TH1 = 0xFF; TL1 = 0xFF; TR1 = 1; ET1 = 1;
  40.         /* 定時(shí)器 1*/
  41.         TH0 = 246; TL0 = 246; TR0 = 0; ET0 = 0;
  42.         /***********/
  43.         IE0=0;IE1=0;TF1=0;TF0=0;
  44.         EA = 1;
  45. }

  46. void signalchuli(float m,float n)  //坐標(biāo)定位計(jì)算程序
  47. {

  48.         BOOL r1=0;
  49.         BOOL r2=0; //方程是否成立變量
  50.         BOOL suc=0; //解題是否成功變量
  51.         float x,y;        
  52.         for(x=10;x<=500;x+=10)
  53.         {
  54.                 for(y=10;y<=350;y+=10)
  55.                 {
  56.                         if(fabs(sqrt(x*x+(350-y)*(350-y))- sqrt(x*x+y*y)-m)<=20.0)
  57.                                 r1=1;
  58.                         //else r1=0;
  59.                         if(fabs(sqrt(x*x+y*y)-sqrt(y*y+(500-x)*(500-x)) -n)<=20.0)
  60.                                 r2=1;
  61.                         //else r2=0;
  62.                         if(r1&&r2)
  63.                                 {
  64.                                         suc=1;
  65.                                         break;
  66.                                 }
  67.                         else
  68.                                 {
  69.                                         r1=0;
  70.                                         r2=0;
  71.                                 }
  72.                 }
  73.                 if(suc)
  74.                         break;
  75.         }
  76.         
  77.         posX=x;
  78.         posY=y;
  79.         
  80. }

  81. void main()
  82. {
  83.         float cha1,cha2;
  84.         uchar cha1_temp,cha2_temp;
  85.         EA=0;
  86.         Init_Show();
  87.         Init_isr();               
  88.         while(1)
  89.         {
  90.                 if( signalA && signalB && signalC)
  91.                 {
  92.                         EA = 0;
  93.                         TR0=0;
  94.                         obv++;
  95.                         cha1_temp = wolsignalA - wolsignalB;
  96.                         cha2_temp = wolsignalB - wolsignalC;
  97.                         if(wolsignalA < wolsignalB)
  98.                         {
  99.                                 cha1_temp = 65536 - cha1_temp;
  100.                                 cha1 = -(3.4*cha1_temp);
  101.                         }
  102.                         else
  103.                         {
  104.                                 cha1 = 3.4*cha1_temp;
  105.                         }
  106.                         if(wolsignalB < wolsignalC)
  107.                         {
  108.                                 cha2_temp = 65536 - cha2_temp;
  109.                                 cha2 = -(3.4*cha2_temp);
  110.                         }
  111.                         else
  112.                         {
  113.                                 cha2 = 3.4*cha2_temp;
  114.                         }
  115.                         signalchuli(cha1,cha2);
  116.                         DisplayADData(4,2,posX);
  117.                         DisplayADData(4,3,posY);  //顯示坐標(biāo)
  118.                         signalA = 0;         
  119.                         signalB = 0;
  120.                         signalC = 0;                        
  121.                         wolCount = 0;
  122.                         Init_isr();
  123.                 }
  124.                 DisplayADData(0,4,wolsignalA);
  125.                 DisplayADData(3,4,wolsignalB);
  126.                 DisplayADData(6,4,wolsignalC);        //顯示時(shí)間插值,方便調(diào)試

  127.                 DisplayADData(0,1,signalA);        
  128.                 DisplayADData(3,1,signalB);
  129.                 DisplayADData(6,1,signalC);                //顯示觸發(fā)標(biāo)志位,方便調(diào)試
  130.         }
  131. }

  132. void JsA_isr() interrupt 0         //外部中斷0,下降沿觸發(fā)
  133. {
  134.         EX0 = 0;
  135.         if(wolCount == 0)
  136.         {
  137.                 wolsignalA = 0;
  138.                 TR0 = 1;
  139.                 ET0 = 1;
  140.         }
  141.         else
  142.         {
  143.                 wolsignalA = wolCount;
  144.         }
  145.         signalA = 1;
  146. }

  147. void JsB_isr() interrupt 2          //外部中斷1,下降沿觸發(fā)
  148. {
  149.         
  150.         if(wolCount == 0)
  151.         {
  152.                 wolsignalB = 0;
  153.                 TR0 = 1;
  154.                 ET0 = 1;
  155.         }        
  156.         else
  157.         {
  158.                 wolsignalB = wolCount;
  159.         }
  160.         signalB =1;
  161.         EX1 = 0;
  162. }

  163. void Timer1_isr() interrupt 3        //計(jì)數(shù)器1,工作方式2
  164. {
  165.         if(wolCount == 0)
  166.         {
  167.                 wolsignalC = 0;
  168.                 TR0 = 1;
  169.                 ET0 = 1;
  170.         }
  171.         else
  172.         {
  173.                 wolsignalC = wolCount;
  174.         }
  175.         signalC = 1;
  176.         ET1 = 0;        
  177. }                 

  178. void Timer0_isr() interrupt 1  //定時(shí)器0,工作方式2 , 10us
  179. {
  180.         wolCount++;        
  181. }
復(fù)制代碼

以上文檔與程序資料51hei下載(初學(xué)作品,如有錯(cuò)誤請(qǐng)大家多多指導(dǎo)):
基于51的聲音定位系統(tǒng).rar (1.6 MB, 下載次數(shù): 177)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1020584 發(fā)表于 2022-4-23 14:08 | 只看該作者
請(qǐng)問(wèn)您這個(gè)定位系統(tǒng)在使用另一個(gè)單片機(jī)仿真模擬傳感器信號(hào)的時(shí)候怎么操作的呀
回復(fù)

使用道具 舉報(bào)

板凳
ID:1018456 發(fā)表于 2022-4-24 23:39 | 只看該作者
PSNR 發(fā)表于 2022-4-23 14:08
請(qǐng)問(wèn)您這個(gè)定位系統(tǒng)在使用另一個(gè)單片機(jī)仿真模擬傳感器信號(hào)的時(shí)候怎么操作的呀

protues上可以仿真一下信號(hào)
回復(fù)

使用道具 舉報(bào)

地板
ID:1020584 發(fā)表于 2022-4-25 12:39 | 只看該作者
783748306 發(fā)表于 2022-4-24 23:39
protues上可以仿真一下信號(hào)

我用兩個(gè)單片機(jī)實(shí)際仿真總是出現(xiàn)問(wèn)題 顯示的時(shí)間差與設(shè)定的不一樣 是因?yàn)閱纹瑱C(jī)引腳輸出信號(hào)不穩(wěn)定嗎 求助
回復(fù)

使用道具 舉報(bào)

5#
無(wú)效樓層,該帖已經(jīng)被刪除
6#
無(wú)效樓層,該帖已經(jīng)被刪除
7#
ID:1039802 發(fā)表于 2022-7-17 20:30 | 只看該作者
請(qǐng)問(wèn)這個(gè)程序里面是不是還有一些時(shí)間之類的程序代碼需要另外寫啊,我照著寫了一下,結(jié)果出現(xiàn)了bug,求助
回復(fù)

使用道具 舉報(bào)

8#
ID:979908 發(fā)表于 2022-11-16 22:13 來(lái)自觸屏版 | 只看該作者
783748306 發(fā)表于 2022-4-24 23:39
protues上可以仿真一下信號(hào)

用proteus怎么仿真啊,在發(fā)聲模塊會(huì)出聲音嗎?在顯示模塊會(huì)顯示坐標(biāo)嗎?求助
回復(fù)

使用道具 舉報(bào)

9#
ID:979908 發(fā)表于 2022-11-16 22:15 來(lái)自觸屏版 | 只看該作者
在proteus怎么仿真啊,發(fā)聲模塊會(huì)發(fā)出聲音嗎?顯示模塊會(huì)顯示坐標(biāo)嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表