課程設(shè)計報告---車體傾斜姿態(tài)測量儀_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《智能儀表課程設(shè)計》設(shè)計報告</p><p>  課題名稱 車體傾斜姿態(tài)測量儀 </p><p>  學(xué)生學(xué)號、姓名 </p><p>  班級名稱 測控0802 </p><p>  指導(dǎo)教師

2、 </p><p>  揚州大學(xué)能源與動力工程學(xué)院</p><p><b>  二〇一一年九月</b></p><p><b>  總 目 錄</b></p><p>  第一部分:任務(wù)書 </p><p>  第二部分:課程設(shè)計報告</p><p&

3、gt;  第三部分:附錄 </p><p><b>  第 一 部 分</b></p><p><b>  任</b></p><p><b>  務(wù)</b></p><p><b>  書</b></p><p

4、>  《智能儀表課程設(shè)計》課程設(shè)計任務(wù)書</p><p><b>  一、課題名稱</b></p><p><b>  車體傾斜姿態(tài)測量儀</b></p><p>  二、設(shè)計內(nèi)容及設(shè)計要求</p><p>  利用SCA100t-D01傾斜角傳感器作為測量元件,設(shè)計一個傾斜姿態(tài)測量儀,具有下

5、面的功能:</p><p>  1.測量范圍為-30°~30°。</p><p>  2.精度為0.001°。</p><p><b>  3.誤差為°。</b></p><p>  4. 雙行LCD液晶顯示。</p><p>  5. 可以設(shè)置上下報警溫度

6、,當(dāng)溫度不在設(shè)置范圍內(nèi)時,可以報警。</p><p>  6. 具有RS232通信接口。</p><p><b>  三、時間安排</b></p><p><b>  第一周:</b></p><p>  星期一~星期二:布置任務(wù),熟悉資料,確定儀表的功能要求、性能指標(biāo)。熟悉實驗板原理圖和印刷板圖。

7、</p><p>  星期三~星期五:進行儀表的方案選擇,確定主要芯片、工作方式、輸入輸出信號的接口方式、鍵盤和顯示方式、以及通信方式。進行硬件設(shè)計和元器件選擇,畫出硬件原理圖。</p><p><b>  第二周:</b></p><p>  星期一~星期五:根據(jù)硬件原理圖,焊接硬件電路;測試硬件電路的功能;軟件設(shè)計,包括軟件需求說明、軟件結(jié)

8、構(gòu)框圖、主要軟件功能模塊的流程圖;編寫程序。</p><p><b>  第三周:</b></p><p>  星期一~星期三:調(diào)試程序,聯(lián)調(diào)軟件和硬件。</p><p>  星期四~星期五:寫課程設(shè)計報告。</p><p><b>  四、應(yīng)交成果</b></p><p>

9、<b>  應(yīng)交成果包括:</b></p><p>  紙質(zhì)課程設(shè)計報告和電子文檔;</p><p>  硬件原理圖的Protel文件,程序;</p><p>  可以演示的硬件和軟件成果。</p><p><b>  五、課程報告內(nèi)容</b></p><p>  課程設(shè)計報

10、告應(yīng)包括下列部分:</p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  儀表的功能要求、性能指標(biāo)要求。</p><p>  方案選擇:提出多種方案,進行方案比較,說明選定方案的理由,描述硬件和軟件的功能分工。</p><p>  硬件設(shè)計:包括硬件結(jié)構(gòu)框圖、原理圖及其各個主要環(huán)節(jié)的工作原理說明,元器件

11、選擇的計算方法或者理由,利用提供的實驗板焊接元器件。</p><p>  軟件設(shè)計:首先提出軟件的功能需求,然后進行軟件的結(jié)構(gòu)設(shè)計,再畫出主要功能模塊的軟件框圖。</p><p><b>  程序編寫和調(diào)試。</b></p><p><b>  設(shè)計小結(jié)。</b></p><p>  報告中硬件原理

12、于用Protel畫出,軟件框圖和程序流程圖用Visio畫出。</p><p><b>  第 二 部 分</b></p><p><b>  課</b></p><p><b>  程</b></p><p><b>  設(shè)</b></p>

13、<p><b>  計</b></p><p><b>  報</b></p><p><b>  告</b></p><p><b>  目 錄</b></p><p>  第一章 簡介…………………………………………………………………(

14、8-11)</p><p>  1.1 引言……………………………………………………………………… (8)</p><p>  1.2 雙軸傾角傳感器SCA100t簡介…………………………………………(8)</p><p>  1.3 SCA100t工作原理…………………………………………………… (8-9)</p><p>  1.4 ST

15、C89C51單片機簡介……………………………………………… (9-11)</p><p>  第二章 設(shè)計內(nèi)容及要求………………………………………………………(12)</p><p>  2.1 設(shè)計內(nèi)容……………………………………………………………… (12)</p><p>  2.2 設(shè)計要求……………………………………………………………… (12)</

