超聲波測距(共32頁)_第1頁
超聲波測距(共32頁)_第2頁
超聲波測距(共32頁)_第3頁
超聲波測距(共32頁)_第4頁
超聲波測距(共32頁)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 編 號: 審定(shndng)成績: 重慶(zhn qn)郵電大學課程設(shè)計報告(bogo) 設(shè)計題目: 電子超聲波測距器的設(shè)計 學 院 名 稱 :自動化學院組員姓名學號:專 業(yè) :自動化班 級 :指 導 教 師 :填表時間:2015 年 6月重慶郵電大學 重慶郵電大學本科課程設(shè)計報告 II摘 要超聲波測距器可以應用于汽車倒車、建筑施工工地以及一些工業(yè)現(xiàn)場的位置監(jiān)控,也可用于如液位、井深、管道長度的測量(cling)等場合,要求(yoqi)測量范圍在0.10-3.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩(wěn)定地顯示測量結(jié)果。由于超聲波指向性強,能量消耗緩慢,在介質(zhì)中傳播的距離

2、較遠,因而超聲波經(jīng)常用于距離的測量,如測距儀和物位測量儀等都可以通過超聲波來實現(xiàn)。利用超聲波檢測往往比較迅速、方便、計算簡單、易于做到實時控制,并且在測量精度方面能達到工業(yè)實用的要求,因此(ync)在移動機器人的研制上也得到了廣泛的應用。本次課程設(shè)計單片機采用STC89C51,系采用12MHZ高精度晶振得到較為穩(wěn)定的時鐘頻率以減小測量誤差。用單片機端口輸出40KHZ方波信號,再經(jīng)過放大電路,驅(qū)動超聲波發(fā)射探頭發(fā)射超聲波。發(fā)射出去的超聲波經(jīng)障礙物反射回來后,由超聲波接收頭接收到信號,通過接收電路的檢波放大及一系列處理,送至單片機,利用外中斷檢測接收返回的超聲波信號。單片機利用聲波的傳播速度和發(fā)射

3、脈沖到接收反射脈沖的時間間隔計算出障礙物的距離,并由單片機控制數(shù)碼管顯示出來。在此次課程設(shè)計小組中有四名成員分別完成以下任務:1.硬件電路中顯示電路、超聲波接受與發(fā)射模塊,單片機系統(tǒng)的設(shè)計;2.硬件電路中時鐘電路與復位電路、校準電路的設(shè)計;3.單片機軟件設(shè)計,包括顯示程序、接收和發(fā)送程序、中斷程序與校準程序;4.PCB的制作以及實物調(diào)試。大家共同努力,完成此次課程設(shè)計?!娟P(guān)鍵詞】單片機STC89C51 超聲波 傳感器 測量距離目 錄 摘要(zhiyo) I TOC o 1-3 h z u HYPERLINK l _Toc404277672 第一章 緒論(xln) PAGEREF _Toc404

4、277672 h 1 HYPERLINK l _Toc404277673 第一節(jié) 概述(i sh) PAGEREF _Toc404277673 h 1 HYPERLINK l _Toc404277674 第二節(jié) 設(shè)計題目2 HYPERLINK l _Toc404277675 一、設(shè)計題目2 HYPERLINK l _Toc404277676 二、任務分工3HYPERLINK l _Toc404277677 第二章 總體方案設(shè)計4 HYPERLINK l _Toc404277678 第一節(jié) 設(shè)計任務和主要內(nèi)容4 第二節(jié) 超聲波測距原理 4 第三節(jié) PCB板及實物的制作5 第四節(jié) 超聲波系統(tǒng)硬件系

5、統(tǒng)的制作7 第五節(jié) 超聲波系統(tǒng)的軟件設(shè)計11第三章 HYPERLINK l _Toc404277679 設(shè)計總結(jié)14HYPERLINK l _Toc404277680 參考文獻15HYPERLINK l _Toc404277681 附 錄16重慶郵電大學本科課程設(shè)計報告第一章 緒論(xln)第一節(jié) 概述(i sh)隨著科學技術(shù)的快速(kui s)發(fā)展,超聲波將在測距儀中的應用越來越廣。但就目前技術(shù)水平來說,人們可以具體利用的測距技術(shù)還十分有限,因此,這是一個正在蓬勃發(fā)展而又有無限前景的技術(shù)及產(chǎn)業(yè)領(lǐng)域。展望未來,超聲波測距儀作為一種新型的非常重要有用的工具在各方面都將有很大的發(fā)展空間,它將朝著更

