2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  題 目: 超聲波測距儀的設計 </p><p>  課 程: 單片機原理及應用課程設計 </p><p>  專 業(yè): 電氣工程及其自動化 </p><p&g

2、t;<b>  第 一 部 分</b></p><p><b>  任</b></p><p><b>  務</b></p><p><b>  書</b></p><p>  《單片機原理及應用》課程設計任務書</p><p>

3、<b>  一、課題名稱</b></p><p><b>  超聲波測距儀的設計</b></p><p><b>  二、課程設計目的</b></p><p>  課程設計是課程教學中的一項重要內容,是達到教學目標的重要環(huán)節(jié),是綜合性較強的實踐教學環(huán)節(jié),它對幫助學生全面牢固地掌握課堂教學內容、培養(yǎng)學生

4、的實踐和實際動手能力、提高學生全面素質具有很重要的意義。</p><p>  《單片機原理及應用》是一門理論性、實用性和實踐性都很強的課程,課程設計環(huán)節(jié)應占有更加重要的地位。單片機原理及應用課程設計的目的是讓學生在理論學習的基礎上,通過完成一個涉及MCS-51單片機多種資源應用并具有綜合功能的小系統(tǒng)目標板的設計與編程應用,使學生不但能將課堂上學到的理論知識與實際應用結合起來,而且能進一步加深對電子電路、電子元器件

5、等知識的認識與理解,同時在軟件編程、排錯調試、相關軟件和儀器設備的使用技能等方面得到較全面的鍛煉和提高。為今后能夠獨立進行某些單片機應用系統(tǒng)的開發(fā)設計工作打下一定的基礎。通過單片機硬件和軟件設計、調試、整理資料等環(huán)節(jié)的培訓,使學生初步掌握工程設計方法和組織實踐的基本技能,逐步熟悉開展科學實踐的程序和方法。</p><p><b>  三、課程設計內容</b></p><p

6、>  設計以89C51單片機和外圍元器件構成的單片機應用系統(tǒng),并完成相應的軟硬件調試。</p><p>  1. 系統(tǒng)方案設計:綜合運用單片機課程中所學到的理論知識,學生根據所選課題的任務、要求和條件進行總體方案的設計。</p><p>  2. 硬件電路設計:對方案中以單片機為核心的電路進行設計計算,包括元器件的選擇和電路參數的計算,并畫出總體電路圖。</p><

7、;p>  3. 軟件設計:根據已設計出的軟件系統(tǒng)框圖,用匯編語言或C51編制出各功能模塊的子程序和整機軟件系統(tǒng)的主程序。</p><p>  4. 調試:在單片機EDA仿真軟件環(huán)境Proteus下進行仿真設計并調試;或在單片機周立功實驗箱上進行相關設計并調試。</p><p><b>  四、課程設計要求</b></p><p>  1.

8、 測量有效范圍0-60cm;</p><p>  2. 測量的距離值在1602LED液晶上顯示(保留一位小數);</p><p>  3. 設計硬件原理圖;</p><p><b>  4. 編寫程序。</b></p><p><b>  五、進度安排</b></p><p>

9、;  七、課程設計報告內容:</p><p>  總結設計過程,寫出設計報告,設計報告具體內容要求如下:</p><p>  1.課程設計的目和設計的內容。</p><p>  2.課程設計的要求。</p><p>  3.控制系統(tǒng)總框圖及系統(tǒng)工作原理。</p><p>  4.控制系統(tǒng)的硬件電路連接圖,電路的原理。

10、</p><p>  5.軟件設計流程圖及其說明。</p><p>  6.電路設計,軟件編程、調試中遇到的問題及分析解決方法。</p><p>  7.實驗結果及其分析。</p><p><b>  8.體會。</b></p><p><b>  第 二 部 分</b>&l

11、t;/p><p><b>  課</b></p><p><b>  程</b></p><p><b>  設</b></p><p><b>  計</b></p><p><b>  報</b></p&

12、gt;<p><b>  告</b></p><p><b>  目 錄</b></p><p><b>  1 課題簡介7</b></p><p><b>  1.1設計目的7</b></p><p><b>  1.2

13、設計內容7</b></p><p>  1.3設備及工作環(huán)境7</p><p><b>  2 方案設計8</b></p><p>  2.1 超聲波測距原理8</p><p>  2.2 系統(tǒng)總體設計方案9</p><p>  3硬件電路設計10</p>&

14、lt;p>  3.1 時鐘電路10</p><p>  3.2 復位電路10</p><p>  3.3 1602液晶顯示電路10</p><p>  3.4超聲波發(fā)射模塊11</p><p>  3.5超聲波接收模塊11</p><p>  4 軟件編程設計12</p><p&g

15、t;  4.1 程序設計流程圖12</p><p>  4.2 1602LCD液晶顯示控制程序12</p><p>  4.3 超聲波測速模塊發(fā)送程序18</p><p>  4.4 超聲波模塊回波檢測程序19</p><p>  4.5 數據處理程序19</p><p>  4.6 數據送液晶顯示程序20