16、p><p>  第三章 總體設(shè)計方案及原理框圖……………………………………… (13-15)</p><p>  3.1 原理框圖……………………………………………………………… (13)</p><p>  3.2 總體設(shè)計方案……………………………………………………… (13-15)</p><p>  第四章 硬件設(shè)計……………………………

17、…………………………… (16-18)</p><p>  4.1 傳感器硬件電路……………………………………………………… (16)</p><p>  4.2 液晶顯示器硬件電路……………………………………………… (16-17)</p><p>  4.3 通信接口硬件電路…………………………………………………… (17)</p><p&

18、gt;  4.4 報警電路…………………………………………………………… (17-18)</p><p>  4.5 總硬件原理圖………………………………………………………… (18)</p><p>  第五章 軟件設(shè)計………………………………………………………… (19-24)</p><p>  5.1 軟件的功能需求……………………………………………………

19、… (19)</p><p>  5.2 各部分程序框圖…………………………………………………… (19-24)</p><p>  第六章 程序編寫……………………………………………………………… (25)</p><p>  6.1 程序編寫中遇到的問題及解決辦法…………………………………… (25)</p><p>  第七章 結(jié)果

20、調(diào)試…………………………………………………………………(26)</p><p>  第八章 設(shè)計小結(jié)…………………………………………………………………(27)</p><p>  第九章 參考文獻…………………………………………………………………(28)</p><p>  附 錄 器件清單全部程序和實物圖片…………………………………… (30-41)</p&

21、gt;<p><b>  第一章 簡 介</b></p><p><b>  1.1 引言</b></p><p>  隨著市場需求和科技的發(fā)展,人們對工程、機械、航空、航海設(shè)備的可靠性和穩(wěn)定性提出了更高的要求,其中姿態(tài)測量是一項重要的指標(biāo)。傾角傳感器是測量關(guān)于某一基準(zhǔn)面的傾斜角或者是姿態(tài)的裝置。目前,市場上已有單軸、雙軸、三軸的傾

22、角傳感器,但大多都價格昂貴或者體積較大。本文提出以雙軸傳感器SCA100t和STC89C51單片機實現(xiàn)的設(shè)計,可大大降低系統(tǒng)成本,不但可以構(gòu)成一個單獨的數(shù)字輸出傳感器,也可以作為一個測量模塊,嵌入到測量控制系統(tǒng)中,廣泛應(yīng)用于機器人控制、平臺姿態(tài)(俯仰和滾轉(zhuǎn))測量、雙軸加速度測量等系統(tǒng)中。</p><p>  1.2 雙軸傾角傳感器SCA100t簡介</p><p>  SCA100T傾角傳

23、感器是芬蘭 VTI公司 2005年最新推出的, 利用MEMS技術(shù)開發(fā)生產(chǎn)的高精度的雙軸傾角傳感器 , 體積小重量輕僅1.2克。</p><p>  MEMS(Micro electro mechanical system)是二十一世紀(jì)的前沿技術(shù),采用MEMS技術(shù)可以在硅芯片上加工出完整的徽型電子機械系統(tǒng),包含了微型傳感器、微型機械結(jié)構(gòu)、以及信號處理和控制電路、通訊接口等于一體的微型器件, 把信息系統(tǒng)的微型化、多功

24、能化、 智能化和可靠性水平提高到新的高度 。</p><p>  該芯片的引腳圖及(圖1-1)說明如下:</p><p>  圖1-1 芯片引腳圖</p><p>  1.3 SCA100t工作原理</p><p>  該器件內(nèi)部包含了一個硅敏感微電容傳感器,測量芯片在X和Y方向的加速度以及一個專用ASIC集成電路, ASIC電路集成了EEP

25、ROM存儲器、信號放大器、AD轉(zhuǎn)換器、溫度傳感器和SPI串行通信接口,組成了一個完整的數(shù)字化傳感器。有±30o和±90o兩種量程 ,其主要原理如下:</p><p>  圖1-2 工作原理圖</p><p>  圖中g(shù)代表重力加速度,x和y分別代表雙軸的重力加速度,a和b分別代表雙軸上的重力加速度與水平的夾角;芯片內(nèi)部通過對x,y,g以及合成量的測量,再將信號通過一定

26、得集成電路,將輸出量與角度線性化、數(shù)字化,這樣得出的輸出量就為隨傾角變化的分量。</p><p>  其內(nèi)部結(jié)構(gòu)如圖1-3所示:</p><p>  圖 1-4 芯片內(nèi)部結(jié)構(gòu)圖</p><p>  分析內(nèi)部結(jié)構(gòu)可知SCA100t輸出有兩種形式,即模擬量與數(shù)字量,且:</p><p>  模擬輸出到角度的轉(zhuǎn)化公式為:α= arcsin [(Vo

27、ut-offset)/Sensitivity]</p><p>  其中Vout為芯片輸出的電壓(OUT_1、OUT_2輸出X、Y軸角度對應(yīng)電壓),offset是0°是輸出電壓(2.5V),Sensitivity是芯片靈敏度(SCA100t-D01為4V/g,SCA100t-D02為2V/g);</p><p>  數(shù)字輸出到角度轉(zhuǎn)化公式為:α= arcsin[(Dout -Do

28、ut@0°)/ Sensitivity]</p><p>  其中Dout為X或Y通道的數(shù)字輸出量,Dout@0°為0°時X或Y通道的數(shù)字輸出量,Sensitivity為芯片靈敏度(SCA100t-D01為1638LSB/g,SCA100t-D02為819LSB/g)。</p><p>  1.4 STC89C51單片機簡介</p><p&