6、加高定位高精度的方向發(fā)展,以滿足日益發(fā)展的社會需求,如聲納的發(fā)展趨勢基本為:研制具有更高定位精度的被動測距聲納,以滿足水中武器實施全隱蔽攻擊的需要;繼續(xù)發(fā)展采用低頻線譜檢測的潛艇拖曳線列陣聲納,實現(xiàn)超遠程的被動探測和識別;研制更適合于淺海工作的潛艇聲納,特別是解決淺海水中目標識別問題;大力降低潛艇自噪聲,改善潛艇聲納的工作環(huán)境。勿庸置疑,未來的超聲波測距儀將與自動化智能化接軌,與其他的測距儀集成和融合,形成多測距儀。隨著測距儀的技術(shù)進步,測距儀將從具有單純判斷功能發(fā)展到具有學習功能,最終發(fā)展到具有創(chuàng)造力。在新的世紀里,面貌一新的測距儀將發(fā)揮更大的作用。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時

7、刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據(jù)計時器記錄的時間t,就可以計算出發(fā)射點距障礙物的距離(s),即:s=340t/2。第二節(jié) 設(shè)計(shj)題目一、設(shè)計(shj)題目本題目是設(shè)計一個簡易電子超聲波測距器,可以(ky)應用于0.13米物理距離的測量。測量時無需與實際的物理接觸,即可分析實際的物理距離,并實時顯示實際距離。主要由單片機系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波檢測接收電路三部分組成。它的設(shè)計要求如下所示: = 1 * GB3 要求完成測距器的Protel硬件原理圖繪制以及PC

8、B的制作; = 2 * GB3 硬件電路應包含顯示電路、中斷控制、紅外接收、超聲波轉(zhuǎn)換模塊、電源模塊; = 3 * GB3 完成相應的單片機軟件設(shè)計,包括實時顯示程序、接收和發(fā)送程序、中斷程序; = 4 * GB3 具備校準電路和校準程序。二、任務分工本設(shè)計由四位同學組成,每位同學負責的主要任務如表1.1 所示。表1-1 任務分工表序號姓名學號主要負責任務系數(shù)1硬件電路中顯示電路、超聲波接受與發(fā)射模塊,單片機系統(tǒng)的設(shè)計0.252PCB的制作以及實物調(diào)試0.253單片機軟件設(shè)計,包括顯示程序、接收和發(fā)送程序、中斷程序與校準程序0.254硬件電路中時鐘電路與復位電路、校準電路的設(shè)計,論文的編寫0.

9、25第二章 總體方案設(shè)計(shj) 第一節(jié) 設(shè)計任務(rn wu)和主要內(nèi)容本次設(shè)計主要研究基于單片機的超聲波測距系統(tǒng),分別對超聲波發(fā)生(fshng)電路、回波接收電路、顯示電路及系統(tǒng)設(shè)備的軟、硬件各個部分進行了設(shè)計。一、系統(tǒng)硬件電路的設(shè)計1.根據(jù)測距技術(shù)的特點,進行超聲波測距系統(tǒng)的整體研究與設(shè)計;2.針對超聲波測距系統(tǒng)的各個模塊電路進行設(shè)計;3.顯示屏顯示測量的距離值,以英文加數(shù)字顯示的方式顯示測量的距離。二、系統(tǒng)軟件的設(shè)計1.系統(tǒng)主程序的設(shè)計;2.超聲波發(fā)送、接收子程序的設(shè)計;3.顯示屏顯示程序的設(shè)計;4.校正電路程序的設(shè)計。第二節(jié) 超聲波測距原理單片機發(fā)出超聲波測距是通過不斷檢測超聲波發(fā)