16、</p><p>  5 實驗與結果分析21</p><p>  5.1軟硬件仿真調試21</p><p>  5.2 結果分析21</p><p>  6 小結與體會23</p><p>  參 考 文 獻24</p><p><b>  附錄25</b>&l

17、t;/p><p><b>  1 課題簡介 </b></p><p><b>  1.1設計目的</b></p><p> ?。?) 設計一個超聲波測距儀;</p><p> ?。?)課程設計是課程教學中的一項重要內容,是達到教學目標的重要環(huán)節(jié),是綜合性較強的實踐教學環(huán)節(jié),它對幫助學生全面牢固地掌握課堂

18、教學內容、培養(yǎng)學生的實踐和實際動手能力、提高學生全面素質具有很重要的意義。</p><p>  《單片機原理及應用》是一門理論性、實用性和實踐性都很強的課程,課程設計環(huán)節(jié)應占有更加重要的地位。單片機原理及應用課程設計的目的是讓學生在理論學習的基礎上,通過完成一個涉及MCS-51單片機多種資源應用并具有綜合功能的小系統(tǒng)目標板的設計與編程應用,使學生不但能將課堂上學到的理論知識與實際應用結合起來,而且能進一步加深對電

19、子電路、電子元器件等知識的認識與理解,同時在軟件編程、排錯調試、相關軟件和儀器設備的使用技能等方面得到較全面的鍛煉和提高。為今后能夠獨立進行某些單片機應用系統(tǒng)的開發(fā)設計工作打下一定的基礎。通過單片機硬件和軟件設計、調試、整理資料等環(huán)節(jié)的培訓,使學生初步掌握工程設計方法和組織實踐的基本技能,逐步熟悉開展科學實踐的程序和方法。</p><p><b>  1.2 設計內容</b></p&g

20、t;<p>  1.2.1 設計要求</p><p>  設計一個超聲波測距儀。</p><p><b>  具體要求:</b></p><p>  (1)測量范圍:0-60cm;</p><p>  (2)測量精度:±5%;</p><p>  (3)選定設計方案,畫出系

21、統(tǒng)框圖,寫出詳細的設計過程;</p><p>  (4) 利用Protel 99 SE軟件畫出一套完整的設計電路圖,并列出所有的元件清單;</p><p>  1.2.2 設計內容及任務</p><p>  設計以89C51單片機和外圍元器件構成的單片機應用系統(tǒng),并完成相應的軟硬件調試。</p><p> ?。?) 系統(tǒng)方案設計:綜合運用單片

22、機課程中所學到的理論知識,根據所選課題的任務、要求和條件進行總體方案的設計。</p><p>  (2)硬件電路設計:對方案中以單片機為核心的電路進行設計計算,包括元器件的選擇和電路參數的計算,并畫出總體電路圖。</p><p> ?。?) 軟件設計:根據已設計出的軟件系統(tǒng)框圖,用C51語言編制出各功能模塊的子程序和整機軟件系統(tǒng)的主程序。</p><p>  (4)

23、調試:在銳志RZ-51/AVR V2.8開發(fā)板上進行相關設計并調試。</p><p> ?。?)在液晶顯示屏上顯示測量的距離,以厘米為單位,保留一位小數。</p><p> ?。?)軟件設計必須應用8052片內定時器,采用定時中斷結構,可以采用軟件中斷的延時法。</p><p>  1.3設備及工作環(huán)境</p><p> ?。?)軟件:Win

24、dows XP操縱系統(tǒng)、Keil C51軟件、STC_ISP_V479軟件;</p><p>  (2)硬件:銳志RZ-51/AVR V2.8開發(fā)板。</p><p><b>  2 方案設計</b></p><p>  2.1 超聲波測距原理</p><p>  超聲波是一種人耳無法聽到的、頻率一般超過20kHz的聲

25、音。</p><p>  波的傳播速度是用頻率乘以波長來表示。聲波在空氣中的傳播速度較慢,約為344m/s(20ºC)。在這種較低的傳播速度下,波長很短,就意味著可以獲得較高的距離和方向分辯率。正是由于這種較高的分辯率特性,才使我們有可能在進行測量時得很高的精確度。超聲波設備的外表面尺寸易于獲得精確的輻射。</p><p>  超聲波對金屬、木材、混凝土、玻璃、橡膠和紙等可以反射

26、近乎100%,相反對布、棉花、絨毛等會被吸收而難以實行反射波的探測。</p><p><b> ?。?)溫度效應</b></p><p>  聲波傳播的速度C=331.5+0.607t(m/s)。也就是說,聲音傳播速度隨周圍溫度的變化而有所不同。因此,要精確的測量與某個物體之間的距離時,始終檢查周圍溫度是十分必要的。</p><p><b

27、> ?。?)衰減</b></p><p>  傳播到空氣中的超聲波強度隨距離的變化成比例地減弱,這是因為衍射現象所導致的在球形表面上的擴散損失,也是因為介質吸收能量產生的吸收損失。</p><p>  如圖1所示,超聲波的頻率越高,衰減率就越高,波的傳播距離也就越短。</p><p>  圖1 聲壓在不同距離上的衰減特性</p>&