29、gt;  1.4.1 STC89C51系列單片機的主要性能特點</p><p>  STC89C51系列單片機是宏晶科技推出的新一代超強抗干擾、高速、低功耗的單片機,指令代碼與傳統(tǒng)8051單片機完全兼容。</p><p>  MCS-51的主要特點為:</p><p><b>  ◆CPU為8位;</b></p><p>

30、;  ◆片內(nèi)帶振蕩器,頻率范圍為1.2~12MHz;</p><p>  ◆片內(nèi)帶128字節(jié)的數(shù)據(jù)存儲器;(RAM)</p><p>  ◆片內(nèi)帶4KB的Flash程序存儲器;(ROM)</p><p>  ◆程序存儲器的尋址空間為64KB;(需要擴展ROM)</p><p>  ◆片外數(shù)據(jù)存儲器的尋址空間為64KB;(需要擴展RAM)<

31、;/p><p>  ◆128位(16字節(jié))用戶位尋址空間;(在128個字節(jié)中)</p><p>  ◆18個字節(jié)特殊功能寄存器SFR(MCS—52子系列為21個);</p><p>  ◆4個8位的并行I/O接口:P0、P1、P2、P3;</p><p>  ◆2個16位定時器/計數(shù)器T0、T1;(MCS-52子系列為3個,T2)</p&g

32、t;<p>  ◆2個優(yōu)先級別的5個中斷源;(高、低2個)</p><p>  ◆1個全雙工的串行I/O接口,可多機通信;</p><p>  ◆片內(nèi)采用單總線結(jié)構(gòu);</p><p>  ◆有較強的位處理能力;</p><p>  1.4.2 MCS-51系列單片機的基本組成</p><p><b&

33、gt;  圖1-5 管腳圖</b></p><p>  AT89C51與51系列中各種型號芯片的引腳互相兼容。目前多采用40只引腳雙列直插,如圖2-2所示。</p><p>  引腳按其功能可分為如下3類: </p><p>  電源及時鐘引腳——VCC、VSS;XTAL1、XTAL2;</p><p>  控制引腳——、、、和;

34、</p><p>  I/O口引腳——P0、P1、P2、P3,為4個8位I/O口。</p><p>  第二章 設(shè)計內(nèi)容及要求</p><p><b>  2.1 設(shè)計內(nèi)容</b></p><p>  利用SCA100t-D01傾斜角傳感器作為測量元件,設(shè)計一個傾斜姿態(tài)測量儀</p><p>&l

35、t;b>  2.2 設(shè)計要求</b></p><p>  該傾斜姿態(tài)測量儀需具有以下功能:</p><p>  1.測量范圍為-30°~30°。</p><p>  2.精度為0.001°。</p><p><b>  3.誤差為°。</b></p>

36、<p>  4.雙行LCD液晶顯示。</p><p>  5.可以設(shè)置上下報警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時,可以報警。</p><p>  6.具有RS232通信接口。</p><p>  第三章 設(shè)計總體方案及原理框圖</p><p><b>  3.1 原理框圖</b></p><p&

37、gt;  本課題設(shè)計原理框圖如下圖(圖3-1):</p><p><b>  圖3-1原理框圖</b></p><p>  該車體傾斜姿態(tài)測量儀原理框圖主要由傳感器、信號調(diào)理電路、AD轉(zhuǎn)換器、單片機、液晶顯示器、報警電路等組成;通過傳感器感應(yīng)被測物體角度的變化,然后經(jīng)過處理后,由AD轉(zhuǎn)換器將模擬量轉(zhuǎn)換為單片機能處理的數(shù)字量,然后由單片機輸出信號控制顯示、報警等。<

38、;/p><p><b>  3.2 設(shè)計方案</b></p><p><b>  3.2.1方案一</b></p><p><b> ?。?)傳感器選用</b></p><p>  本方案中選用的傳感器是SCA100t-D02,引腳圖見圖3-2, 此芯片能測量的角度范圍為-90&#

39、176;~+90°,數(shù)字靈敏度為819LSB/g,模擬輸出靈敏度為2V/g,可采用模擬輸出或數(shù)字輸出均可,為簡化電路、減少外加AD轉(zhuǎn)換器帶來的花費,最優(yōu)采用數(shù)字輸出的方式。</p><p>  圖3-2 SCA100t-D02引腳圖</p><p> ?。?)液晶顯示器選用</p><p>  本方案中選用的液晶顯示器的型號是1602,引腳圖見圖3-3,L