10、射后遇到障礙物所反射的回波, 從而測出發(fā)射和接收回波的時間差t,然后求出距離 (2-1)式(2-1)中的c為超聲波在空氣中傳播的速度。限制該系統(tǒng)的最大可測距離存在四個因素:超聲波的幅度、反射物的質(zhì)地、反射和入射聲波之間的夾角以及接收換能器的靈敏度。接收換能器對聲波脈沖的直接接收能力將決定最小可測距離。為了增加所測量的覆蓋范圍,減少測量誤差,可采用多個超聲波換能器分別作為多路超聲波發(fā)射/接收的設(shè)計方法。由于超聲波發(fā)射聲波范圍,其波速v與溫度有關(guān),表2-1列出了幾種不同溫度下的波速。表2-1 聲速與溫度(wnd)的關(guān)系溫度()3020100102030100聲速(m/s)3133193253233

11、38344349386波速確定后,只要測得超聲波往返的時間(shjin)t,即可求得距離S。其系統(tǒng)原理框圖如圖2-1所示。 圖2-1超聲波測距系統(tǒng)(xtng)框圖單片機STC89C51發(fā)出短暫的40kHz信號,經(jīng)放大后通過超聲波發(fā)射頭輸出;反射后的超聲波經(jīng)超聲波接收頭作為系統(tǒng)的輸入,鎖相環(huán)對此信號鎖定,產(chǎn)生鎖定信號啟動單片機中斷程序,讀出時間t,再由系統(tǒng)軟件對其進行計算、判別后,相應的計算結(jié)果被送至顯示屏進行顯示。第三節(jié) PCB及實物板的制作PCB板及實物的制作,主要從以下幾點展開:一、深入的了解超聲波測距儀的工作原理,大概了解各個模塊電路的功能;二、了解原理圖,以及各種元器件,并對元器件進行

12、合理的規(guī)劃與布局;三、進行PCB板的制作,電路的焊接;四、進行實物的測試以及數(shù)據(jù)的校正。單片機采用(ciyng)STC89C51,系統(tǒng)(xtng)采用12MHZ高精度晶振得到較為穩(wěn)定(wndng)的時鐘頻率以減小測量誤差。用單片機輸出40KHZ方波信號,再經(jīng)過放大電路,驅(qū)動超聲波發(fā)射探頭發(fā)射超聲波。發(fā)射出去的超聲波經(jīng)障礙物反射回來后,由超聲波接收頭接收到信號,通過接收電路的檢波放大及一系列處理,送至單片機,利用外中斷檢測接收返回的超聲波信號。單片機利用聲波的傳播速度和發(fā)射脈沖到接收反射脈沖的時間間隔計算出障礙物的距離,并由單片機控制顯示屏顯示出來。本次設(shè)計主要包括單片機系統(tǒng),時鐘電路,復位電路

13、,發(fā)射與接收電路,顯示電路與校正電路。在繪制仿真圖時,先根據(jù)各個電路畫出相應的模塊,接著對各個模塊進行合理的布局使得整個仿真圖顯得有序。最后畫出PCB圖便于在覆銅板上刻畫。最后在焊接電路時也是對相應的電路進行焊接,如圖2-2,2-3所示: 圖2-2超聲波測距器實物圖圖2-3 印刷(ynshu)版圖 第四節(jié) 超聲波測距系統(tǒng)硬件(yn jin)電路的設(shè)計一、單片機系統(tǒng)(xtng)設(shè)計選用最簡單實用的最小單片機系統(tǒng),包括電源電路,程序存儲器選擇電路,時鐘電路和復位電路,最小單片機系統(tǒng)如圖2-4所示:圖2-4 最小單片機系統(tǒng)(xtng)二、電源電路(dinl)和程序存儲器電路:將Vcc和EA引腳接高電