28、lt;p> ?。?)壓電式超聲波發(fā)生器原理</p><p>  超聲波發(fā)生器可以分為兩大類:一類是用電氣方式產生超聲波,一類是用機械方式產生超聲波。電氣方式包括壓電型、磁致伸縮型和電動型等;機械方式有加爾統(tǒng)笛、液哨和氣流旋笛等。它們所產生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。目前較為常用的是壓電式超聲波發(fā)生器。</p><p>  壓電式超聲波發(fā)生器實際上是利用

29、壓電晶體的諧振來工作的。超聲波發(fā)生器內部結構如圖2所示,它有兩個壓電晶片和一個共振板。當它的兩極外加脈沖信號,其頻率等于壓電晶片的固有振蕩頻率時,壓電晶片將會發(fā)生共振,并帶動共振板振動,便產生超聲波。反之,如果兩電極間未外加電壓,當共振板接收到超聲波時,將壓迫壓電晶片作振動,將機械能轉換為電信號,這時它就成為超聲波接收器了。</p><p>  圖2 壓電式超聲波發(fā)生器的構造</p><p&

30、gt;  (4)超聲波測距的優(yōu)缺點</p><p><b>  超聲波測距的優(yōu)點:</b></p><p>  1)對雨、霧、雪的穿透力強、衰減小,因此汽車聲納雷達可以在雨、雪、大霧等惡劣天氣下工作。</p><p>  2)超聲波測距的原理簡單、制作方便、成本低。</p><p><b>  超聲波測距的缺點

31、:</b></p><p>  1)聲波的傳播速度相對于電磁波來說慢了許多,當汽車在高速公路上以每小時上百公里的速度高速行駛時,使用超聲波測距無法跟上車距的實時變化,誤差大;</p><p>  2)超聲波的方向性相對于激光光束來講要差的多,發(fā)散角大。當要測量距離較遠的目標時,一方面由于發(fā)散而使能量大大降低,另一方面會使分辨力下降,導致將鄰車道的車輛或路邊的物體作為測量目標。&

32、lt;/p><p>  2.2 系統(tǒng)總體設計方案</p><p>  本系統(tǒng)由時鐘電路、復位電路、超聲波發(fā)射、回波信號接收、液晶顯示等硬件電路部分以及相應的軟件部分構成。整個系統(tǒng)由單片機AT89S52控制,超聲波傳感器采用收發(fā)分體式,分別是一支超聲波發(fā)射換能器TCT40-16T和一支超聲波接收換能器TCT40-16R。超聲波信號通過超聲波發(fā)射換能器發(fā)射至空氣中,遇被測物反射后回波被超聲波接收換

33、能器接收。進行相關處理后,輸入單片機的INT1腳產生中斷,計算中間經歷的時間,通過換算得出測試的距離。</p><p>  圖3 系統(tǒng)結構框圖 </p><p><b>  3硬件電路設計</b></p><p><b>  3.1 時鐘電路</b></p><p>  AT89S

34、52單片機內部有一個用于構成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2.這兩個引腳跨接石英晶體和微調電容,構成一個穩(wěn)定的自激振蕩器,圖4是AT89S52內部時鐘方式的電路。電路中的電容C1和C2的典型值通常選擇為30pF。</p><p>  圖4 AT89S52內部時鐘方式的電路</p><p><b>  3.2 復位電路</b&

35、gt;</p><p>  AT89S52的復位是由外部的復位電路實現的,常有上電自復位和按鈕復位兩種方式。本系統(tǒng)采用的是如圖5所示的按鍵手動電平復位電路。按鍵手動電平復位是通過RST端經電阻與電源VCC接通來實現的。當時鐘頻率選用11.0592MHz時,C的典型取值為10uF,R的取值為2KΩ。</p><p>  圖5 按鍵手動電平復位電路</p><p> 

36、 3.3 1602液晶顯示電路</p><p>  本設計使用的是2行16個字的1602液晶模塊作為測量值顯示部分。1602液晶也叫1602字符型液晶 它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊 它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔 每行之間也有也有間隔 起到了字符間距和行間距的作用,正因為如此 所以他不能顯示圖形。如圖6為1602L

37、CD接線圖。1602 采用標準的16腳接口,其中:</p><p>  第1腳:VSS為地電源</p><p>  第2腳:VDD接5V正電源</p><p>  第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K 的電位器調整對比度</p><p>  第4

38、 腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器, 圖6 1602LCD接線圖</p><p>  與單片機的P2.0口相連。 </p><p>  第5腳:RW為讀寫信號線, 高電平時進行讀操作,低電平時進行寫操作,與單片機P2.1口相連?! ?lt;/p><p>  第6 腳:E端為使能端,當E端由高電平跳變成低電平

39、時,液晶模塊執(zhí)行命令。</p><p>  第7~14腳:D0~D7為8位雙向數據線,與單片機P0口相連。</p><p>  第15、16腳:背光電源的正負極,分別接+5V電源和地。</p><p>  3.4超聲波發(fā)射模塊</p><p>  超聲波發(fā)射部分是為了讓超聲波發(fā)射換能器TCT40-16T能向外界發(fā)出40 kHz左右的方波脈沖信