40、CD1602顯示器有20個引腳,能夠雙行顯示20為字符,本方案的思想是顯示器的兩行分別顯示傳感器的X和Y軸對應(yīng)角度;當(dāng)角度超過20°時,在對應(yīng)角度后面顯示‘DANGER?。?!’字符,警示傾斜角度過大。</p><p>  圖3-3 LCD1602引腳圖</p><p><b>  (3)單片機選用</b></p><p>  單片機選

41、用的是STC89C51系列,具體資料參見1.4節(jié)STC89C51簡介。</p><p><b> ?。?)通信協(xié)議</b></p><p>  本方案中的通信接口采用的是MAX232,引腳圖見圖3-4,通過此通信接口可實現(xiàn)單片機與上位機PC的通信;程序的燒錄也是通過通信接口實現(xiàn)的。</p><p>  圖3-4 MAX232引腳圖</p&

42、gt;<p><b>  (5)報警電路</b></p><p>  根據(jù)設(shè)計要求,即,當(dāng)傾斜角度超過20°時,要報警;本方案中的報警思想是:傾斜角超過20°時,通過I/O口發(fā)出控制信號,控制LED發(fā)光和蜂鳴器發(fā)生模擬報警。如圖3-5,</p><p><b>  圖3-5 報警電路</b></p>

43、<p><b>  3.2.3 方案二</b></p><p>  方案二與方案一的不同之處在于傳感器的選用和報警電路的改進:</p><p><b> ?。?)傳感器的選用</b></p><p>  本方案中選用的傳感器是SCA100t-D01,引腳圖見圖3-6, 此芯片能測量的角度范圍為-30°

44、~+30°,數(shù)字靈敏度為1638LSB/g,模擬輸出靈敏度為4V/g,可采用模擬輸出或數(shù)字輸出均可,為簡化電路、減少外加AD轉(zhuǎn)換器帶來的花費,最優(yōu)采用數(shù)字輸出的方式。</p><p>  圖3-6 SCA100t-D01引腳圖</p><p><b>  (2)報警電路</b></p><p>  在方案一報警電路中,外部會通過接口向

45、單片機內(nèi)部輸入一定量的電流,長時間工作會給單片機帶來危害,因此改為圖3-7的形式,此時外部電路就沒有電流輸入單片機。</p><p><b>  圖3-7 報警電路</b></p><p>  3.2.4 最終方案選擇</p><p>  通過比較兩個方案的優(yōu)缺點,最終選用的是方案二。</p><p><b>

46、  第四章 硬件設(shè)計</b></p><p>  4.1 傳感器硬件電路</p><p>  傳感器與單片機的連接如圖4-1</p><p>  圖4-1 傳感器與單片機連接圖</p><p>  傳感器選用傾斜角傳感器SCA100T-D02,按照圖3-2連接,此時傳感器輸出量為數(shù)字量,數(shù)字輸出到角度轉(zhuǎn)化公式為:α= arcsin

47、[(Dout -Dout@0°)/ Sensitivity]</p><p>  其中Dout為X或Y通道的數(shù)字輸出量,Dout@0°為0°時X或Y通道的數(shù)字輸出量,Sensitivity芯片靈敏度為1638LSB/g。</p><p>  4.2 液晶顯示器硬件電路</p><p>  LCD1602顯示器與單片機的連接如圖4-2&l

48、t;/p><p>  圖4-2 顯示器與單片機連接圖</p><p>  LCD1602液晶模塊內(nèi)部的字符發(fā)生器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號和日文假名等,每一個字符都有一定的代碼,比如大寫字母‘A’的代碼是01000001(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就可以看到‘A’。因此,傳感器測得

49、的傾斜角經(jīng)過單片機軟件處理程序處理后,通過P0口輸出即可顯示。</p><p>  4.3 通信接口硬件電路</p><p>  通信接口與單片機的連接如圖4-3</p><p>  圖4-3 MAX232與單片機連接圖</p><p>  如圖4-3,MAX232的R1OUT、T1IN分別與單片機的RXD、TXD相連,然后MAX232的T1

50、OUT、R1IN分別與PC機的TXD、RXD相連,這樣單片機就可以通過MAX232實現(xiàn)與PC機的數(shù)據(jù)傳輸。</p><p><b>  4.4 報警電路</b></p><p><b>  報警電路如圖4-4</b></p><p><b>  圖4-4 報警電路</b></p><

51、;p><b>  R1、R2的選擇</b></p><p>  當(dāng)通過LED的電流為3~5mA時,LED就可以發(fā)光;忽略LED的內(nèi)阻,分析計算得:R1(R2)=5V/5mA=1000=1K</p><p><b>  蜂鳴器外圍電路設(shè)計</b></p><p>  如圖所示,當(dāng)三極管8550基極電壓為0時,三極管工作

52、,蜂鳴器就可以發(fā) </p><p>  聲,R3、R4均為限流作用,同時也與電容一起起到保護電路的作用。</p><p>  4.5 總硬件原理圖</p><p>  綜合前幾節(jié)的分析可得設(shè)計的總體硬件原理圖,如圖4-5</p><p>  圖4-5 總體硬件原理圖</p><p><b>  第五章 軟件設(shè)

53、計</b></p><p>  5.1 軟件的功能需求</p><p>  因為所采用的傳感器是直接輸出數(shù)字量的,所以程序的編寫就變的簡單了。不需要進行A/D轉(zhuǎn)換了。而且因為傳感器輸出的時間和單片機處理的速度很匹配所以我們也沒有進行中斷處理。采用的是查詢的方式。</p><p>  軟件的功能主要包括:(1)能在LCD上面顯示傳感器傳出的角度。</

54、p><p> ?。?)判斷值是否在報警范圍內(nèi)從而做出不同的判斷。</p><p> ?。?)能進行串口通信。</p><p>  5.2 各部分程序框圖</p><p>  圖5-1 總體軟件原理框圖</p><p>  圖5-2 LCD顯示子程序</p><p>  圖5-3 傾斜角采集框圖<