14、平。三、時鐘(shzhng)電路:系統(tǒng)時鐘是一切微處理器、微控制器內(nèi)部電路工作的基礎(chǔ)。STC89C51芯片的時鐘頻率可以在2MHz-24MHz范圍,單片機的XATL1和XATL2用來接石英晶體和微調(diào)電容,我們選擇晶振為12MHz,電容33pF。四、復位電路:對于STC89C51芯片,如果引腳RST保持24個時鐘周期的高電單片機就可以完成復位,單片機在RESET端加一個大于20ms正脈沖即可實現(xiàn)復位,在系統(tǒng)上電的瞬間,RST與電源電壓同電位,隨著電容的電壓逐漸上升,RST電位下降,于是在RST形成一個正脈沖。只要該脈沖足夠?qū)捑涂梢詫崿F(xiàn)復位,當人按下按鈕S1時,使電容C1通過R1迅速放電,待S1彈

15、起后,C再次充電,實現(xiàn)手動復位。R1一般取200。五、顯示電路本次設(shè)計選用Nokia5110 液晶顯示電路,它只需8根接口信號線,既可顯示字符,又能顯示圖形,Vcc接3-5V均可,片選CE和RST都是低電平有效,當時鐘信號CLK、出現(xiàn)上升沿的時候,讀取SDL輸入的信號,顯示電路圖如圖2-5所示:圖2-5 顯示(xinsh)電路圖六、超聲波模塊(m kui):選用(xunyng)超聲波模塊HC-SR04,模塊如圖2-6所示:圖2-6 超聲波模塊HC-SR04七、HC-SR04工作方式:1給超聲波模塊接入電源和地; 2.給脈沖觸發(fā)引腳(trig)輸入一個長為20us的高電平方波;3.輸入方波后,模

16、塊會自動發(fā)射8個40KHz的聲波,與此同時 回波引腳(echo)端的電平會由0變?yōu)?(此時應該啟動定時器計時); 4.當超聲波返回(fnhu)被模塊接收到時,回波引腳端的電平會由1變 為0;(此時應該停止定時器計數(shù)),定時器記下的這個時間即為超聲波由發(fā)射到返回的總時長; 5.根據(jù)(gnj)聲音在空氣中的速度為344米/秒,即可計算出所測的距離。八、仿真發(fā)射(fsh)電路:本電路采用集CMOS六反相器CD4069構(gòu)成驅(qū)動電路,為了增大驅(qū)動電流,可以采用CD4069中兩個甚至三個方向器并聯(lián)的方式實現(xiàn),并向換能器兩端提供脈沖信號。而壓電式超聲波換能器是利用壓電晶體的諧振來工作的,超聲波換能器內(nèi)部有兩

17、個壓電晶片和一個換能板。當它的兩級外加脈沖信號,其頻率等于壓電晶片的固有震蕩頻率時,壓電晶片會發(fā)生共振,并帶動共振震動產(chǎn)生超神波,這時它就是一個超聲波發(fā)生器。反之,如果兩電極間未外加電壓,當共振板接收到超聲波信號時,將壓迫壓電晶片震動,將機械能轉(zhuǎn)化為電信號,這時它就是一個超聲波接收換能器,仿真發(fā)射電路如圖2-7所示: 圖2-7 仿真發(fā)射電路九、仿真接收電路:用單片機的端口輸出超聲波換能器所需的40KHz方波信號,經(jīng)過非門后在經(jīng)過2個非門并聯(lián)提高超聲波發(fā)射功率。選用CX20106芯片可以進一步提高驅(qū)動能力,而且VX20106可以采用2到5V的電源供電,設(shè)計中添加了一個芯片電源選擇端,提高工作電壓

18、和提高發(fā)射距離。當CX20106 接收到40KHz(發(fā)射頻率和解制必須一致)信號時,會在第7腳產(chǎn)生一個低電平下降脈沖,這個信號可以接到單片機的外部中斷引腳作為中斷信號輸入用于計算時間差。在實際調(diào)試的時候只關(guān)心芯片的7腳在收到信號是是否有一個下降沿產(chǎn)生。在本電路的調(diào)試中,如果一直發(fā)射超聲波,在7腳將會有周期的低電平產(chǎn)生。不會像通常認為的那樣,即一直發(fā)射信號時,7腳一直為低電平。只要通過單片機來來計算發(fā)射信號時到收到信號是產(chǎn)生下降沿這段時間的長度,再通過數(shù)學計算,轉(zhuǎn)化為距離,然后在顯示(xinsh)器上顯示,仿真接收電路如圖2-8所示:圖2-8 仿真(fn zhn)接收電路第五節(jié) 系統(tǒng)(xtng)