40、號。40 kHz左右的方波脈沖信號的產生通常有兩種方法:采用硬件如由555振蕩產生或軟件如單片機軟件編程輸出,本系統(tǒng)采用后者。編程由單片機P3.2端口輸出40 kHz左右的方波脈沖信號,由于單片機端口輸出功率不夠,40 kHz方波脈沖信號分 </p><p>  圖7 超聲波發(fā)射模塊</p><p>  成兩路,送給一個由CD406

41、9組成的推挽式電路進行功率放大以便使發(fā)射距離足夠遠,滿足測量距離要求,最后送給超聲波發(fā)射換能器TCT40-16T以聲波形式發(fā)射到空氣中。發(fā)射部分的電路,如圖7所示。圖中輸出端上拉電阻R6,R7,一方面可以提高反向器CD4069輸出高電平的驅動能力,另一方面可以增加超聲換能器的阻尼效果,縮短其自由振蕩的時間。</p><p>  3.5超聲波接收模塊</p><p>  上述TCT40-16

42、T發(fā)射的在空氣中傳播,遇到障礙物就會返回,超聲波接收部分是為了將反射波(回波)順利接收到超聲波接收換能器TCT40-16R進行轉換變成電信號,并對此電信號進行放大、濾波、整形等處理后,這里用索尼公司生產的集成芯片CX20106,得到一個負脈沖送給單片機的P3.3(INT1)引腳,以產生一個中斷。接收部分的電路,如圖8所示。 </p><p>  可以看到,集成芯片CX20106在接收部分電路中起了很大的作用。CX

43、20106是一款應用廣泛的紅外線檢波接收的專用芯片,其具有功能強、性能優(yōu)越、外圍接口簡單、成本低等優(yōu)點,由于紅外遙控常用的載波頻率38 kHz與測距的超聲波頻率40 kHz比較接近,而且CX20106內部設置的濾波器中心頻率f0可由其5腳(FW)外接電阻調節(jié),阻值越大中心頻率越低,范圍為30~60 kHz。 圖8 超聲波接收模塊</p><p>  故本次設計用它來做接收電

44、路。CX20106內部由前置放大器、限幅放大器、帶通濾波器、檢波器、積分器及整形電路構成。工作過程如下:接收的回波信號先經過前置放大器和限幅放大器,將信號調整到合適幅值的矩形脈沖,由濾波器進行頻率選擇,濾除干擾信號,再經整形,送給輸出端7腳(OUT)。當接收到與CX20106濾波器中心頻率相符的回波信號時,其輸出端7腳就輸出低電平,而輸出端7腳直接接到AT89S52的P3.3(INT1)引腳上,以觸發(fā)中斷。若頻率有一些誤差,可調節(jié)芯片引

45、腳5的外接電阻R4,將濾波器的中心頻率設置在40 kHz,就可達到理想的效果。 </p><p><b>  4 軟件編程設計</b></p><p>  4.1 程序設計流程圖</p><p>  圖9 程序設計流程圖</p><p>  4.2 1602LCD液晶顯示控制程序</p><p>

46、;  1602液晶也叫1602字符型液晶 它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊 它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔,每行之間也有也有間隔,起到了字符間距和行間距的作用,正因為如此,所以他不能顯示圖形。對它的操作通常有讀寫數據、讀寫命令和檢測忙信號等操作。在介紹程序之前先介紹本程序所涉及到的一些指令的意義。</p><p>  

47、1602液晶的驅動芯片HD44780內置了DDRAM(顯示數據存儲RAM)、CGROM(字符存儲ROM)和CGRAM(用戶自定義RAM)。 DDRAM就是顯示數據RAM,用來寄存待顯示的字符代碼。共80個字節(jié),其地址和屏幕的對應關系如下圖所示:</p><p>  圖10 DDRAM地址與屏幕對應關系圖</p><p>  也就是說想要在LCD1602屏幕的第一行第一列顯示一個“

48、A”字,就要向DDRAM的00H地址寫入“A”的</p><p>  代碼就行了。但具體的寫入是要按LCD模塊的指令格式來進行的,一行有40個地址,在1602中我們就用前16個就行了。第二行也一樣用前16個地址。對應如下圖所示: </p><p>  圖11 DDRAM地址與屏幕對應關系圖(實際顯示部分)</p><p>  但是我們往DDRAM里的00H地址處送一

49、個數據,譬如0x31(數字1的代碼)并不能顯示1出來。這是令初學者很容易出錯的地方,原因就是如果你要想在DDRAM的00H地址處顯示數據,則必須將00H加上80H,即0X80+0x00,若要在DDRAM的01H處顯示數據,則必須將01H加上80H即 0X80+0x01,具體程序會在后面介紹寫地址的操作處解釋。</p><p> ?。?)基本操作時序: 讀狀態(tài)    

50、60;      輸入:RS=L,RW=H,E=H                     輸出:DB0~DB7=狀態(tài)字 寫指令   

51、;        輸入:RS=L,RW=L,E=下降沿脈沖,DB0~DB7=指令碼 輸出:無 讀數據           輸入:RS=H,RW=H,E=H       &#