55、;/p><p>  圖5-4 報警程序框圖</p><p>  圖5-5 通信程序框圖</p><p><b>  第六章 程序編寫</b></p><p>  6.1 程序編寫中遇到的問題及解決辦法</p><p>  程序的編寫中遇到了很多問題,很多問題都能解決。因為我們都有一定的C語言的編程能力

56、,所以語法上面的問題沒有。有的都是邏輯上面的錯誤。第一個遇到的問題就是標(biāo)準(zhǔn)問題,在處理數(shù)據(jù)的時候我們需要用到三角函數(shù),我們剛開始用習(xí)慣上面的表達方式,后來老是出錯。在同學(xué)的幫助下面我們到C51的安裝文件夾下面找到了函數(shù)表達式的標(biāo)準(zhǔn)表達方式,解決了問題。</p><p>  我們遇到的最大的問題就是在編寫通信的時候遇到的問題,在那邊卡了三天。后來在黃老師和唐老師的幫助下我們從邏輯順序入手,本來我們是用一直在發(fā)送,根

57、據(jù)標(biāo)志位的狀態(tài)決定程序的執(zhí)行順序,但是實際使用的時候發(fā)現(xiàn)這樣的話會出現(xiàn)顯示器無法顯示角度的情況,后來從結(jié)構(gòu)上面和邏輯上面考慮發(fā)現(xiàn)我們少了判斷,就是判斷通信的標(biāo)志位的狀態(tài),所以出現(xiàn)了數(shù)據(jù)只在保持通信的情況下面才會讀取,但是在不需要通信的時候就不能正常讀取數(shù)據(jù)。發(fā)現(xiàn)問題以后解決就好辦了,只需要在通信程序前面加一個判斷就可以了,在正常通信的情況下面應(yīng)該怎么辦,在不需要通信的情況下應(yīng)該怎么辦。</p><p>  還有一

58、個問題就是顯示的時候遇到的問題,在顯示數(shù)據(jù)的時候是好的,但是我們有報警功能,在報警的時候屏幕上面會出現(xiàn)“DANGER!”字樣,剛開始的時候字母能出現(xiàn),但是當(dāng)不需要報警的時候字母就不消失了,后來發(fā)現(xiàn)也是判斷上面出了問題,就是我們少了判斷在不需要報警的情況下面應(yīng)該怎么辦的語句,把語句加上以后問題就解決了。</p><p><b>  第七章 結(jié)果調(diào)試</b></p><p&g

59、t;  因為我們硬件上面做的工作比較足,所以硬件上面沒什么大問題,主要的硬件的問題是報警電路那邊的,當(dāng)時從安全角度考慮用了反相器,但是實際使用的時候發(fā)現(xiàn)反相器的輸出電壓很小,不足以帶動LED燈和蜂鳴器。后來直接把反相器去掉了,這樣既簡化了電路還實現(xiàn)了需要的功能。</p><p>  剩下的問題就是軟件上面的問題了,而且軟件上面的問題都是邏輯上面的錯誤。解決這些錯誤的時候我們采用了“排除法”,先是把每個小程序編好,

60、然后進行整合,這樣錯誤容易檢查出來。當(dāng)子程序都整合好以后再出現(xiàn)問題以后我們可以根據(jù)相對應(yīng)的問題很快定位到軟件中那部分的問題,然后采用隔離部分語句的辦法查問題,發(fā)現(xiàn)這樣查問題又快又準(zhǔn)。</p><p><b>  第八章 設(shè)計小結(jié)</b></p><p>  為期三周的課程設(shè)計結(jié)束了,在這次課程設(shè)計中我學(xué)到了很多。</p><p>  設(shè)計一個產(chǎn)

61、品必須按部就班的來,從硬件的設(shè)計、選擇到組合,然后到軟件的編寫和最后的調(diào)試,一部都不可以馬虎。在課程設(shè)計的過程中我們遇到了很多問題就像前面軟件部分所說的那樣,每個人都想一步成功,可惜這個概率很小。在做的過程中我們同樣遇到了很多的問題,有的問題,比如通信的問題,我們還費了大力氣去解決。解決的過程是痛苦的,但是結(jié)果是喜悅的。每次看到問題解決以后我們的心中都很高興,同時在解決問題的過程中我們還學(xué)到了很多。比如對于軟件的編寫采用先部分再整體的辦