19、的軟件設(shè)計超聲波測距儀的軟件設(shè)計主要由主程序、超聲波發(fā)生子程序、超聲波接收中斷程序、顯示子程序以及校正組成。單片機編程產(chǎn)生超聲波,在系統(tǒng)發(fā)射超聲波的同時利用定時器的計數(shù)功能開始計時,接收到回波后,接收電路輸出端產(chǎn)生的負跳變在單片機的外部中斷源輸入口產(chǎn)生一個中斷請求信號,響應外部中斷請求,執(zhí)行外部中斷服務子程序,停止計時,讀取時間差,計算距離,然后通過軟件譯碼,將數(shù)據(jù)輸出P0口顯示。當顯示距離與實際不符合時,進行校正即可。一 軟件設(shè)計1.開發(fā)(kif)環(huán)境(hunjng)本超聲波測距設(shè)計(shj)采用C語言編程,編譯環(huán)境為keil UV4。keil c51 是美國Keil Software 公司

20、出品的51 系列兼容單片機C 語言軟件開發(fā)系統(tǒng),和匯編相比,C 在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。Keil c51 軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows 界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到keil c51 生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。Keil C51 可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE 本身或其它編輯器編輯C 或匯編源文件,然后分別有C51 及A51 編輯器編譯連接生成單片機可執(zhí)行的二進制文

21、件(.HEX),然后通過單片機的燒寫軟件將HEX 文件燒入單片機內(nèi)。軟件主要三個方面:一是初始化系統(tǒng);二是數(shù)據(jù)采集,三是數(shù)據(jù)處理并進行顯示。這三個方面的操作分別在主程序中來進行。程序采用模塊化的結(jié)構(gòu),這樣程序結(jié)構(gòu)清楚,易編程和易讀性好,也便于調(diào)試和修改。2.中斷子程序設(shè)計本設(shè)計主程序使用了定時器,用來實現(xiàn)超聲波測距的功能,流程圖如圖2-9所示。 開始是否產(chǎn)生中斷 否是讀取定時器0數(shù)值并重賦初值結(jié)束 圖2-9 中斷流程圖3.系統(tǒng)(xtng)主程序軟件流程圖系統(tǒng)軟件(x tn run jin)部分主程序流程圖如圖2-10所示。開始 定時器初始化5110初始化是否校準是校準 否超聲波測距,開啟定時器

22、中斷測距完成數(shù)據(jù)裝換結(jié)束圖2-10主程序(chngx)流程圖二 軟件調(diào)試把寫好的語言程序載入軟件調(diào)試工具,檢查軟件是否有設(shè)法錯誤,再根據(jù)軟件提示(tsh)對本程序進行修改,直到?jīng)]有錯誤再生成單片機能運行的機器碼,再用51開發(fā)板或其它單片機寫入工具把機器碼寫入單片機進行實際的程序調(diào)試(dio sh),根據(jù)實際情況再對程序的不足加以修改,直到滿足設(shè)計要求。調(diào)試本程序需要用到KEIL C51,及51開發(fā)板一塊及其配套的下載軟件。第三章 設(shè)計(shj)總結(jié)本次課程設(shè)計是一種基于單片機的超聲波測距的設(shè)計,給出了硬件和軟件的設(shè)計方案。超聲波傳感器是核心器件,此次詳細地介紹了超聲波傳感器的原理、結(jié)構(gòu)、檢測方