52、160;                         輸出:DB0~DB7=數據 寫數據      

53、0;    輸入:RS=H,RW=L,E=下降沿脈沖,DB0~DB7=數據 輸出:無 </p><p> ?。?)常用指令及意義</p><p><b>  1)清屏指令</b></p><p>  圖12 清屏指令對應指令編碼 </p><p>  功能:<

54、1> 清除液晶顯示器,即將DDRAM的內容全部填入“空白”的字符碼20H;</p><p>  <2> 光標歸位,即將光標撤回液晶顯示屏的左上方; <3> 將地址計數器(AC)的值設為0。 </p><p>  2)輸入模式設置指令</p><p>  圖13 輸入模式設置對應指令編碼</p><p>  功

55、能:設定每次寫入1位數據后光標的移位方向,并且設定每次寫入的一個字符是否</p><p><b>  移動。</b></p><p>  參數設定的情況如下所示: 位名              設置 I/D 

56、60;           0 寫入新數據后光標左移      1 寫入新數據后光標右移 S               

57、60; 0 寫入新數據后顯示屏不移動 1 寫入新數據后顯示屏整體右移1個字</p><p>  3)顯示開關控制指令</p><p>  圖14 顯示開關控制對應指令編碼</p><p>  功能:控制顯示器開/關、光標顯示/關閉以及光標是否閃爍。參數設定的情況如下: 參數設定情況如下所示</p><p>  位名 

58、0;            設置 D                0=顯示功能關      &#

59、160;    1=顯示功能開 C                0=無光標              &#

60、160;    1=有光標 B                0=光標不閃爍               1

61、=光標閃爍</p><p>  4)設定顯示屏或光標移動方向指令</p><p>  圖15 設定顯示屏或光標移動方向指令編碼</p><p>  功能:使光標移位或使整個顯示屏幕移位。參數設定的情況如下:</p><p>  參數設定情況如下所示: S/C       

62、;        R/L                設定情況 0           &

63、#160;     0          光標左移1格,且AC值減1 0                 1  

64、        光標右移1格,且AC值加1 1                 0         &

65、#160;顯示器上字符全部左移一格,但光標不動 1                 1          顯示器上字符全部右移一格,但光標不動 </p>&l

66、t;p><b>  5)功能設定指令</b></p><p>  圖16 功能設定指令編碼</p><p>  功能:設定數據總線位數、顯示的行數及字型。</p><p>  參數設定的情況如下: </p><p>  位名       

67、0;       設置 DL                           

68、60; 0 數據總線為4位 1 數據總線為8位 N                               0 顯示1行

69、 1 顯示2行 F                                0 5×7點

70、陣/每字符   1 5×10點陣/每字符</p><p>  6)設定DDRAM地址指令</p><p>  圖17 設定DDRAM地址指令編碼</p><p>  功能:設定下一個要存入數據的CGRAM的地址。 (注意這里我們送地址的時候應該是0x80+Address,</p><p>  這也是前面說到

71、寫地址命令的時候要加上0x80的原因)</p><p>  7)讀取忙信號或AC指令</p><p>  圖18 讀取忙信號或AC指令編碼</p><p>  功能:<1> 讀取忙碌信號BF的內容,BF=1表示液晶顯示器忙,暫時無法接收單片機送來的數據或指令; 當BF=0時,液晶顯示器可以接收單片機送來的數據或指令;</p><p&g

72、t;  <2> 讀取地址計數器(AC)的內容。</p><p>  8)數據寫入DDRAM或CGRAM指令</p><p>  圖19 數據寫入DRAM或CGRAM指令編碼</p><p>  功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應的字符;</p><p>  <2> 將用戶自己設

73、計的圖形存入CGRAM。 </p><p><b> ?。?)操作時序圖</b></p><p><b>  1)讀數據、命令</b></p><p>  讀狀態(tài)           輸入:RS=0,RW=1,E=1

74、60; </p><p>  讀數據           輸入:RS=1,RW=1,E=1</p><p>  圖20 讀、數據、命令時序圖</p><p><b>  2)寫數據、命令</b></p><p>

75、  寫指令           輸入:RS=0,RW=0,E=下降沿脈沖,DB0~DB7=指令碼 寫數據           輸入:RS=1,RW=0,E=下降沿脈沖,DB0~DB7=數據 </p><p>  圖

76、21 寫數據、命令時序圖</p><p><b>  (4)程序舉例</b></p><p>  1)1602液晶忙信號檢測</p><p>  uchar BusyTest(void) </p><p><b>  {</b></p><p>  bit result

77、;</p><p>  RS=0; //rs為0 rw為1 數據位第8位為忙信號</p><p><b>  RW=1;</b></p><p>  E=1; </p><p>  _nop_(); </p><p><b>  _nop_();</b

78、></p><p><b>  _nop_(); </b></p><p>  _nop_(); </p><p>  result=BF; </p><p>  E=0; </p><p>  return result;</p><p><

79、;b>  } </b></p><p>  2)1602寫命令指令</p><p>  void WriteCom (unsigned char dictate)</p><p><b>  { </b></p><p>  while(BusyTest()==1); </p>&l

80、t;p>  RS=0; //rs為0 rw為0 e下降沿寫入指令</p><p><b>  RW=0; </b></p><p>  E=0; </p><p>  _nop_(); //e為0期間,將數據送到P0口</p><

81、;p>  _nop_(); </p><p>  P0=dictate; </p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</

82、b></p><p>  _nop_(); </p><p>  E=1; </p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><

83、b>  _nop_();</b></p><p>  _nop_(); </p><p>  E=0; </p><p><b>  }</b></p><p>  3)1602寫地址指令</p><p>  void