62、法會使效率更高些,排除問題的時候用隔離法會跟快些。</p><p>  我們組的課程設(shè)計在我們四個人的努力下面提前兩天完成了,這個與我們每個人都出力是分不開的。</p><p>  在做課程設(shè)計的時候還要感謝兩位老師的幫助,有了他們的幫助我們找問題的時候能更快更準(zhǔn)。</p><p>  當(dāng)然收獲也是很大的,比如在這次課程設(shè)計之前我根本不知道蜂鳴器有有源和無源之分,在

63、這次設(shè)計中我們遇到蜂鳴器的問題,在解決的過程中知道了蜂鳴器還有有源和無源之分。</p><p>  在選擇電阻的問題上面也擺脫了以前靠瞎說,靠老師給數(shù)據(jù)的境況,比如在選擇LED燈的配套電阻上面,我們根據(jù)電源大小和二極管的通過電流算出來電阻應(yīng)該用四百歐姆左右的,我相信以后再遇到這種問題我都能解決了。</p><p><b>  第九章 參考文獻</b></p>

64、;<p>  程德福、林君、智能儀器、2009、機械工業(yè)出版社</p><p>  張毅剛、單片機原理及應(yīng)用、2010、高等教育出版社</p><p><b>  第 三 部 分</b></p><p><b>  附</b></p><p><b>  錄</b>

65、;</p><p><b>  附  錄</b></p><p><b>  附錄一:元器件清單</b></p><p>  STC11F16XE單片機  ?。眰€</p><p>  MAX232串行接口 ?。眰€</p><p>  SCA100t-D01傾斜角

66、傳感器 1個</p><p>  LCD1602液晶顯示器?。眰€</p><p>  蜂鳴器            1個</p><p>  LED發(fā)光二極管        2個</p><p>  三極管8550          1個</p><p>  1K電阻            3個</p&

67、gt;<p>  10K電阻           2個</p><p>  470電阻           1個</p><p>  10K滑動變阻器        1個</p><p>  0.1uF電容          6個</p><p>  30pF電容  2個</p><p>  1

68、0uF電解電容 2個</p><p>  12MHz晶振 1個</p><p><b>  附錄二:完整程序</b></p><p>  #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義</p><p>  #include<i

69、ntrins.h></p><p>  #include<math.h></p><p>  #include<stdio.h></p><p>  #include<absacc.h></p><p>  #include<ctype.h></p><p>  #

70、include<stdlib.h></p><p>  #define RS_CLR RS=0 </p><p>  #define RS_SET RS=1</p><p>  #define RW_CLR RW=0 </p><p>  #define RW_SET RW=1 </p><p>  #de

71、fine EN_CLR EN=0</p><p>  #define EN_SET EN=1</p><p>  #define DataPort P0</p><p>  #define MEAS 0x00 //測量模式</p><p>  #define RWTR 0x08 //讀寫溫度數(shù)據(jù)寄存器</p><p>

72、  #define STX 0x0E //x通道自檢</p><p>  #define STY 0x0F //Y通道自檢</p><p>  #define RDAX 0x10 //讀X通道加速度值</p><p>  #define RDAY 0x11 //讀Y通道加速度值</p><p>  sbit RS = P2^4; //

73、定義端口 </p><p>  sbit RW = P2^5;</p><p>  sbit EN = P2^6;</p><p>  sbit SPK=P2^0;</p><p>  sbit SCK=P1^7; </p><p>  sbit MISO=P1^6;</p><p>  sb

74、it MOSI=P1^5;</p><p>  sbit CSB=P1^4;</p><p>  unsigned char frq; </p><p>  sbit P0_0 = P0^0;</p><p>  sbit P0_1 = P0^1;</p><p>  sbit P0_2 = P0^2;</p&g

75、t;<p>  sbit P0_3 = P0^3;</p><p>  sbit P0_4 = P0^4;</p><p>  sbit P0_5 = P0^5;</p><p>  sbit P0_6 = P0^6;</p><p>  sbit P0_7 = P0^7;</p><p>  sbit

76、P1_0 = P1^0;</p><p>  sbit P1_1 = P1^1;</p><p>  sbit P1_2 = P1^2;</p><p>  sbit P1_3 = P1^3;</p><p>  sbit P1_4 = P1^4;</p><p>  sbit P1_5 = P1^5;</p&g

77、t;<p>  sbit P1_6 = P1^6;</p><p>  sbit P1_7 = P1^7;</p><p>  sbit P2_0 = P2^0;</p><p>  sbit P2_1 = P2^1;</p><p>  sbit P2_2 = P2^2;</p><p>  sbit