23、式以及它的一些特性。只有深入地了解超聲波傳感器的工作原理,才能更好的設(shè)計測距電路。單片機是本系統(tǒng)的控制部分,采用STC89C51芯片,驅(qū)動超聲波傳感器的40kHz的方波信號,就是由單片機編程產(chǎn)生的。本系統(tǒng)的發(fā)射電路采用CD4069六位反向器通過它對單片機產(chǎn)生的方波信號進行放大,以驅(qū)動傳感器工作。接收電路采用的是CX20106,通過接收電路對接收到的信號進行放大和整形,最終再輸出負脈沖給單片機響應中斷程序。單片機內(nèi)部采用C語言編程,方波信號的產(chǎn)生、時間差的讀取、距離的計算以及顯示輸出的譯碼都由單片機編程完成。在這次課程設(shè)計中,我們小組分工合作,在大家的共同努力下,完成了本次課程設(shè)計。制作期間我們

24、遇到很多困難,都是在小組同伴共同努力下解決的,這也讓我們認識到團體的合作精神。同時我們也意識到,任何一件產(chǎn)品的產(chǎn)生,都不是單一知識所能實現(xiàn)的。而且在電路的設(shè)計和程序的編制過程中,出現(xiàn)了很多意想不到的錯誤,讓我們措手不及,有些甚至是一些非常低級的錯誤,但是這些錯誤也同樣讓我們獲益非淺,它使我們意識到,研究是一個非常嚴肅的過程,來不得半點馬虎。必須有一個嚴謹?shù)膽B(tài)度,才有可能把設(shè)計做成功。雖然,在這次課題的設(shè)計過程中盡管走了很多的彎路,但是還是學到了不少知識,從中受益匪淺。了解了超聲波傳感器的原理,學會了各種放大電路的分析、設(shè)計,也掌握了單片機的開發(fā)過程中所用到的一些開發(fā)方法和仿真工具。動手能力與自

25、學能力得到了鍛煉與提高,理論總是離不開實踐的,設(shè)計制作過程中,盲目地追尋理論知識根本不足以解決任何問題,一味的死研究課本是不會真正掌握單片機的,只有真正動手去做才能發(fā)現(xiàn)問題,解決問題,提高能力。參考文獻向敏微控制器原理及其應用(yngyng)M北京:人民郵電出版社,2012蔣建春嵌入式系統(tǒng)原理與設(shè)計M北京(bi jn):機械工業(yè)出版社,2010郭天祥51單片機C語言教程M北京(bi jn):電子工業(yè)出版社,2009何豐低頻電子電路M北京:人民郵電出版社,2014鄒虹數(shù)字電路與邏輯設(shè)計M北京:人民郵電出版社,2011馮博琴計算機軟件技術(shù)基礎(chǔ)M西安:西安交通大學出版社,2010胡向東等傳感器與檢測

26、技術(shù)M北京:機械工業(yè)出版社,2013.王平,謝昊飛等計算控制技術(shù)及應用M 北京:機械工業(yè)出版社,2010附 錄工程設(shè)計圖紙(tzh):附圖1 總體設(shè)計圖紙(tzh)源程序:初始化程序(chngx)H文件(wnjin):#ifndef _init_H_#define _init_H_#define uchar unsigned char #define uint unsigned int#define ulong unsigned longextern void init();#endifC文件(wnjin)/* 初始化函數(shù)*/# include # include # include #def

27、ine uchar unsigned char #define uint unsigned int#define ulong unsigned longextern uint timer;sbit Trig=P26; / 定義HC-SR04發(fā)送端void init() /初始化/*中斷初始化*/TMOD = 0 x11;TH0=(65536-1000)/256; /1ms 12M晶振 TL0=(65536-1000)%256;ET0=1;TR0=1;ET1=1;EX1 = 1;Trig=0;LCD_init();LCD_clear();LCD_write_english_string(0,0,

28、DISTANCE:);EA=1; 延時程序(chngx)* 延時模塊(m kui)*/#ifndef _DELAY_H_#define _DELAY_H_#define uchar unsigned char #define uint unsigned int#define ulong unsigned long#define delay_ms(x) delay_us(100*x) /單位(dnwi)msextern void delay_us(uint delay_z);#endifC文件/* 延時模塊*/#include #include void delay_us(uint delay_