84、WriteAddress(unsigned char x) //1602液晶確定將要寫入DDRAM的數據的地址</p><p><b>  {</b></p><p>  WriteCom(x|0x80); //要顯示的地址+0x80為實際要寫入的地址 可用或操作實現</p><p><b>  }</b>

85、</p><p>  4)1602寫數據指令</p><p>  void WriteData(unsigned char y)</p><p><b>  {</b></p><p>  while(BusyTest()==1); </p><p>  RS=1;

86、//rs為1 rw為0 e下降沿寫入指令</p><p><b>  RW=0;</b></p><p>  E=0; </p><p>  P0=y; //e為0期間,將數據送到P0口</p><p><b>  _nop_();</b>

87、;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); </p><p>  E=1; </p><p><b>  _nop_();</

88、b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); </p><p>  E=0; </p><p><b>  }</

89、b></p><p>  5)1602初始化指令</p><p>  void LcdInitiate(void) </p><p><b>  {</b></p><p>  delay(15); </p><p>  WriteCom(0x38);

90、 //5*7點陣 數據總線為8位 顯示兩行</p><p>  delay(5); </p><p>  WriteCom(0x38);</p><p><b>  delay(5);</b></p><p>  WriteCom(0x38); //液晶廠家推薦方式——三次寫入確

91、保確切寫入</p><p><b>  delay(5);</b></p><p>  WriteCom(0x0c);//顯示功能開,光標不顯示</p><p><b>  delay(5);</b></p><p>  WriteCom(0x06); //寫入新數據后光標右移(即A

92、C自加1)</p><p><b>  delay(5);</b></p><p>  WriteCom(0x01); //清屏指令</p><p><b>  delay(5);</b></p><p><b>  } </b></p><p>

93、;  4.3 超聲波測速模塊發(fā)送程序</p><p><b>  Tx=1;</b></p><p>  delay_20us();//在超聲波模塊發(fā)射腳產生20us高電平,啟動測速</p><p>  Tx=0; </p><p>  while(Rx==0)</p><p&

94、gt;  ; //啟動完成后接收腳自動置1 等啟動完成</p><p>  succeed_flag=0; //測速成功標志置0 </p><p>  EX1=1; //開外部中斷1 超聲波模塊的接收叫接在外部中斷1的輸入腳 </p><p>  TH1=0; </p><p> 

95、 TL1=0; //定時器1 的初值設0 用來計時 </p><p>  TR1=1; //啟動定時器1 開始計時</p><p>  EA=1;//開總中斷 </p><p>  delay(80);//等待80ms 此間若測速完成 會進外部中斷 置測速成功標志位1 讀取時間</p><p>

96、;  4.4 超聲波模塊回波檢測程序</p><p>  INT0_() interrupt 2 //若測速成功 則進入此中斷 讀取計時器計時數值 </p><p><b>  { </b></p><p>  outcomeH =TH1; </p><p>  outcomeL =TL1;

97、 </p><p>  succeed_flag=1; </p><p><b>  }</b></p><p>  TR1=0; //停止計時</p><p>  EX1=0; //禁止外部中斷</p><p><b>  4.5數據處理程

98、序</b></p><p>  1)計算測速距離 </p><p>  if(succeed_flag==1)//如果測速成功,會讀取時間的數值</p><p><b>  { </b></p><p>  Distance_data=outcomeH; <

99、/p><p>  distance_data<<=8; </p><p>  distance_data=distance_data|outcomeL; </p><p>  distance_data*=12; </p><p>  distance_data/

100、=58; //Y米=X秒*340/2 Y厘米=X微秒/58 </p><p>  } </p><p>  if(succeed_flag==0)//60ms后 若為測速未成功,則賦0</p><p><b>  {</b></

101、p><p>  distance_data=0; </p><p><b>  }</b></p><p>  deal(distance_data); //數據處理 分離個、十、百 </p><p>  2)分離距離數值的個位、十位和百位</p><p

102、>  void deal(uint temp_data) </p><p><b>  { </b></p><p>  uchar ge_data,shi_data,bai_data ;</p><p>  bai_data=temp_data/100 ; //將計算過后的指令取出個位、十位、百位</p>

103、<p>  temp_data=temp_data%100; </p><p>  shi_data=temp_data/10 ;</p><p>  ge_data=temp_data%10; </p><p>  EA=0; //關總中斷,確保數據確實讀出</p><p>  bai = bai_d

104、ata;</p><p>  shi = shi_data;</p><p>  ge = ge_data ; </p><p><b>  EA=1;</b></p><p><b>  }</b></p><p>  4.6數據送液晶顯示程序</p>&l