78、P2_3 = P2^3;</p><p>  sbit P2_4 = P2^4;</p><p>  sbit P2_5 = P2^5;</p><p>  sbit P2_6 = P2^6;</p><p>  sbit P2_7 = P2^7;</p><p>  sbit P3_0 = P3^0;</p&g

79、t;<p>  sbit P3_1 = P3^1;</p><p>  sbit P3_2 = P3^2;</p><p>  sbit P3_3 = P3^3;</p><p>  sbit P3_4 = P3^4;</p><p>  sbit P3_5 = P3^5;</p><p>  sbit

80、P3_6 = P3^6;</p><p>  sbit P3_7 = P3^7; </p><p>  unsigned int SPI_ReadBits(unsigned char n );</p><p>  void SPI_WriteByte( unsigned char wdata );</p><p>  void SPI_Sta

81、rt(void);</p><p>  void SPI_Stop(void);</p><p>  void SPI_Reset(void);</p><p>  void SPI_Delay(unsigned char);</p><p>  unsigned int SPI_GetX( void );</p><p&

82、gt;  unsigned int SPI_GetY( void );</p><p>  void SPI_Init( void );</p><p>  void SPI_Stop( void )</p><p><b>  {</b></p><p><b>  SCK = 0;</b><

83、;/p><p>  CSB = 1; </p><p>  SPI_Delay(10);</p><p><b>  }</b></p><p>  void SPI_Reset(void)</p><p><b>  {</b></p><p> 

84、 SPI_Stop();</p><p><b>  }</b></p><p>  void SPI_Delay(unsigned char n)</p><p><b>  {</b></p><p>  while(n--);</p><p><b>  }&

85、lt;/b></p><p>  void SPI_Start(void)</p><p><b>  {</b></p><p><b>  SCK = 0;</b></p><p><b>  CSB = 0;</b></p><p>  SP

86、I_Delay(10);</p><p><b>  }</b></p><p>  //主機寫一個BYTE到器件</p><p>  //最終狀態(tài):CLK = LOW</p><p>  void SPI_WriteByte( unsigned char wdata )</p><p><

87、b>  {</b></p><p>  unsigned char i;</p><p>  for( i = 0 ; i < 8 ; ++i )</p><p><b>  {</b></p><p><b>  SCK = 0;</b></p><p&

88、gt;  SPI_Delay(10);</p><p>  MOSI = wdata & 0x80;</p><p>  wdata = wdata << 1;</p><p>  SPI_Delay(10);</p><p><b>  SCK = 1;</b></p><p&g

89、t;  SPI_Delay(10);</p><p><b>  }</b></p><p><b>  SCK = 0;</b></p><p><b>  }</b></p><p>  //主機讀入N個比特</p><p>  //n 限制為16及

90、其以下</p><p>  //結(jié)束狀態(tài) CLK = 0</p><p>  unsigned int SPI_ReadBits( unsigned char n )</p><p><b>  {</b></p><p>  unsigned int rtemp,i;</p><p><b

91、>  MISO = 1;</b></p><p>  for( i = 0 ; i < n ; ++i )</p><p><b>  {</b></p><p>  rtemp <<= 1 ;</p><p>  SPI_Delay(10);</p><p&

92、gt;  if( MISO == 1 ){</p><p>  rtemp |= 0x0001;</p><p><b>  }else{</b></p><p>  rtemp &= 0xFFFE;</p><p><b>  }</b></p><p><b

93、>  SCK = 1;</b></p><p>  SPI_Delay(10);</p><p><b>  SCK = 0;</b></p><p>  SPI_Delay(10);</p><p><b>  }</b></p><p>  return

94、 rtemp;</p><p><b>  }</b></p><p><b>  //讀X方向角度</b></p><p>  unsigned int SPI_GetX( void )</p><p><b>  {</b></p><p>  un

95、signed int result;</p><p>  SPI_Start();</p><p>  SPI_WriteByte( RDAX );</p><p>  result = SPI_ReadBits(11);</p><p>  SPI_Stop();</p><p>  return result;&l

96、t;/p><p><b>  }</b></p><p><b>  //讀Y方向角度</b></p><p>  unsigned int SPI_GetY( void )</p><p><b>  {</b></p><p>  unsigned in

97、t result;</p><p>  SPI_Start();</p><p>  SPI_WriteByte( RDAY );</p><p>  result = SPI_ReadBits(11);</p><p>  SPI_Stop();</p><p>  return result;</p>

98、<p><b>  }</b></p><p><b>  //SPI測量模式</b></p><p>  void SPI_Init( void )</p><p><b>  {</b></p><p>  SPI_Start();</p><