29、z) while(delay_z-);中斷程序H文件# ifndef _INTERRUPT_H_# define _INTERRUPT_H_#define uchar unsigned char #define uint unsigned int#define ulong unsigned long# endifC文件(wnjin)/* 中斷(zhngdun)函數(shù)1,PWM調(diào)節(jié)(tioji)2,計時,timer為10ms*/# include # include # include # include # include key.hextern uchar time_c;/timec - ti

30、mecounterextern uint timer;void T0_timer0 () interrupt 1 /定時器0,PWM,記錄時間 TR0 = 0; TH0=(65536-10000)/256; /1ms 12M晶振 TL0=(65536-10000)%256; key_scan(); TR0 =1; 鍵盤#ifndef _KEY_H#define _KEY_Hvoid key_scan(void);#endif#include #include key.h#include delay.hsbit KEY1 = P20;sbit KEY2 = P21;float corr = 0;

31、 /校準系數(shù)void key_scan()if (KEY1 = 0)delay_ms(5);if (KEY1 = 0)while(KEY1 = 1);corr += 0.0001;if (KEY2 = 0)delay_ms(5);if (KEY2 = 0)while(KEY2 = 1);corr -= 0.0001;驅(qū)動程序H文件(wnjin)#ifndef _NOKIA_5110_H_#define _NOKIA_5110_H_#include void LCD_init(void); void LCD_clear(void);void LCD_write_english_string(un

32、signed char X,unsigned char Y,char *s);void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num, unsigned char line,unsigned char row); void LCD_write_english_char(unsigned char X,unsigned char Y,unsigned char zifu); void LCD_write_char(unsigned char c)

33、;void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y);void LCD_write_byte(unsigned char dat, unsigned char dc);void LCD_set_XY(unsigned char X, unsigned char Y);void delay_1us(void); void delay_1ms(void); /1ms延時函數(shù)(hnsh)/void delay_nms(u

34、nsigned int n) ; /N ms延時函數(shù)(hnsh)void LCD_write_num(unsigned char X,unsigned char Y,unsigned int num);#endifC文件(wnjin)#include nokia_5110.h#include english_6x8_pixel.h/#include write_chinese_string_pixel.h#include unsigned char TEXT = ;sbit LCD_RST = P14;sbit LCD_CE = P13;sbit LCD_DC = P12;sbit SDIN

35、= P11;sbit LCD_SCLK = P10sbit LCD_RST = P00;sbit LCD_CE = P01;sbit LCD_DC = P02;sbit SDIN = P03;sbit LCD_SCLK = P04;/*LCD_init : 3310LCD初始化*/void delay_1us(void) /1us延時函數(shù) unsigned int i; for(i=0;i1000;i+); void delay_1ms(void) /1ms延時函數(shù) unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int

36、n) /N ms延時函數(shù) unsigned int i=0; for (i=0;in;i+) delay_1ms(); void LCD_init(void) / 產(chǎn)生一個讓LCD復位(f wi)的低電平脈沖 LCD_RST = 0; delay_1us();delay_1us(); delay_1us(); LCD_RST = 1; / 關(guān)閉(gunb)LCD LCD_CE = 0; delay_1us(); / 使能LCD LCD_CE = 1; delay_1us(); LCD_write_byte(0 x21, 0); / 使用擴展命令(mng lng)設(shè)置LCD模式 LCD_writ

37、e_byte(0 xc8, 0); / 設(shè)置偏置電壓 LCD_write_byte(0 x06, 0); / 溫度校正 LCD_write_byte(0 x13, 0); / 1:48 LCD_write_byte(0 x20, 0); / 使用基本命令 LCD_clear(); / 清屏 LCD_write_byte(0 x0c, 0); / 設(shè)定顯示模式,正常顯示 / 關(guān)閉LCD LCD_CE = 0; /*LCD_clear : LCD清屏函數(shù)*/void LCD_clear(void) unsigned int i; LCD_write_byte(0 x0c, 0); LCD_writ

38、e_byte(0 x80, 0); for (i=0; i504; i+) LCD_write_byte(0, 1); /*LCD_set_XY : 設(shè)置(shzh)LCD坐標函數(shù)輸入(shr)參數(shù):X :083 Y :05*/void LCD_set_XY(unsigned char X, unsigned char Y) LCD_write_byte(0 x40 | Y, 0);/ column LCD_write_byte(0 x80 | X, 0); / row /*LCD_write_char : 顯示(xinsh)英文字符輸入?yún)?shù):c :顯示的字符;*/void LCD_write