105、t;p>  WriteAddress(0x41); </p><p>  WriteData('J'); </p><p>  WriteData('U'); </p><p>  WriteData('L'); </p><p>  WriteData('I');

106、 </p><p>  WriteData(':'); </p><p>  WriteData(digit[bai]);</p><p>  WriteData(digit[shi]); </p><p>  WriteData('.'); </p><p>  WriteDa

107、ta(digit[ge]); </p><p>  WriteData(' '); </p><p>  WriteData('C'); </p><p>  WriteData('M'); </p><p><b>  5 實驗與結果分析</b></p>

108、<p>  5.1軟硬件仿真調試</p><p>  運用STC_ISP_V479軟件將編譯生成的hex文件燒寫到單片機中,液晶顯示屏在顯示2秒初始化界面后,即可實時顯示所測得的距離。</p><p><b>  1)初始界面</b></p><p>  圖22 液晶顯示初始界面</p><p>  圖 2

109、3(a) 圖 23(b)</p><p>  圖 23(c) 圖 23(d)</p><p>  圖23 超聲波測速工作顯示界面</p><p><b>  5.2 結果分析</b></p><p>

110、  本次課程設計所設計的超聲波測速程序,雖然能實時顯示所測得的距離,而且在實際調試、校準時也已將誤差縮小至2cm以內,可以滿足基本的測速范圍。但是仍然存在需要改進的地方,但由于時間和實際條件的限制無法做到盡善盡美。具體表現在兩個方面:1.測距的范圍有限,實驗發(fā)現最大測距距離在90cm左右;2.通過查閱資料得知,聲速在空氣中傳播速度與所處環(huán)境的溫度、濕度、氣壓等諸多因素有關,由于個人能力所限及實際情況無法將所有因素考慮在內,只是近似選取了

111、聲速在標準環(huán)境下的速度340m/s。</p><p><b>  6 小結與體會</b></p><p>  此次單片機原理及應用課程設計前后共計1周半的時間,由于整個過程從選題到功能模塊的學習到軟件硬件編程調試都是我自己一個人在摸索,所以1周半之后自己感覺收獲頗豐,感覺自己在過去一學期中學到的單片機及其外圍設備的知識以及單片機原理及應用這門課所特有的思維模式得到了充

112、分的發(fā)揮。</p><p>  在與老師進行簡單的溝通之后,我得到允許可以脫離給定課題的限制,自己按照自己的想法設計編程實現自己感興趣的東西,這一點讓我在整個課程設計的過程中都能保持高度的熱情。然而由于此次課程設計自始至終都是我一個人在慢慢摸索,而自己為了給自己一點挑戰(zhàn)性,所選課題中的超聲波測速模塊和1602液晶在平時都沒有接觸到,所以我需要在動手之前迅速學會對他們進行相應的操作。所以第一天和第二天的時間我都花在

113、了學習對這兩個模塊的操作上了,而整個課程設計期間也只有這兩天我所學到的東西是最多的。</p><p>  在了解了對超聲波測速模塊和1602液晶的操作之后,在第三天開始,我就開始根據預期的目的開始設計整個程序的流程,并一再的分析論證其可行性,因為我知道這將是整個課程設計的核心。我以為我一切已經準備就緒,但當我實際開始編程時,我還是卡在了對超聲波模塊的測速上,因為我發(fā)現我手頭掌握的關于超聲波模塊的資料,其選擇的驅動

114、芯片和我手頭的并不一致,而網上關于CX20106芯片的說明也是少之又少。我以為我遇到了瓶頸,覺得無法進行下去了,這時候舍友提醒我可以去聯(lián)系當初我購買板子的店家,從他們那尋求幫助,果不其然從他們那我得到了詳細的關于CX20106芯片的資料,同時他們提供給我的示例程序對我的軟件編寫部分帶來了一定的指導意義。</p><p>  平時實驗期間老師對我們說,正確編寫程序并不難,難的是能檢查出錯誤程序中的錯誤。而在此次課程

115、設計期間我就遇到了這樣的問題。在我按照流程圖編寫完程序之后,無論怎樣1602液晶始終不能顯示。然而我一遍遍的檢查流程圖,一次次的核對程序,并請同學幫忙檢查程序之后仍然發(fā)現不了錯誤,覺得從程序設計思想,到各模塊功能的操作以及到軟件編程都不存在錯誤。但液晶不現實是明擺的現實,我只能采取最原始的方法,將每一句語句拆分出來,一句句分析,而這竟花費了我半天的時間,最終發(fā)現在主程序的while循環(huán)后面多加了一個分號,致使程序無法最終進入顯示部分。而

116、這樣的低級錯誤本是不應該發(fā)生的,只能說自己在編寫程序的時候還沒有養(yǎng)成良好的習慣,不能及時回頭檢查程序編寫中可能出現的人為的低級錯誤。</p><p>  當然,在此刻課程設計期間,我所學到的遠不止這些。不管是如何迅速的熟悉并學會對新的器件的操作,還是設計程序流程圖,還是尋找程序中的錯誤,還是優(yōu)化程序,精簡不必要的指令,減少資源空間的浪費……</p><p>  在此次課程設計過程中我都有了