99、;p>  SPI_WriteByte( MEAS );</p><p>  SPI_Stop();</p><p><b>  }</b></p><p>  unsigned char code C[]={'0','1','2','3','4','5

100、','6','7','8','9'};</p><p>  /*------------------------------------------------</p><p>  uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值</p><p>  unsigned cha

101、r 是定義無符號字符變量,其值的范圍是</p><p>  0~255 這里使用晶振12M,精確延時請使用匯編,大致延時</p><p>  長度如下 T=tx2+5 uS </p><p>  ------------------------------------------------*/</p><p>  void DelayUs2

102、x(unsigned char t)</p><p><b>  { </b></p><p>  while(--t);</p><p><b>  }</b></p><p>  /*------------------------------------------------</p

103、><p>  mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值</p><p>  unsigned char 是定義無符號字符變量,其值的范圍是</p><p>  0~255 這里使用晶振12M,精確延時請使用匯編</p><p>  --------------------------------------------

104、----*/</p><p>  void DelayMs(unsigned char t)</p><p><b>  {</b></p><p>  while(t--)</p><p><b>  {</b></p><p><b>  //大致延時1mS&l

105、t;/b></p><p>  DelayUs2x(245);</p><p>  DelayUs2x(245);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*-------------------------

106、-----------------------</p><p><b>  判忙函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  bit LCD_Check_Busy(void) </p><p><b>

107、  { </b></p><p>  DataPort= 0xFF; </p><p><b>  RS_CLR; </b></p><p><b>  RW_SET; </b></p><p><b>  EN_CLR; </b></p><p

108、><b>  _nop_(); </b></p><p><b>  EN_SET;</b></p><p>  return (bit)(DataPort & 0x80);</p><p><b>  }</b></p><p>  /*------------

109、------------------------------------</p><p><b>  寫入命令函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_Com(unsigned char com) &l

110、t;/p><p><b>  { </b></p><p>  while(LCD_Check_Busy()); //忙則等待</p><p><b>  RS_CLR; </b></p><p><b>  RW_CLR; </b></p><p>&l

111、t;b>  EN_SET; </b></p><p>  DataPort= com; </p><p><b>  _nop_(); </b></p><p><b>  EN_CLR;</b></p><p><b>  }</b></p>

112、<p>  /*------------------------------------------------</p><p><b>  寫入數(shù)據(jù)函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_

113、Data(unsigned char Data) </p><p><b>  { </b></p><p>  while(LCD_Check_Busy()); //忙則等待</p><p><b>  RS_SET; </b></p><p><b>  RW_CLR; </b&

114、gt;</p><p><b>  EN_SET; </b></p><p>  DataPort= Data; </p><p><b>  _nop_();</b></p><p><b>  EN_CLR;</b></p><p><b>

115、;  }</b></p><p>  /*------------------------------------------------</p><p><b>  清屏函數(shù)</b></p><p>  ------------------------------------------------*/</p>&l

116、t;p>  void LCD_Clear(void) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x01); </p><p>  DelayMs(5);</p><p><b>  }</b></p><p>  /*

117、------------------------------------------------</p><p><b>  寫入字符串函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_String(unsig

118、ned char x,unsigned char y,unsigned char *s) </p><p><b>  { </b></p><p>  if (y == 0) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x80 +

119、x); //表示第一行</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><p>  LCD_Write_Com(0xC0 + x); //表示第二行</p

120、><p><b>  } </b></p><p>  while (*s) </p><p><b>  { </b></p><p>  LCD_Write_Data( *s); </p><p>  s ++; </p>

121、<p><b>  }</b></p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  寫入字符函數(shù)</b></p><p>  --

122、----------------------------------------------*/</p><p>  void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) </p><p><b>  { </b></p><p>  if (y

123、== 0) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x80 + x); </p><p><b>  } </b></p><p><b>  else </b></p><p>

124、;<b>  { </b></p><p>  LCD_Write_Com(0xC0 + x); </p><p><b>  } </b></p><p>  LCD_Write_Data( Data); </p><p><b>  }</b>

125、</p><p>  /*------------------------------------------------</p><p><b>  角度轉(zhuǎn)化函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  flo

126、at angle_transfer( double result)</p><p>  { double angle,f;</p><p>  f=asin((result-1024)/1638);</p><p>  angle=f*180/3.14;</p><p>  return(angle);</p><p>

127、;<b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  初始化函數(shù)</b></p><p>  ------------------------------------------------*/<

128、/p><p>  void LCD_Init(void) </p><p><b>  {</b></p><p>  LCD_Write_Com(0x38); /*顯示模式設(shè)置*/ </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); &

129、lt;/p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); </p><p>  LCD_Write_Com(0x08); /*顯示關(guān)閉*/ </p

130、><p>  LCD_Write_Com(0x01); /*顯示清屏*/ </p><p>  LCD_Write_Com(0x06); /*顯示光標(biāo)移動設(shè)置*/ </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/</p><

131、p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  LCD顯示函數(shù)</b></p><p>  ------------------------------------------------

132、*/ </p><p>  void LCD_Display(unsigned int i,double angle)</p><p>  { int m,n,c,d,e,an;</p><p>  an=(int)(angle*1000);</p><p><b>  m=an%10;</b></p>&

133、lt;p>  LCD_Write_Char(8,i,C[m]);</p><p>  DelayMs(245); </p><p>  DelayMs(245);</p><p><b>  an=an/10;</b></p><p><b>  n=an%10;</b></p>

溫馨提示

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

評論

0/150

提交評論