39、_char(unsigned char c) unsigned char line; c -= 32; for (line=0; line6; line+) LCD_write_byte(font6x8cline, 1); void LCD_write_english_char(unsigned char X,unsigned char Y,unsigned char zifu) LCD_set_XY(X,Y);LCD_write_char(zifu); /*LCD_write_english_String : 英文字符串顯示函數(shù)輸入?yún)?shù):*s :英文字符串指針; X、Y : 顯示字符串的位置

40、,x 0-83 ,y 0-5*/void LCD_write_english_string(unsigned char X,unsigned char Y,unsigned char *s) LCD_set_XY(X,Y); while (*s) LCD_write_char(*s); s+; /*LCD_write_chinese_string: 在LCD上顯示(xinsh)漢字輸入?yún)?shù)(cnsh):X、Y :顯示漢字的起始X、Y坐標; ch_with :漢字(Hnz)點陣的寬度 num :顯示漢字的個數(shù); line :漢字點陣數(shù)組中的起始行數(shù) row :漢字顯示的行間距LCD_write_

41、chi(0,0,12,7,0,0);LCD_write_chi(0,2,12,7,0,0);LCD_write_chi(0,4,12,7,0,0);/可以顯示4行漢字 參數(shù)意義 列 行 字寬12不能變 顯示字數(shù) 第幾個開始 間隔*/ void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num, unsigned char line,unsigned char row) unsigned char i,n; LCD_set_XY(X,Y); /設(shè)置初

42、始位置 for (i=0;inum;) for (n=0; nch_with*2; n+) /寫一個漢字 if (n=ch_with) /寫漢字的下半部分 if (i=0) LCD_set_XY(X,Y+1); else LCD_set_XY(X+(ch_with+row)*i),Y+1); LCD_write_byte(write_chineseline+in,1); i+; LCD_set_XY(X+(ch_with+row)*i),Y); /*LCD_write_byte : 使用(shyng)SPI接口寫數(shù)據(jù)到LCD輸入(shr)參數(shù):data :寫入的數(shù)據(jù); command :寫數(shù)據(jù)

43、(shj)/命令選擇;*/void LCD_write_byte(unsigned char dat, unsigned char command) unsigned char i; /PORTB &= LCD_CE ; / 使能LCD LCD_CE = 0; if (command = 0) PORTB &= LCD_DC ; / 傳送命令 LCD_DC = 0; else PORTB |= LCD_DC ; / 傳送數(shù)據(jù) LCD_DC = 1;for(i=0;i8;i+)if(dat&0 x80)SDIN = 1;elseSDIN = 0;LCD_SCLK = 0;dat = dat 1;

44、LCD_SCLK = 1; SPDR = data; / 傳送數(shù)據(jù)到SPI寄存器 while (SPSR & 0 x80) = 0); / 等待數(shù)據(jù)傳送完畢 PORTB |= LCD_CE ; / 關(guān)閉LCD LCD_CE = 1; 超聲波檢測#ifndef _ULTRASONIC_H_#define _ULTRASONIC_H_#define uchar unsigned char #define uint unsigned int#define ulong unsigned longextern void usonic_count(void);extern void lenth(void)

45、;extern void usonic_startmodle(void);#endifC文件(wnjin)/* 超聲波模塊(m kui)*/#include #include #include #include sbit Trig=P26; / 定義(dngy)HC-SR04發(fā)送端sbit Echo=P27; /定義HC-SR04接收端extern uint usonic_time,usonic_flag;extern float usonic_s;extern float corr;void usonic_count(void) 顯示程序 H文件#ifndef _DISPLAY_H_#define _DISPLAY_H_#define uchar unsigned char #define uint unsigned int#define ulong unsigned longvoid usonic_display();#endif C文件(wnjin) #include #include #include ex

溫馨提示

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

評論

0/150

提交評論