117、更進一步的認識。然而正如之前所說,由于時間條件限制和個人能力所限,此次設計的超聲波測速程序,只能滿足一般的測速要求,若要提高其精確度和穩(wěn)定性我還需要做大量的工作。而這將是我后續(xù)需要學習和完善的地方,或許它也會給我一年后的畢業(yè)設計帶來一定的提示與便捷。</p><p><b>  參 考 文 獻</b></p><p>  [1] 張毅剛主編,單片機原理及應用,北京:高

118、等教育出版社,2004</p><p>  [2] 范百剛,超聲原理與應用[M].,南京: 江蘇科學技術出版社,,1984</p><p>  [3] 朱善軍,單片機接口技術及應用[M],北京:北京航天航空大學出版社出版,2003</p><p>  [4] 區(qū)建昌,電子設備的電磁兼容性設計[M],北京:電子工業(yè)出版社出版,2002 </p><

119、p>  [5] 李建忠,單片機原理及應用,西安:西安電子科技大學出版社,2002</p><p>  [6] 賈伯年,傳感器技術,南京:東南大學出版社,2000</p><p>  [7] 閻石, 數字電子技術基礎,北京:高等教育出版社,1998</p><p>  [8] 譚浩強.,C程序設計(第三版),北京:清華大學出版社,2005</p>

120、<p><b>  附錄</b></p><p>  附1超聲波測距模塊圖片</p><p>  附2 1602液晶實物照片</p><p>  附3 單片機開發(fā)板照片</p><p><b>  附4系統(tǒng)原理圖</b></p><p><b>  附5

121、源程序</b></p><p>  #include <reg52.h> </p><p>  #include<intrins.h> </p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p

122、><p>  #define ulong unsigned long</p><p>  sbit Tx=P3^2; //超聲波模塊發(fā)射腳</p><p>  sbit Rx=P3^3; //超聲波模塊接收腳</p><p>  sbit RS=P2^0; //1602液晶指令、數據選擇位</p><p&g

123、t;  sbit RW=P2^1; //1602液晶讀寫選擇位</p><p>  sbit E=P2^2; //1602液晶使能位</p><p>  sbit BF=P0^7; //1602液晶忙信號位</p><p>  uchar code string[ ]= {"CHAO SHENG BO"}; </p&g

124、t;<p>  uchar code digit[ ]={"0123456789"}; </p><p>  uchar code string0[ ]={" CSB CE SU"};</p><p>  uchar code string1[ ]={" Designed by Pj"};</p>

125、<p>  uchar ge,shi,bai,outcomeH,outcomeL,i; </p><p>  bit succeed_flag; //測速成功標志位</p><p>  void delay1ms() //延時1ms</p><p><b>  {</b></p><p>  uns

126、igned char i,j;</p><p>  for(i=0;i<10;i++)</p><p>  for(j=0;j<33;j++)</p><p><b>  ; </b></p><p><b>  }</b></p><p>  void d

127、elay(unsigned char n) //延時n ms</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  for(i=0;i<n;i++)</p><p>  delay1ms();</p><p><b>

128、  }</b></p><p>  uchar BusyTest(void) //1602液晶忙信號檢測</p><p><b>  {</b></p><p>  bit result;</p><p>  RS=0; //rs為0 rw為1 數據位第8位為忙信號</p>

129、<p><b>  RW=1;</b></p><p>  E=1; </p><p>  _nop_(); </p><p><b>  _nop_();</b></p><p><b>  _nop_(); </b></p><

130、p>  _nop_(); </p><p>  result=BF; </p><p>  E=0; </p><p>  return result;</p><p><b>  }</b></p><p>  void WriteCom (unsigned char

131、dictate)//1602液晶寫指令</p><p><b>  { </b></p><p>  while(BusyTest()==1); </p><p>  RS=0; //rs為0 rw為0 e下降沿寫入指令</p><p><b>  RW=0; &

132、lt;/b></p><p>  E=0; </p><p>  _nop_(); //e為0期間,將數據送到P0口</p><p>  _nop_(); </p><p>  P0=dictate; </p><p>

133、;<b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); </p><p>  E=1;

134、</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); </p><p>  E=

135、0; </p><p><b>  }</b></p><p>  void WriteAddress(unsigned char x) //1602液晶確定將要寫入DDRAM的數據的地址</p><p><b>  {</b></p><p>  Write

136、Com(x|0x80); //要顯示的地址+0x80為實際要寫入的地址 可用或操作實現</p><p><b>  }</b></p><p>  void WriteData(unsigned char y)//1602液晶寫數據</p><p><b>  {</b></p><

137、p>  while(BusyTest()==1)</p><p><b>  ; </b></p><p>  RS=1; //rs為1 rw為0 e下降沿寫入指令</p><p><b>  RW=0;</b></p><p>  E=0;

溫馨提示

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

評論

0/150

提交評論