《基于單片機(jī)的智能防近視系統(tǒng)設(shè)計(jì)》12000字(論文)_第1頁
《基于單片機(jī)的智能防近視系統(tǒng)設(shè)計(jì)》12000字(論文)_第2頁
《基于單片機(jī)的智能防近視系統(tǒng)設(shè)計(jì)》12000字(論文)_第3頁
《基于單片機(jī)的智能防近視系統(tǒng)設(shè)計(jì)》12000字(論文)_第4頁
《基于單片機(jī)的智能防近視系統(tǒng)設(shè)計(jì)》12000字(論文)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

摘要現(xiàn)在社會(huì)科技快速發(fā)展,單片機(jī)作為熱門的微處理器應(yīng)用十分廣泛,智能化產(chǎn)品已經(jīng)成了每家每戶的必需品,而所有智能產(chǎn)品中都不可能缺少了單片機(jī)的身影。在我們?nèi)粘5墓ぷ骱蛯W(xué)習(xí)中,很多人因?yàn)閷懽挚磿约稗k公姿勢不正確,長時(shí)間疲勞的工作和學(xué)習(xí)導(dǎo)致近視眼及頸椎病。所以,本文介紹了一種基于單片機(jī)的智能防近視系統(tǒng)。本設(shè)計(jì)主要使用STC89C52單片機(jī)作為主控制芯片,系統(tǒng)利用超聲波測距原理來感應(yīng)人與桌面的距離,通過光敏電阻檢測周圍環(huán)境內(nèi)光強(qiáng)度的變化。當(dāng)光線強(qiáng)度較弱時(shí),系統(tǒng)語音模塊會(huì)進(jìn)行語音提示開燈;當(dāng)人距離桌面太近時(shí),會(huì)語音提示保持正確姿勢。同時(shí)系統(tǒng)還具有定時(shí)功能,達(dá)到預(yù)訂時(shí)間后會(huì)語音提醒使用者應(yīng)該進(jìn)行休息,防止長時(shí)間疲勞工作和學(xué)習(xí)。報(bào)警距離和定時(shí)時(shí)間都可以通過按鍵來設(shè)置,方便不同使用者的使用情況。系統(tǒng)使用LCD1602顯示器對(duì)環(huán)境內(nèi)的光照強(qiáng)度以及人距離桌面的距離等信息進(jìn)行顯示。同時(shí)系統(tǒng)還具有藍(lán)牙通信模塊,可以和智能手機(jī)的藍(lán)牙進(jìn)行配對(duì),將LCD1602顯示器的內(nèi)容到手機(jī)屏幕上進(jìn)行顯示。此設(shè)計(jì)采用模塊化結(jié)構(gòu),設(shè)計(jì)思路清晰,控制準(zhǔn)確,可靠性高。關(guān)鍵詞:單片機(jī);超聲測距;LCD顯示;藍(lán)牙通信1引言1.1課題研究的目的與意義近年來,國內(nèi)經(jīng)濟(jì)呈現(xiàn)高速發(fā)展的趨勢,伴隨著智能系統(tǒng)控制技術(shù)逐漸普遍起來。智能控制技術(shù)也進(jìn)入了普通百姓的生活中,基于智能控制技術(shù),出現(xiàn)了很多智能化控制的應(yīng)用場景[1]。 目前國內(nèi)近視人群越來越多以及近視人群年齡段越來越小,其中多數(shù)都是由于平時(shí)不良的讀書寫字習(xí)慣,姿勢不正確或者長時(shí)間疲勞學(xué)習(xí)不運(yùn)動(dòng)導(dǎo)致。基于這種現(xiàn)象,本文介紹了一種基于單片機(jī)的智能防近視系統(tǒng),系統(tǒng)可以對(duì)人與桌面的距離及學(xué)習(xí)時(shí)間進(jìn)行實(shí)時(shí)的監(jiān)控,并能在距離過近或?qū)W習(xí)時(shí)間過長時(shí)進(jìn)行語音提示,可以有效的督促使用者保持良好的坐姿以及適當(dāng)?shù)膶W(xué)習(xí)時(shí)間。1.2研究的內(nèi)容和意義隨著人們生活水平的逐漸提升,對(duì)健康高質(zhì)量的生活也有追求。因此,現(xiàn)在對(duì)健康有幫助的智能化產(chǎn)品越來越熱門。例如,現(xiàn)在很多智能手環(huán)都具有定時(shí)提醒的功能,可以提醒使用者按時(shí)飲水或者按時(shí)進(jìn)行鍛煉,監(jiān)控心率。本文介紹的是一款智能防近視系統(tǒng),不僅可以在坐姿不正確,距離近的時(shí)候進(jìn)行提示,同時(shí)也具有定時(shí)器功能,防止疲勞[2]。同時(shí)還具有通信模塊,通過藍(lán)牙模塊和手機(jī)進(jìn)行通信,可以將系統(tǒng)屏幕顯示的內(nèi)容同步到手機(jī)的屏幕進(jìn)行顯示,方便家長對(duì)孩子的學(xué)習(xí)坐姿和學(xué)習(xí)時(shí)長進(jìn)行觀察,非常具有實(shí)用價(jià)值,可以對(duì)孩子進(jìn)行健康的檢測與預(yù)防。1.3發(fā)展?fàn)顩r及發(fā)展前景隨著電子產(chǎn)品的普及,我國近視眼的人群逐年增多,同時(shí)也有很多學(xué)生和上班族出現(xiàn)了頸椎病[3]。因此很多智能產(chǎn)品也都開始有了健康相關(guān)的功能,比如智能手機(jī)或者手環(huán)可以記錄每天走路的步數(shù),檢測睡眠質(zhì)量和心率等。相信在未來,隨著控制器的體積越來越小,傳感器的精度越來越高,各種智能產(chǎn)品也會(huì)設(shè)計(jì)的更加智能,更加方便[4]。2系統(tǒng)方案和硬件選擇2.1設(shè)計(jì)方案模塊 本設(shè)計(jì)是用STC89C52芯片作為主控部分,這個(gè)方案使用的是模塊化的思路設(shè)計(jì)。方案中包括超聲測距模塊,語音模塊,藍(lán)牙模塊,光線檢測模塊,LCD顯示模塊,及電源模塊[5]。各模塊均與單片機(jī)的I/O口進(jìn)行通信,設(shè)計(jì)的系統(tǒng)總框圖如2-1圖所示。圖2-1單片機(jī)模塊系統(tǒng)分別對(duì)各個(gè)模塊的功能做簡單的介紹:超聲測距模塊:HC-SR04超聲波模塊進(jìn)行距離的測量,并將采集的值傳給單片機(jī)處理。語音模塊:使用WT588D語音模塊進(jìn)行語音提示。藍(lán)牙模塊:實(shí)現(xiàn)單片機(jī)和手機(jī)的通信,將數(shù)據(jù)從單片機(jī)傳到手機(jī)進(jìn)行顯示。光線檢測模塊:使用光敏電阻對(duì)周圍環(huán)境的光強(qiáng)進(jìn)行監(jiān)測,并將采集的值傳給單片機(jī)處理。LCD顯示模塊:對(duì)距離及光線強(qiáng)度等信息進(jìn)行顯示。2.2單片機(jī)的選擇方案一:采用STC89C52單片機(jī) STC89C52單片機(jī)是一款常用的微處理器,穩(wěn)定性可靠性比較強(qiáng)。具有供電電壓低,性能高的特點(diǎn),是一款8位處理器。89C52系列單片機(jī)一共有40個(gè)引腳,其中包括4組8位并行I/O口,分別記做P0-P3;有一個(gè)可以雙向通信的串行端口,還擁有可以隨時(shí)中斷程序的中斷源,共5個(gè),兩個(gè)中斷優(yōu)先級(jí)以及位數(shù)達(dá)到16位的定時(shí)器。一個(gè)4K的程序存儲(chǔ)器,和一個(gè)128B的數(shù)據(jù)存儲(chǔ)器是STC89C52單片機(jī)存儲(chǔ)部分的核心,同時(shí)STC89C52還帶有4KB的FLASH存儲(chǔ)空間,F(xiàn)LASH中存的東西可隨時(shí)擦除修改,這個(gè)特點(diǎn)讓程序的修改和調(diào)試非常方便[6]。STC89C52微控制器的使用效率非常高,因?yàn)樾酒袑㈤W存也封裝在里面,同時(shí)還含有中斷控制,定時(shí)器等部件。它與工業(yè)標(biāo)準(zhǔn)的MCS51指令集也相互兼容,與8051等其他型號(hào)單片機(jī)兼容,結(jié)構(gòu)簡單,靈活性高,價(jià)格低廉。方案二:使用AVR單片機(jī) AVR單片機(jī)是8位的,它是一款高速單片機(jī)。AVR微處理器內(nèi)部擁有高質(zhì)量的FLASH。由于始終頻率較高,所以,執(zhí)行指令的速度很快,執(zhí)行每條指令給程序帶來的延時(shí)很小。但是AVR單片機(jī)內(nèi)部沒有類似累加器的功能,需要反復(fù)使用內(nèi)部的寄存器。方案三:采用MSP430單片機(jī) MSP430單片機(jī)是16位的,由TI公司生產(chǎn)的一款單片機(jī),擁有很好的低功耗性能。根據(jù)功能和內(nèi)存大小等具體配置的差異,分為不同系列。從最開始的11x系列,發(fā)展到后來的33x系列和F13系列、F14系列等等。由于是16位處理器,因此處理能力很強(qiáng),同時(shí)運(yùn)算速度也是很快。此外,其片內(nèi)資源也比較豐富,包括看門狗,定時(shí)器,以及一些常見的硬件通信接口等等。同時(shí)也有固定的編譯軟件,方便開發(fā)者進(jìn)行開發(fā)。 幾種方案相比,MSP430單片機(jī)和AVR單片機(jī)性能雖好,但是本設(shè)計(jì)中對(duì)資源的硬性需求很少,使用它兩相對(duì)浪費(fèi),而且價(jià)格也相對(duì)比較貴。而STC89C52單片機(jī)的資源就完全可以滿足本設(shè)計(jì)的需求,且價(jià)格也相對(duì)比較便宜,在兼顧到性價(jià)比的前提下采用方案一使用STC89C52更符合本設(shè)計(jì)需求。2.3顯示電路的選擇方案一:采用LED數(shù)碼管動(dòng)態(tài)掃描顯示因?yàn)長ED數(shù)碼管是采用八段來組成的,所以可顯示的值相對(duì)比較單一,例如數(shù)字或者簡單的字母,對(duì)一些字符顯示實(shí)現(xiàn)起來很困難或者不顯示。同時(shí)與單片機(jī)連接時(shí)需要用到很多I/O口,并且由于單片機(jī)的I/O口電流驅(qū)動(dòng)能力很微弱,需要外接三極管進(jìn)行驅(qū)動(dòng),占用電路板空間比較大,而且會(huì)增加成本。如果使用多位數(shù)碼管時(shí)情況則更加復(fù)雜。方案二:采用LCD1602液晶顯示屏LCD1602液晶顯示屏尺寸相對(duì)大一些,可展示內(nèi)容更豐富??娠@示數(shù)字和字母以及各種符號(hào)和字符,顯示的內(nèi)容相對(duì)比較豐富多彩。LCD1602液晶顯示器中的每一個(gè)字符都是通過相同的點(diǎn)陣結(jié)構(gòu)組成的,也是根據(jù)顯示的內(nèi)容不同,來點(diǎn)亮不同的點(diǎn)陣位置。LCD1602的軟件控制指令也比較簡單。他既可以用并行數(shù)據(jù)傳輸也可以采用串行數(shù)據(jù)傳輸。通過兩種方案的對(duì)比,其實(shí)兩種方案都可以,但第二種可以顯示更多內(nèi)容,所以,設(shè)計(jì)選擇使用方案二,使用LCD1602屏幕進(jìn)行距離及光強(qiáng)的顯示。2.4光敏模塊的選擇方案一:使用光敏電阻光敏電阻是一款能將可見光信號(hào)轉(zhuǎn)變成電信號(hào)輸出的光電元件,且價(jià)格比較便宜。具響應(yīng)速度很快,在光強(qiáng)變化的時(shí)候能快速反應(yīng)跟上變化。光敏的體積一般都很小,比較小的直徑僅有3毫米。雖然體積小,但可提供最大工作電壓卻很大,在120或240V交流電路中光敏電阻仍然可以正常工作。光敏電阻具有環(huán)氧樹脂封裝、響應(yīng)時(shí)間很短、占用電路板空間小、可靠性高等特點(diǎn)。方案二:使用光電二極管光電二極管是一種具有特殊功能的二極管,可將光信號(hào)轉(zhuǎn)化成電信號(hào)。其內(nèi)部構(gòu)造和普通的二極管沒什么區(qū)別,都是由一個(gè)PN結(jié)構(gòu)成。為了能更好的接受光信號(hào),不同的是內(nèi)部PN結(jié)面積比普通二極管的PN結(jié)大很多。光電二級(jí)管的特性是,在光照條件不同的時(shí)候,其電流也是不一樣的。通過對(duì)比方案一的功能和性價(jià)比會(huì)更合適此次設(shè)計(jì)。2.5語音模塊的選擇方案一:WT588D語音芯片WT588D這款語音芯片是具有單片機(jī)內(nèi)核的,功能很多,音質(zhì)很好,應(yīng)用的范圍很廣,性能也是非常的穩(wěn)定,相對(duì)于其他語音芯片優(yōu)勢很大。首先WT588D可以使用MP3模式對(duì)其進(jìn)行控制,除此之外還可以使用按鍵模式或者按鍵組合模式,以及使用并口模式進(jìn)行控制;還有三種模式的串口模式控制,分別是:一線串口控制模式、三線串口控制模式以及三線串口控制I/O口擴(kuò)展輸出模式,具有這么多控制模式可以很方便大家的應(yīng)用,在很多場景進(jìn)行控制都沒有問題[7]。WT588D語音芯片的最大優(yōu)勢為音質(zhì)效果,在同級(jí)別語音芯片中效果最好,可以播放的音頻范圍很寬廣,播放聲音的效果也很好。WT588D芯片可以通過原廠研發(fā)的軟件對(duì)其要播放的語音進(jìn)行設(shè)置。他能夠控制的語音地址位非常多,最多能達(dá)220個(gè),可加載很多,組合語音的最大值是128。并且他的內(nèi)部還有SPI-FLASH存儲(chǔ)器,不需外接FLASH,因此,能省下很多的電路板空間。同時(shí)其內(nèi)部的SPI-FLASH存儲(chǔ)器都是可以任意修改的,通過修改其內(nèi)容,同時(shí)WT588D芯片可以對(duì)SPI-FLASH內(nèi)容進(jìn)行在線下載,這個(gè)功能是非常具有優(yōu)勢的。方案二:LD3320語音芯片LD3320是語音識(shí)別芯片,可以識(shí)別非特定語音。僅僅使用一個(gè)芯片就實(shí)現(xiàn)語音識(shí)別的功能。LD3320芯片上具有A/D和D/A接口,其精度都比較高。同時(shí)其內(nèi)部具有Flash和RAM,因此均不需要外接,能有效節(jié)省電路板空間[8]。不僅可以實(shí)現(xiàn)語音識(shí)別的功能,同時(shí)還可以實(shí)現(xiàn)人和機(jī)器進(jìn)行對(duì)話互動(dòng)的功能。如果使用LD3320的話,應(yīng)用非常的廣泛,可以完全滿足語音識(shí)別功能的需求,并且具有很大的靈活性。綜合上兩種方案,雖都可以滿足語音播報(bào)的要求,但方案一價(jià)格較低,性價(jià)比較高。所以,采用方案一WT588D芯片進(jìn)行語音播報(bào)。2.6本章小結(jié)本章介紹了系統(tǒng)設(shè)計(jì)的整體思路,包括系統(tǒng)設(shè)計(jì)框圖以及主控制單片機(jī)的選擇,系統(tǒng)顯示方式的選擇,語音提示模塊的選擇以及光敏模塊的選擇,為下文的硬件具體設(shè)計(jì)做鋪墊。3硬件電路設(shè)計(jì)3.1單片機(jī)外圍電路STC89C52是一款高性能8位微控制器,其功耗較低。使用的是MCS-51的內(nèi)核,這款內(nèi)核非常經(jīng)典,有很多微處理器都使用了這一款內(nèi)核。從硬件功能上來看,它使用的是一個(gè)8位的CPU。隨著成本的降低,它在越來越多的智能化場景中被應(yīng)用了起來。STC89C52的具體硬件配置如下:一共具有40個(gè)引腳,其中32位I/O口線,3個(gè)16位定時(shí)器,這三個(gè)定時(shí)器也可以當(dāng)做計(jì)數(shù)器來使用。同時(shí)內(nèi)部具有看門狗電路,可以確保單片機(jī)的穩(wěn)定性,還可以通過外部的按鍵對(duì)單片機(jī)進(jìn)行復(fù)位。最高主頻35M[9],在8位的CPU中,其不僅內(nèi)部有8k字節(jié)Flash,還有RAM資源可供開發(fā)者使用。另外STC89C52還支持2種低功耗方式,可通過軟件進(jìn)行選擇。第一種是通過讓CPU停止工作的方式來降低功耗;第二種是方式是直接切斷電源,使所有資源均停止工作。由于單片機(jī)的外圍電路相對(duì)固定,可以被開發(fā)者們成為最小系統(tǒng),其含有STC89C52單片機(jī),晶振電路,復(fù)位電路和存儲(chǔ)電路等。3.1.1STC89C52的管腳說明STC89C52有兩種封裝模式可以選擇,一種是貼片的PLCC封裝,另一種是直插的PDIP。這里采用直插式的封裝,相對(duì)于PLCC封裝便于焊接。為了防止焊接時(shí)高溫對(duì)單片機(jī)造成損壞,可以在單片機(jī)下面先焊接一個(gè)座子,然后將單片機(jī)插入卡緊即可,也方便單片機(jī)的更換,方便每次換單片機(jī)不需要重新焊接。STC89C52一共具有40只引腳,其中有32個(gè)可控制引腳,引腳可分為4組,每組8個(gè),可記為P0-P3。這些引腳的配置非常靈活,可以分別單獨(dú)控制,也可以同時(shí)控制。在控制的時(shí)候也很簡單,明確定義是輸出引腳還是輸入引腳后,再根據(jù)指令執(zhí)行輸入或輸出。STC89C52的管腳圖如圖3-1所示。圖3-1STC89C52管腳圖P0口是雙向的8位三態(tài)I/O口,它的一個(gè)最重要的特點(diǎn)是其內(nèi)部不具有上拉電阻,為高阻狀態(tài),如果使用P0口時(shí)要外接上拉電阻才能正常輸出,一般直接在P0口上加一個(gè)4.7K的排阻。P1口是準(zhǔn)雙向的I/O口內(nèi)部帶上拉電阻,所以不需要外接上拉電阻。當(dāng)輸入時(shí)必須先進(jìn)行寫1操作,因?yàn)槠渥鳛檩敵鍪褂脮r(shí)沒有高阻狀態(tài)。P1.0和P1.1這兩個(gè)I/O口比較特殊,分別具有額外的附加功能。其中P1.0可以作為T2定時(shí)器/計(jì)數(shù)器的外部輸入,而P1.1則作為T2的外部控制端。P2口與P1口相似,不過P2口只有準(zhǔn)雙向的輸入輸出功能。P3口的是最復(fù)雜的,單片機(jī)很多豐富的功能都要靠P3口的資源來實(shí)現(xiàn)。其所有的I/O口都具有特殊的功能。一些中斷功能,計(jì)時(shí)器功能都是由這些接口來實(shí)現(xiàn)的。3.1.2復(fù)位電路復(fù)位電路是每個(gè)單片機(jī)最小系統(tǒng)必須具備的部分,其可以使單片機(jī)從一些異常狀態(tài)中恢復(fù)到初始狀態(tài),并繼續(xù)工作。單片機(jī)的復(fù)位功能在平時(shí)使用的還是比較多的,比如單片機(jī)開機(jī)異常,程序突然中斷以及出現(xiàn)未知的狀況,再或者死機(jī)等情況,一般可以通過復(fù)位單片機(jī)來解決。復(fù)位后,PC程序計(jì)數(shù)器的內(nèi)容為0000H。片內(nèi)RAM中內(nèi)容不變。本設(shè)計(jì)采用的是手動(dòng)開關(guān)復(fù)位,如圖3-2所示。除了此種復(fù)位方式之外,還可以使用自動(dòng)復(fù)位的方式。使用手動(dòng)復(fù)位的優(yōu)點(diǎn),就在于控制起來非常的方便,需要對(duì)單片機(jī)進(jìn)行復(fù)位的時(shí)候只需手動(dòng)按一下復(fù)位按鍵即可。圖3-2手動(dòng)開關(guān)復(fù)位電路3.1.3晶振電路晶振電路同樣是單片機(jī)最小系統(tǒng)中不可缺少的部分,我們也常常稱其為晶體振蕩器。單片機(jī)內(nèi)部使用的時(shí)鐘信號(hào)都是來源于外部晶振。晶體振蕩器的功能是為系統(tǒng)提供所需的時(shí)鐘信號(hào)。本系統(tǒng)所使用晶振頻率為11.0592MHZ,外圍電路圖如下圖3-3所示。單片機(jī)片內(nèi)也有振蕩器,經(jīng)方向放大之后和片外連接,其中19腳和20腳分別是片內(nèi)振蕩器反相放大器的輸入端和輸出端。采用內(nèi)部振蕩器時(shí),XTAL1和XTAL2通過一個(gè)微調(diào)頻率的小電容接到外部石英晶體的兩端;采用外部振蕩器時(shí),XTAL2引腳懸空[10]。圖3-3晶振外圍電路3.2超聲測距模塊介紹3.2.1超聲測距模塊介紹 HC-SR04超聲波測距模塊,不用實(shí)物體接觸就可實(shí)現(xiàn)測距功能。測量的范圍可大可小,距離在5米以內(nèi)都可以進(jìn)行準(zhǔn)確的測量。模塊上包括了超聲波發(fā)射器、接收器與控制電路。模塊直接與單片機(jī)相連接就可以進(jìn)行相互通信,使用起來非常的方便。3.2.2超聲測距電路 本設(shè)計(jì)中采用的是超聲波測距模塊,模塊與單片機(jī)的接口電路圖如圖3-4所示,VCC為5V供電,GND連接系統(tǒng)的GND,TRIG觸發(fā)控制信號(hào)輸入連接到單片機(jī)的第7腳,ECHO回響信號(hào)輸出連接到單片機(jī)第8腳。圖3-4模塊與單片機(jī)的接口電路圖3.3光敏模塊電路3.3.1光敏模塊的應(yīng)用光敏電阻內(nèi)部一般是化學(xué)物質(zhì)硫化鎘。這種物質(zhì)的物理特性,由于光波長不同,其電阻的值也會(huì)跟著產(chǎn)生變化。有的電阻是正系數(shù)變化,有的則是負(fù)系數(shù)變化。光敏電阻的電極一般采用硫狀圖案,結(jié)構(gòu)見下圖3-5所示:圖3-5光敏電阻結(jié)構(gòu)圖由于電阻沒法實(shí)時(shí)測量,因此,光敏電阻通過兩端電壓變化,得到光敏電阻阻值的變化狀態(tài)。然后利用STC89C52單片機(jī)對(duì)阻值的變化進(jìn)行分析,最后判斷是光線的強(qiáng)弱程度。3.3.2光敏模塊和AD模塊電路 光敏模塊和AD模塊電路如圖3-6所示,通過光敏電阻GR1兩端電壓的變化,間接得到光敏電阻的阻值變化情況。使用它和R6進(jìn)行分壓,根據(jù)歐姆定律,電壓和電阻是成正比的,因此得到電阻和光強(qiáng)的關(guān)系。通過ADC0832芯片,將模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),再通過STC89C52單片機(jī)對(duì)數(shù)字信號(hào)進(jìn)行分析,最后判斷光線的強(qiáng)弱程度。圖3-6光敏模塊和AD模塊電路ADC0832的工作狀態(tài)由使能引腳CS來進(jìn)行控制,CS引腳是低電平有效的,當(dāng)CS為低電平時(shí),器件才被使能。當(dāng)CS為高電平的時(shí)候,器件的模數(shù)轉(zhuǎn)換功能被禁止,且CS的電平在AD轉(zhuǎn)換的過程中不能突變,AD轉(zhuǎn)換一刻起一直到轉(zhuǎn)換結(jié)束,CS引腳應(yīng)一直保持低電平不能變化。CLK引腳為器件的時(shí)鐘引腳,在本設(shè)計(jì)中,CLK引腳和單片機(jī)的P1.4引腳相連接,通過單片機(jī)給ADC0832芯片提供時(shí)鐘。ADC0832有CH0和CH1兩個(gè)通道可用。在本設(shè)計(jì)中我們使用的是CH0通道,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。ADC0832轉(zhuǎn)換時(shí)序圖如圖3-7所示,根據(jù)時(shí)序圖分析其具體工作過程:DI引腳應(yīng)該在第一個(gè)時(shí)鐘下降沿到來之前保持高電平,作為轉(zhuǎn)換開始信號(hào)的標(biāo)志。在第2、3個(gè)時(shí)鐘下降沿到來的時(shí)候可以作為系統(tǒng)通道的選擇,可以根據(jù)這兩位的值來選擇是使用通道0,還是使用通道1,或者通道0和通道1同時(shí)使用。從第3個(gè)時(shí)鐘的下降開始,DO/DI引腳則作為數(shù)據(jù)輸出的引腳。從第4個(gè)脈沖下降沿開始由DO端輸出轉(zhuǎn)換完的數(shù)據(jù)的最高位,之后每經(jīng)過一個(gè)下降沿依次輸出一位數(shù)據(jù),直到8位數(shù)據(jù)都輸出完為止。當(dāng)都輸出完之后將CS置為高電平作為轉(zhuǎn)換結(jié)束標(biāo)志。圖3-7ADC0832轉(zhuǎn)換時(shí)序圖3.4藍(lán)牙模塊介紹 本設(shè)計(jì)藍(lán)牙功能是實(shí)現(xiàn)是通過HC-05藍(lán)牙模塊,它是一款主機(jī)和從機(jī)在一起的集成了藍(lán)牙功能的PCBA的板子。其工作的頻段是常用的2.4GHz,此款藍(lán)牙模塊使用的板載的PCB天線。 它和單片機(jī)之間使用串口進(jìn)行數(shù)據(jù)的傳輸,藍(lán)牙模塊的電路圖如圖3-8所示,其4腳和5腳分別接到單片機(jī)的P30和P31引腳上進(jìn)行數(shù)據(jù)傳輸。在藍(lán)牙模塊和單片機(jī)通信過程中,兩端設(shè)置的波特率一致后就能保證正常的通信了。圖3-8藍(lán)牙模塊電路圖3.5語音模塊介紹語音報(bào)警電路圖如圖3-9所示,語音報(bào)警模塊采用的主芯片是WT588D,使用5V電源對(duì)其供電,D8為忙碌指示燈,接到WT588D芯片的BUSY引腳,當(dāng)BUSY引腳為低電平時(shí),D2點(diǎn)亮,其中R10是阻值為470歐姆的電阻,用在這里起到限流的作用;芯片的RESET復(fù)位引腳接到單片機(jī)的P24引腳上,可以通過單片機(jī)輸出的高低電平實(shí)現(xiàn)對(duì)WT588D復(fù)位引腳的控制;P01、P02和P03引腳分別接到單片機(jī)的P21、P22和P23引腳,通過單片機(jī)控制器輸出對(duì)應(yīng)的語音報(bào)警消息;PWM+和PWM-為語音輸出信號(hào),通過外接喇叭來播放對(duì)應(yīng)的報(bào)警語音。圖3-9語音報(bào)警電路圖3.6LCD顯示模塊介紹3.6.1LCD1602的介紹LCD1602與單片機(jī)可使用8位并行連接或4位并行連接兩種方式,這里我們使用的是8位并行連接的方式。它是一種可以顯示字母、數(shù)字和符號(hào)等的點(diǎn)陣型液晶模塊,所以,被一些人稱作LCD1602字符型液晶,因?yàn)橹荒茱@示字符,不能顯示漢字。它名稱中02是指分兩行進(jìn)行顯示,16是指每行可以最多顯示16個(gè)字符,每個(gè)字符都是由若干點(diǎn)陣組成的,顯示的每個(gè)字符之前會(huì)有間隔,所以LCD1602不適合做圖像顯示。LCD1602液晶實(shí)物圖如圖3-10所示。圖3-10LCD1602液晶實(shí)物圖3.6.2LCD1602電路圖LCD1602具體電路圖如圖3-11所示。在使用時(shí)候?qū)CD1602的八位數(shù)據(jù)位D0-D7連接到51單片機(jī)的P0上。LCD1602屏幕的清晰度是可以通過外部調(diào)節(jié)的,改變VL引腳的電壓值就可以改變LCD1602屏幕的清晰度,故此處外接滑動(dòng)變阻器R2的作用就是調(diào)整LCD1602屏幕的清晰度。D0-D7引腳可以和單片機(jī)進(jìn)行并行的雙向通信。其中EN是使能引腳,起到對(duì)數(shù)據(jù)顯示的開關(guān)的作用,可以通過改變其電平變化來控制顯示屏是否進(jìn)行顯示。RW和RS兩個(gè)引腳是標(biāo)志位,通過其不同的組合,可以看出LCD屏幕的狀態(tài)。RW和RS引腳都只有高電平和低電平兩種狀態(tài)可以切換,因此對(duì)其狀態(tài)排列組合如下,共有四種情況,每種情況對(duì)應(yīng)著不能的狀態(tài):RS=0、RW=0——表示向LCM寫入指令RS=0、RW=1——表示讀取Busy標(biāo)志RS=1、RW=0——表示向LCM寫入數(shù)據(jù)RS=1、RW=1——表示從LCM讀取數(shù)據(jù)[12]圖3-11LCD1602電路圖3.7本章小結(jié)本章詳細(xì)介紹了該設(shè)計(jì)的硬件電路部分,包括單片機(jī)的最小系統(tǒng),以及LCD顯示電路、超聲測距電路、光敏模塊電路、語音模塊電路及藍(lán)牙模塊電路,分別介紹了其工作原理及和單片機(jī)的連接方式,為后面介紹軟件部分做了充足的鋪墊。4軟件設(shè)計(jì)4.1軟件開發(fā)環(huán)境KeiluVision4程序開發(fā)軟件是美國KeilSoftware公司研制推出的一款能夠用于程序編寫的集成開發(fā)環(huán)境。KeiluVision4可以完全兼容其他版本,并運(yùn)行其他版本的程序。其程序編譯環(huán)境和之前的版本沒有太大差別,但在功能和性能方面新版本都在原先的基礎(chǔ)上做出了很多改進(jìn)和升級(jí)[13]。KeiluVision4支持C語言程序設(shè)計(jì)與編寫,當(dāng)語法錯(cuò)誤出現(xiàn)的時(shí)候,可以自動(dòng)提示用戶。STC89C52等大部分產(chǎn)品,均可在使用Keil4進(jìn)行程序設(shè)計(jì)。同時(shí),提供的仿真功能,使用戶能通過J-LINK或者ST-LINK連接,進(jìn)行對(duì)程序的上位機(jī)調(diào)試。Keil4軟件的部分特點(diǎn):(1)可以自動(dòng)生成完善的啟動(dòng)代碼,并提供圖形化的窗口,看起來非常直觀,也容易修改。無論對(duì)初學(xué)者還是有經(jīng)驗(yàn)的老手,都能夠減少編譯程序的時(shí)間,讓項(xiàng)目更快的進(jìn)展;(2)KEIL的設(shè)備模擬器功能也是異常的強(qiáng)大,對(duì)片內(nèi)資源及外部連接的外設(shè)都可以進(jìn)行仿真;(3)KEIL編譯器,占用的內(nèi)存更少,功能更全面;(4)不需要其他額外的設(shè)備,只需要ULINK2仿真器就可以實(shí)現(xiàn)程序的下載與仿真,同時(shí)用戶還能根據(jù)自己需求對(duì)FLASH進(jìn)行編寫及反復(fù)的修改;Keil的優(yōu)點(diǎn):(1)開發(fā)效率高,設(shè)計(jì)周期短。(2)集成C環(huán)境是單片機(jī)等微型芯片的首選開發(fā)環(huán)境。(3)操作簡單,使用方便,內(nèi)部包含非常多的常用芯片,便于編程和調(diào)試[14]。本系統(tǒng)的設(shè)計(jì)選用Keil4進(jìn)行程序的編寫和調(diào)試,當(dāng)程序可以穩(wěn)定運(yùn)行之后,將生成一個(gè).hex文件。通過軟件mcuisp下載到STC89C52之中,進(jìn)行實(shí)物現(xiàn)場調(diào)試。根據(jù)實(shí)物的實(shí)際運(yùn)行情況,找出問題,并對(duì)相應(yīng)的程序參數(shù)進(jìn)行調(diào)整,直到達(dá)到理想的效果。4.2程序軟件流程框圖程序軟件總流程框圖如圖4-1所示,系統(tǒng)開機(jī)上電后,首先進(jìn)行系統(tǒng)初始化,LCD1602顯示屏的初始化,然后將超聲測距模塊傳進(jìn)來的數(shù)字量在LCD1602顯示屏上顯示出來,并判斷其值是否小于預(yù)設(shè)的報(bào)警閾值,若小于則通過語音模塊,使用語音進(jìn)行提醒。圖4-1程序總流程軟件框圖4.2.1報(bào)警子程序流程框圖系統(tǒng)報(bào)警子程序流程框圖如圖4-2所示,首先進(jìn)行判斷,判斷所測量的值是否超出了預(yù)設(shè)的值,如果超出了預(yù)設(shè)的值,則觸發(fā)語音報(bào)警進(jìn)行提示。圖4-2語音報(bào)警子程序流程框圖4.2.2按鍵子程序流程框圖系統(tǒng)按鍵子程序流程框圖如圖4-3所示,系統(tǒng)可以通過按鍵子程序?qū)φZ音提示的閾值進(jìn)行設(shè)置,可根據(jù)具體的需要操作按鍵來調(diào)整報(bào)警的閾值,非常方便,且具有一定的通用性。圖4-3按鍵子程序流程框圖5實(shí)驗(yàn)結(jié)果展示本設(shè)計(jì)實(shí)物圖如圖5-1所示,經(jīng)過測試系統(tǒng)可以實(shí)現(xiàn)當(dāng)光線強(qiáng)度較弱時(shí),通過語音提示開燈;當(dāng)人距離桌面太近時(shí),會(huì)語音提示保持正確姿勢。同時(shí)實(shí)現(xiàn)了定時(shí)功能,達(dá)到預(yù)訂時(shí)間后會(huì)語音提醒需要休息。報(bào)警距離和定時(shí)時(shí)間都可以通過按鍵來設(shè)置。系統(tǒng)使用LCD1602顯示器對(duì)環(huán)境內(nèi)的光照強(qiáng)度以及人與桌面的距離等信息進(jìn)行顯示。同時(shí)可以和智能手機(jī)的藍(lán)牙進(jìn)行配對(duì),將LCD1602顯示器的內(nèi)容到手機(jī)屏幕上進(jìn)行顯示。系統(tǒng)反應(yīng)速度很快,測量準(zhǔn)確,可靠性高。同時(shí)在本次設(shè)計(jì)的硬件完成階段,也遇到了一些困難,對(duì)實(shí)物進(jìn)行焊接之后,發(fā)現(xiàn)通電后LCD顯示屏顯示有時(shí)候會(huì)亂碼,經(jīng)過仔細(xì)查找硬件焊接點(diǎn),發(fā)現(xiàn)由于自己焊接技術(shù)不是很好,有個(gè)別焊點(diǎn)出現(xiàn)了虛焊的情況,經(jīng)過重新焊接后,問題得到解決。將單片機(jī)燒入程序后測試,功能完全符合,測試效果準(zhǔn)確。6總結(jié)近些年來,隨著人們生活水平的越來越好,人們對(duì)身體健康也越來越重視。目前國內(nèi)患近視眼的人群越來越多,年齡段也越來越早,大多數(shù)都是有一些不好的讀書寫字姿勢?;谶@種現(xiàn)象,本文設(shè)計(jì)一種基于單片機(jī)的智能防近視系統(tǒng),可以對(duì)人與桌面的距離及學(xué)習(xí)時(shí)間進(jìn)行監(jiān)控,可以在距離過近或?qū)W習(xí)時(shí)間過長的時(shí)候進(jìn)行提示,可以有效的督促使用者保持良好的坐姿以及適當(dāng)?shù)膶W(xué)習(xí)時(shí)間。本系統(tǒng)具有實(shí)時(shí)性,可靠性等優(yōu)勢,具有一定的實(shí)用價(jià)值。本次設(shè)計(jì)完成了對(duì)基于單片機(jī)的智能防近視系統(tǒng)的設(shè)計(jì)與研究,實(shí)現(xiàn)預(yù)期的所有功能。整套系統(tǒng)的硬件部分和軟件部分都設(shè)計(jì)合理。硬件部分器件通過多個(gè)器件比較,使用STC89C52單片機(jī)作為主控,通過光敏電阻對(duì)環(huán)境的光線強(qiáng)度進(jìn)行監(jiān)測,并配合超聲模塊來進(jìn)行測距,對(duì)寫字姿勢進(jìn)行有效監(jiān)測,使用LCD1602顯示器對(duì)周圍光線強(qiáng)度以及人與桌面的距離等信息進(jìn)行顯示。軟件部分采用C語言進(jìn)行編程,用keil作為開發(fā)環(huán)境,通過藍(lán)牙模塊實(shí)現(xiàn)單片機(jī)和手機(jī)之間進(jìn)行合理有效的通信,結(jié)構(gòu)清晰,單片機(jī)和手機(jī)之間相互配合,有很高的可靠性和穩(wěn)定性,系統(tǒng)操作起來也方便。通過這次畢業(yè)設(shè)計(jì)的制作,真正的考驗(yàn)了學(xué)生的綜合能力,擴(kuò)展了知識(shí)面和學(xué)習(xí)能力。本文雖然達(dá)到了預(yù)想的設(shè)計(jì)效果,但是由于成本的限制,沒有選擇顯示效果更好的其他屏幕進(jìn)行顯示,也沒有使用自己繪制的PCB板進(jìn)行設(shè)計(jì),而是選擇了可變性更高使用更靈活方便的面包板進(jìn)行。參考文獻(xiàn)[1]羅忠輝,黃世慶.提高超聲測距精度的方法[J].機(jī)械設(shè)計(jì)與制造,2005(1):108-109[2]隋美麗,任小龍.基于超聲波的距離控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].汽車實(shí)用技術(shù),2019(06):81-83.[3]李倩.基于單片機(jī)的超聲波測距系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技,2018,15(24):36-38.[4]周晴.基于單片機(jī)的超聲波測距儀系統(tǒng)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2018,14(35):216-217.[5]趙德安.單片機(jī)與嵌入式系統(tǒng)原理及應(yīng)用[M].機(jī)械工業(yè)出版社,2016.[6]吳險(xiǎn)峰.51單片機(jī)項(xiàng)目教程(C語言版)[M].人民郵電出版社,2016.[7]李月喬.模擬電子技術(shù)基礎(chǔ)[M].中國電力出版社,2015.[8]李震梅.數(shù)字電子技術(shù)基礎(chǔ)[M].高等教育出版社,2017.[9]劉偉靜,劉增強(qiáng).模擬電子技術(shù)[M].清華大學(xué)出版社,2018.[10]王建平.基于聲信號(hào)的分類器設(shè)計(jì)及實(shí)現(xiàn)[J].電聲技術(shù),2014(10):53-55+79.[11]塔米·諾爾加德.嵌入式系統(tǒng):硬件、軟件及軟硬件協(xié)同[M].北京:機(jī)械工業(yè)出版社2018.02[12]譚浩強(qiáng).C程序設(shè)計(jì)(第四版)[M].北京:清華大學(xué)出版社,2010.[13]N.P.Aleshin,G.A.Bigus,andM.A.Lyutov.DiagnosticsofSpacecraftLaunchingFacilitiesUsingAcousticTestingTechniques[J].RussianJournalofNondestructiveTesting,2002,38(3):153-161.[14]G.M.KrekovandL.G.Shamanaeva.AcousticDiagnosticsofLaserSparksintheAtmosphere[J]RussianPhysicsJournal,2000,43(1):975-976.附錄附錄一原理圖附錄二程序源碼#include<reg52.h>#defineucharunsignedchar//無符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號(hào)整型宏定義 變量范圍0~65535#include<intrins.h>#include"eepom52.h"sbitSCL=P1^4; //SCL定義,連接ADC0832SCL腳sbitDO=P1^3; //DO定義,連接ADC0832DO腳sbitCS=P1^5; //CS定義,連接ADC0832CS腳//這三個(gè)引腳參考資料sbitrs=P1^0; //1602數(shù)據(jù)/命令選擇引腳H:數(shù)據(jù) L:命令sbitrw=P1^1; //1602讀寫引腳 H:數(shù)據(jù)寄存器 L:指令寄存器sbite=P1^2; //1602使能引腳下降沿觸發(fā)sbitc_send=P1^6; //超聲波發(fā)射sbitc_recive=P1^7; //超聲波接收ucharflag_hc_value;//超聲波中間變量longdistance; //距離uintset_d; //距離bitflag_csb_juli;//超聲波超出量程uintflag_time0;//用來保存定時(shí)器0的時(shí)候的bitflag_300ms=1;ucharguangxian;//光線的顯示變量ucharset_gx; //設(shè)置光線的強(qiáng)弱的變量ucharvalue;ucharflag_alarm;//報(bào)警變量staticintmiao=0,fen=45;//學(xué)習(xí)時(shí)間 ucharxuexi_start;//開始學(xué)習(xí)標(biāo)志位ucharmenu_1;ucharRx_buf[4],Rxnum=0;/***********************語音模塊控制IO口的定義************************/sbitVRST=P2^0; sbitVSDA=P2^2;sbitVCS=P2^3;sbitVSCL=P2^4;unsignedcharyujing[3];/***********************1ms延時(shí)函數(shù)*****************************/voiddelay_1ms(unsignedintq){ unsignedinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}voiddelay_us(unsignedintus){ while(us--) { _nop_(); }}/***********************三線發(fā)碼子程序************************/voidSend_threelines(unsignedcharaddr){unsignedchari; VRST=0; delay_1ms(5); VRST=1; delay_1ms(20);/*復(fù)位拉高20ms*/ VCS=0; delay_1ms(5);/*片選拉低5ms*/for(i=0;i<8;i++) { VSCL=0; if(addr&0x01) { VSDA=1; } else VSDA=0; addr>>=1; delay_us(150);/*150us*/ VSCL=1; delay_us(150);/*150us*/ } VCS=1;}voidInitUART(void) //這是串口的基本配置,配置他的波特率是9600.這些參數(shù)都是標(biāo)準(zhǔn)的。{TMOD=0x20;SCON=0x50;TH1=0xFD;TL1=TH1;PCON=0x00;EA=1;ES=1;TR1=1;}/**UART發(fā)送一字節(jié)*/voidUART_send_byte(chardat){ SBUF=dat; while(TI==0); TI=0;}/**UART發(fā)送字符串*/voidUART_send_string(unsignedchar*buf){ while(*buf!='\0') { UART_send_byte(*buf++); }}/******************把設(shè)置溫度數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中******************/voidwrite_eepom_12(){ SectorErase(0x2000); byte_write(0x2000,set_d%256); byte_write(0x2001,set_d/256); byte_write(0x2002,set_gx); byte_write(0x2057,value); }/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來*****************/voidread_eepom12(){ set_d=byte_read(0x2001); set_d=set_d*256+byte_read(0x2000); set_gx=byte_read(0x2002); value=byte_read(0x2057);}/**************開機(jī)自檢eepom初始化*****************/voidinit_eepom(){ read_eepom12(); //先讀 if(value!=2) //新的單片機(jī)初始單片機(jī)內(nèi)問EEPOM { set_d=15; value=2; set_gx=4; write_eepom_12(); } }/*********************************************************************名稱:delay()*功能:延時(shí),延時(shí)時(shí)間大概為5US。*輸入:無*輸出:無***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名稱:bitBusy(void)*功能:這個(gè)是一個(gè)讀狀態(tài)函數(shù),讀出函數(shù)是否處在忙狀態(tài)*輸入:輸入的命令值*輸出:無***********************************************************************/bitbusy(void){ bitbusy_flag=0; rs=0; rw=1; e=1; delay_uint(3); busy_flag=(bit)(P0&0x80); e=0; returnbusy_flag;}/*********************************************************************名稱:write_com(ucharcom)*功能:1602命令函數(shù)*輸入:輸入的命令值*輸出:無***********************************************************************/voidwrite_com(ucharcom){ while(busy()); e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0;}/*********************************************************************名稱:write_data(uchardat)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_data(uchardat){ while(busy()); e=0; rs=1; rw=0; P0=dat; delay_uint(3); e=1; delay_uint(25); e=0; }/***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/voidwrite_sfm2(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10%10); write_data(0x30+date%10); }/***********************lcd1602上顯示超聲波距離************************/voidwrite_sfm_csb(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/100%10); write_data('.'); write_data(0x30+date/10%10); write_data(0x30+date%10); }/*********************************************************************名稱:init_1602()*功能:1602初始化,請(qǐng)參考1602的資料*輸入:無*輸出:無***********************************************************************/voidinit_1602(){ write_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 write_com(0x0c); //開顯示,不顯示光標(biāo) write_com(0x06); //地址加1,當(dāng)寫入數(shù)據(jù)的時(shí)候光標(biāo)右移}/*********************************************************************名稱:write_string(ucharhang,ucharlie,uchar*p)*功能:改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開始顯示"abcdef",調(diào)用該函數(shù)如下 write_string(1,5,"abcdef;")*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }ucharkey_can;/********************獨(dú)立按鍵程序*****************/voidkey(){ staticucharkey_new; key_can=20; if((P3&0xf0)!=0xf0) { delay_uint(50); if(((P3&0xf0)!=0xf0)&&(key_new==1)) { key_new=0; switch(P3&0xf0) { case0xe0:key_can=1;break; //左邊第1個(gè) case0xd0:key_can=2;break; //左邊第2個(gè) case0xb0:key_can=3;break; //左邊第3個(gè) case0x70:key_can=4;break; //左邊第4個(gè) }// write_sfm2(2,0,key_can); } } else key_new=1; }/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/ //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的 //100通道 //111通道unsignedcharad0832read(bitSGL,bitODD){ unsignedchari=0,value=0,value1=0; SCL=0; DO=1; CS=0; //開始 SCL=1; //第一個(gè)上升沿 SCL=0; DO=SGL; SCL=1; //第二個(gè)上升沿 SCL=0; DO=ODD; SCL=1; //第三個(gè)上升沿 SCL=0; //第三個(gè)下降沿 DO=1; for(i=0;i<8;i++) { SCL=1; SCL=0;//開始從第四個(gè)下降沿接收數(shù)據(jù) value<<=1; if(DO) value++; } for(i=0;i<8;i++) { //接收校驗(yàn)數(shù)據(jù) value1>>=1; if(DO) value1+=0x80; SCL=1; SCL=0; } CS=1; SCL=1; if(value==value1) //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0 returnvalue; return0;}/*********************小延時(shí)函數(shù)*****************************/voiddelay(){ _nop_(); //執(zhí)行一條_nop_()指令就是1us _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}/*********************超聲波測距程序*****************************/voidsend_wave(){ c_send=1; //10us的高電平觸發(fā) delay(); c_send=0; TH0=0; //給定時(shí)器0清零 TL0=0; TR0=0; //關(guān)定時(shí)器0定時(shí) flag_hc_value=0; while(!c_recive); //當(dāng)c_recive為零時(shí)等待 TR0=1; while(c_recive) //當(dāng)c_recive為1計(jì)數(shù)并等待 { flag_time0=TH0*256+TL0; if((flag_hc_value>1)||(flag_time0>65000))//當(dāng)超聲波超過測量范圍時(shí),顯示3個(gè)888 { TR0=0; flag_csb_juli=2; distance=888; flag_hc_value=0; return; } else { flag_csb_juli=1; } } if(flag_csb_juli==1) { TR0=0; //關(guān)定時(shí)器0定時(shí) distance=TH0; //讀出定時(shí)器0的時(shí)間 distance=distance*256+TL0; distance+=(flag_hc_value*65536);//算出超聲波測距的時(shí)間 得到單位是ms distance*=0.017;//0.017=340M/2=170M=0.017M算出來是米 if(distance>350) //距離=速度*時(shí)間 { distance=888; //如果大于3.8m就超出超聲波的量程 } }}/*********************定時(shí)器0、定時(shí)器1初始化******************/voidtime_init() { TMOD&=0xf0; TMOD|=0x01; //設(shè)T0為方式1, TH0=0; TL0=0; ET0=1;//允許T0中斷}/*********************定時(shí)器2初始化******************/voidtime2_init() { RCAP2H=(0xFFFF-50000)/256;//重裝載計(jì)數(shù)器賦初值 RCAP2L=(0xFFFF-50000)%256; ET2=1;//開定時(shí)器2中斷 TR2=1;//開啟定時(shí)器,并設(shè)置為自動(dòng)重裝載模式}}/*******************按鍵執(zhí)行函數(shù)******************/voidkey_with(){ if(menu_1==0) { if(key_can==1) { miao=0;fen=45; xuexi_start=1;//開始學(xué)習(xí) } if(key_can==2) { xuexi_start=0;//暫停學(xué)習(xí) } if(key_can==3) { xuexi_start=1;//繼續(xù)學(xué)習(xí) } } if(key_can==4) { menu_1++; if(menu_1==1) { write_string(1,0,"1.xsb:m"); write_string(2,0,"2.gm:%"); write_sfm_csb(1,6,set_d); write_sfm2(2,5,set_gx); //設(shè)置光線的參數(shù) write_com(0x80+0);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(menu_1==2) { write_com(0x80+0x40+0);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(menu_1>=3) { menu_1=0; write_string(1,0,"csb: mgm:%"); write_string(2,0,"Time:"); write_com(0x0c);//關(guān)閉顯示 } } if(menu_1==1)//設(shè)置超聲波參數(shù) { if(key_can==3)// { set_d++; //加超聲波距離報(bào)警數(shù)據(jù) write_sfm_csb(1,6,set_d); if(set_d>=100) set_d=100; write_com(0x80);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(key_can==2)// { set_d--; //減超聲波距離報(bào)警數(shù)據(jù) if(set_d<=10) set_d=10; write_sfm_csb(1,6,set_d); write_com(0x80);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } write_eepom_12(); //保存數(shù)據(jù) } if(menu_1==2) { if(key_can==3)// { set_gx++; //加超聲波距離報(bào)警數(shù)據(jù) write_sfm2(2,5,set_gx); if(set_gx>=100) set_gx=100; write_com(0x80+0x40);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(key_can==2)// { set_gx--; //減超聲波距離報(bào)警數(shù)據(jù) if(set_gx<=1) set_gx=1; write_sfm2(2,5,set_gx); write_com(0x80+0x40);//將光標(biāo)移動(dòng)到秒個(gè)位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } write_eepom_12(); //保存數(shù)據(jù) } key_can=20;}/*********************報(bào)警函數(shù)***************************/voidclock_beep(){ staticucharvalue1,value2,value3; if(xuexi_start==1) { if(set_gx>=guangxian) //距離光線報(bào)警 { value2++; if(value2>=2) //循環(huán)2次都是報(bào)警增強(qiáng)抗干擾 { flag_alarm=2; Send_threelines(0x00);delay_1ms(2880); } }else value2=0; if(distance<=set_d) //距離報(bào)警 { value1++; if(value1>=2) //循環(huán)2次都是報(bào)警增強(qiáng)抗干擾 { flag_alarm=1; Send_threelines(0x01);delay_1ms(2880); } }else

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論