版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2015-2016學(xué)年第一學(xué)期微機(jī)原理(單片機(jī))課程設(shè)計(jì)總結(jié)報(bào)告項(xiàng)目名稱:超聲波電子琴 班級(jí):姓名:學(xué)號(hào): 微機(jī)原理(單片機(jī))課程設(shè)計(jì)任務(wù)書(shū)項(xiàng)目名稱:26號(hào) 超聲波電子琴內(nèi)容與要求:上位機(jī):完成界面設(shè)計(jì)與通訊程序(1)能夠顯示測(cè)得長(zhǎng)度值。(2)能夠接受下位機(jī)的曲子并保存至文檔。(3)能夠發(fā)送命令啟動(dòng)或暫停設(shè)備。(4)可以對(duì)串口進(jìn)行設(shè)置。下位機(jī):完成電路設(shè)計(jì)與控制程序(1)采用超聲波測(cè)距,不同的距離對(duì)應(yīng)不同的音階,由蜂鳴發(fā)聲。(2)通過(guò)串口與上位機(jī)通訊。(3)能夠演奏一首曲子并上傳至上位機(jī)。(4)將當(dāng)前測(cè)得長(zhǎng)度值、音階顯示在LCD屏上。項(xiàng)目組任務(wù)分擔(dān)評(píng)價(jià)表姓名分擔(dān)任務(wù)組內(nèi)評(píng)價(jià)王陸童下位機(jī)全部程序
2、的編寫(xiě)與調(diào)試,整體程序的運(yùn)行與改進(jìn),實(shí)驗(yàn)記錄單的填寫(xiě)4鄧青宇上位機(jī)軟件編寫(xiě)4段利波系統(tǒng)調(diào)試和檢測(cè)2課程設(shè)計(jì)報(bào)告評(píng)分表內(nèi)容總體方案硬件設(shè)計(jì)軟件設(shè)計(jì)結(jié)果分析明細(xì)清單問(wèn)題分析心得體會(huì)參考文獻(xiàn)程序代碼格式規(guī)范總分王陸童得分鄧青宇得分 段利波得分目錄一總體方案1二、硬件設(shè)計(jì)22.1 STC89C52RC單片機(jī)22.1.1 概述22.1.2 電氣特性22.1.3 封裝形式32.1.4 最小系統(tǒng)52.1.5 芯片優(yōu)點(diǎn)52.2 LCD 1602液晶顯示屏52.2.1 概述52.2.2 電氣特性62.2.3 器件優(yōu)點(diǎn)62.2.4 接線及原理圖62.3 HC-SR04 超聲波探頭72.3.1 概述72.3.2 電
3、氣特性72.3.3 器件優(yōu)點(diǎn)82.3.4 連線及原理圖82.4 喇叭82.5 系統(tǒng)原理圖9三、軟件設(shè)計(jì)103.1、下位機(jī)程序設(shè)計(jì)103.1.1 需求分析103.1.2 程序原理103.2 上位機(jī)程序設(shè)計(jì)11四、結(jié)果分析或項(xiàng)目所實(shí)現(xiàn)的功能、指標(biāo)124.1下位機(jī)部分124.2上位機(jī)部分13五、明細(xì)清單13六、設(shè)計(jì)調(diào)試中遇到的疑難問(wèn)題及解決辦法14七、心得體會(huì)與建議14參考文獻(xiàn)16附錄16源代碼16下位機(jī)程序16上位機(jī)程序26一總體方案超聲波電子琴總體結(jié)構(gòu)圖如下圖所示:LCD顯示模塊保存文本控制器(單片機(jī))上位機(jī)顯示測(cè)試值超聲波測(cè)距模塊蜂鳴器鳴叫模塊 圖1-1 系統(tǒng)整體結(jié)構(gòu)圖圖中,單片機(jī)控制器模塊采
4、用的是STC89C52RC型號(hào)的單片機(jī),按照最小系統(tǒng)搭建;超聲波測(cè)距模塊選用HC-SR04型號(hào)的超聲波探頭,其可以自主進(jìn)行測(cè)距,并且將測(cè)距的結(jié)果回傳到單片機(jī)當(dāng)中進(jìn)行保存,具有實(shí)時(shí)性,下一次的數(shù)據(jù)回傳會(huì)將前一次的數(shù)據(jù)替代;LCD顯示模塊采用1602型號(hào)的LCD顯示屏,是一個(gè)2X16的規(guī)格,其中第一行用來(lái)顯示當(dāng)前音階,第二行用來(lái)顯示測(cè)得距離;蜂鳴器通過(guò)一個(gè)PNP型三極管被單片機(jī)控制,單片機(jī)根據(jù)距離轉(zhuǎn)換成對(duì)應(yīng)的音階以及頻率,該頻率被送入蜂鳴器發(fā)聲;上位機(jī)控制單片機(jī)的啟動(dòng)和停止,內(nèi)部自行編寫(xiě)程序?qū)崿F(xiàn),并且可以將單片機(jī)送回的數(shù)據(jù)顯示在屏幕上和保存文本。二、硬件設(shè)計(jì)2.1 STC89C52RC單片機(jī)2.1
5、.1 概述STC89C52RC是一款低功耗、高性能的CMOS8位微控制器,內(nèi)部集成8KB可編程Flash儲(chǔ)存器。STC89C52RC因?yàn)楦叨鹊撵`活性和功耗效率解決方式而被廣泛的應(yīng)用在眾多的嵌入式控制系統(tǒng)中。STC89C52RC 擁有8KB的Flash,256B的隨機(jī)讀寫(xiě)存儲(chǔ)器,32個(gè)IO引腳,看門(mén)狗定時(shí)器,兩個(gè)數(shù)據(jù)指針,三個(gè)16為的定時(shí)器/計(jì)數(shù)器,6向量通道兩個(gè)中斷優(yōu)先級(jí)的中斷系統(tǒng)架構(gòu),一個(gè)全雙工通信接口,片內(nèi)晶振和時(shí)鐘監(jiān)測(cè)。2.1.2 電氣特性向下兼容MCS-51產(chǎn)品;8KB在系統(tǒng)編程Flash儲(chǔ)存器,耐受值為1000次擦寫(xiě);供電電壓為4.0V到5.5V;時(shí)鐘頻率:0 Hz- 33Mhz;三
6、級(jí)可編程儲(chǔ)存器鎖定;256B內(nèi)部隨機(jī)存儲(chǔ)器;32個(gè)可編程IO口;3個(gè)16為定時(shí)器/計(jì)數(shù)器;8個(gè)中斷源;全雙工Uart通信接口;以及低功耗空閑模式和掉電模式、支持掉電中斷喚醒功能、看門(mén)狗定時(shí)器、雙數(shù)據(jù)指針、電源關(guān)閉標(biāo)志。2.1.3 封裝形式封裝形式包括PDIP、PLCC、TQFP圖2-1 PDIP封裝形圖2-2 PLCC封裝形式圖2-3 TQFP封裝形式2.1.4 最小系統(tǒng)圖2-4 STC89C52最小系統(tǒng)原理圖2.1.5 芯片優(yōu)點(diǎn)STC89C52芯片同屬8051架構(gòu),也是應(yīng)用最為廣泛的一類微控制器,市場(chǎng)價(jià)格為5元一片。STC89C52芯片具有完整的系統(tǒng)的功能能夠滿足基本的嵌入式系統(tǒng)控制器要求。
7、具有較高的性價(jià)比同時(shí)也是一款輕松上手容易學(xué)習(xí)的芯片。對(duì)于課程設(shè)計(jì)中要求的任務(wù)使用STC89C52芯片能夠完全滿足。2.2 LCD 1602液晶顯示屏2.2.1 概述1602液晶也叫1602字符型液晶,它是一種專門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。市面上字符液晶大多
8、數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫(xiě)的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。2.2.2 電氣特性1602采用標(biāo)準(zhǔn)的16腳接口,8位雙向數(shù)據(jù)端;3.3V或5V工作電壓,對(duì)比度可調(diào),內(nèi)含復(fù)位電路;提供如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能;有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM;內(nèi)建有192個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM;8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM;2.2.3 器件優(yōu)點(diǎn)1602液晶屏市場(chǎng)價(jià)格4元左右,具有較高的性價(jià)比,具有完整的
9、控制指令集,易于與微控制器連接;供電3.3V或5V能夠使用較寬范圍的為控制類型。是學(xué)習(xí)和實(shí)驗(yàn)中一款非常有用的顯示產(chǎn)品。2.2.4 接線及原理圖將RS引腳接到P1.0引腳,RW引腳接到P1.1引腳,E引腳接到P1.2引腳,VCC、GND正確接線,D0D7對(duì)應(yīng)接入P0.0-P0.7.BLA接高電平,BLK接低電平。原理圖如圖2-5所示。圖2-5 LCD1602與MCU連接原理圖2.3 HC-SR04 超聲波探頭2.3.1 概述超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為
10、340m/s,根據(jù)計(jì)時(shí)器記錄的時(shí)間 t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),即: s=340t/2 。2.3.2 電氣特性模塊含4個(gè)引腳,引腳 1: VCC;引腳 2: Trig(控制端);引腳 3: Echo(接收端);引腳 4: GND。本模塊使用方法:控制端發(fā)一個(gè) 10us 以上的高電平, 就可以在接收端等待高電平輸出,一旦有輸出就可以開(kāi)定時(shí)器計(jì)時(shí), 當(dāng)此口變?yōu)榈碗娖綍r(shí)就可以讀定時(shí)器的值, 此時(shí)就為此次測(cè)距的時(shí)間,即可算出距離。2.3.3 器件優(yōu)點(diǎn)HC-SR04 超聲波探頭具有性價(jià)比高,功能特性好的優(yōu)點(diǎn),測(cè)量距離。2.3.4 連線及原理圖超聲波模塊有4個(gè)引腳,VCC引腳接+5V,GN
11、D引腳接地。其中Trig引腳和Echo引腳接任何兩個(gè)未使用的MCU引腳即可。實(shí)驗(yàn)中Trig接P2.7,Echo接P2.6。原理圖如圖3-4所示。圖2-6 超聲波模塊與MCU連接原理圖2.4 喇叭MCU通過(guò)一個(gè)PNP型三極管控制喇叭電源的通斷,三極管基極接單片機(jī)普通IO口,通過(guò)控制單片機(jī)引腳的高低電平狀態(tài)即可實(shí)現(xiàn)對(duì)喇叭的控制。而喇叭發(fā)出不同的音階則是通過(guò)對(duì)定時(shí)器裝載不同的值產(chǎn)生不同占空比的波形也就是控制高電平的時(shí)間實(shí)現(xiàn)對(duì)音階的控制。喇叭的原理圖如圖2-7所示。圖2-7 喇叭與MCU連接原理圖2.5 系統(tǒng)原理圖圖2-8 系統(tǒng)原理圖三、軟件設(shè)計(jì)3.1、下位機(jī)程序設(shè)計(jì)3.1.1 需求分析本課程設(shè)計(jì)下位
12、機(jī)程序使用C語(yǔ)言編寫(xiě),根據(jù)任務(wù)書(shū)要求,下位機(jī)應(yīng)該實(shí)現(xiàn)以下需求:(a)能夠產(chǎn)生占空比固定,頻率可變的方波用于激勵(lì)蜂鳴器產(chǎn)生音調(diào)不同的聲音;(b)需要實(shí)現(xiàn)對(duì)超聲波測(cè)距模塊的控制,通過(guò)超聲波模塊得出距離;(c)需要實(shí)現(xiàn)對(duì)顯示屏的通信,在顯示屏上顯示當(dāng)前測(cè)得距離與音調(diào);(d)能夠通過(guò)串口與上位機(jī)進(jìn)行通信,實(shí)現(xiàn)在上位機(jī)的控制下啟停。3.1.2 程序原理對(duì)于需求(a),我們采用了80C52中的Timer 1,利用方式1的定時(shí)中斷功能,在每次產(chǎn)生定時(shí)中斷時(shí),自動(dòng)重裝初值,以及反轉(zhuǎn)輸出電平。在這里,方式2自動(dòng)重裝的計(jì)數(shù)值只有8位,太短不適用。查閱標(biāo)準(zhǔn)音階頻率表,確定各個(gè)音階所需要的初值即可。對(duì)于需求(b),根
13、據(jù)超聲波模塊所需要的時(shí)序,在發(fā)出啟動(dòng)信號(hào)后等待Echo信號(hào)返回測(cè)距開(kāi)始信號(hào),之后利用Timer 0,計(jì)數(shù)出聲波傳播所需要的時(shí)鐘周期數(shù),利用聲速公式計(jì)算即可。對(duì)于需求(c),查閱顯示屏的控制方法,可以發(fā)現(xiàn)顯示屏的通信方式類似并口通信。利用P0,可以很方便的實(shí)現(xiàn)控制。對(duì)于需求(d),80C52集成了串口通信模塊。這里我們定義上位機(jī)與下位機(jī)之間的通信協(xié)議為:波特率9600bps,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。將上述原理進(jìn)行整合,最終得到流程圖,如圖3-1。圖3-1 下位機(jī)程序框圖3.2 上位機(jī)程序設(shè)計(jì)本課程設(shè)計(jì)上位機(jī)程序使用了Microsoft從.NET Framework 3.0開(kāi)始引進(jìn)的W
14、indows Presentation Foundation(WPF)用戶界面框架。它提供了統(tǒng)一的編程模型,語(yǔ)言與框架。后臺(tái)使用C#編程語(yǔ)言,前臺(tái)使用XAML標(biāo)記語(yǔ)言,有效地分離了開(kāi)發(fā)人員與UI設(shè)計(jì)人員的工作。圖3-2 上位機(jī)程序界面上位機(jī)程序利用了.NET Framework類庫(kù)中的System.IO.Ports中的SerialPort類。在程序中創(chuàng)建一個(gè)該類的實(shí)例,通過(guò)UI交互設(shè)定好這個(gè)實(shí)例。調(diào)用在類中封裝好的方法就可以方便地進(jìn)行串口接收數(shù)據(jù),發(fā)送數(shù)據(jù)。C#提供的事件響應(yīng)機(jī)制,可以使上位機(jī)程序自行對(duì)串口接收到的數(shù)據(jù)進(jìn)行處理,上位機(jī)程序界面如圖3-2所示。在上位機(jī)程序中,我們實(shí)現(xiàn)了對(duì)串口傳輸
15、的參數(shù)的設(shè)置,可以統(tǒng)計(jì)從串口打開(kāi)以來(lái)接收到的數(shù)據(jù)幀數(shù),以及以十六進(jìn)制的表示方式顯示上次傳輸接收到的數(shù)據(jù)。當(dāng)在開(kāi)啟端口之后,點(diǎn)擊“開(kāi)始監(jiān)測(cè)”,就可以開(kāi)始監(jiān)測(cè)下位機(jī)傳回來(lái)的數(shù)據(jù)。為了方便起見(jiàn),這個(gè)按鈕也集成了通過(guò)串口通知下位機(jī)開(kāi)始測(cè)距的功能。在監(jiān)測(cè)狀態(tài),我們可以使用錄制功能,錄制功能在串口每收到一幀數(shù)據(jù)的時(shí)候,記錄當(dāng)前的音階數(shù),并在停止錄制的時(shí)候,將內(nèi)存中記錄的數(shù)據(jù)寫(xiě)入到硬盤(pán)中的文本文檔中。四、結(jié)果分析或項(xiàng)目所實(shí)現(xiàn)的功能、指標(biāo)4.1下位機(jī)部分根據(jù)課程任務(wù)書(shū)的要求,我們?cè)O(shè)計(jì)完成的下位機(jī)可以正常的進(jìn)行測(cè)試距離并且將其值和對(duì)應(yīng)的音階值通過(guò)LCD顯示屏體現(xiàn)出來(lái);蜂鳴器可以根據(jù)不同的距離值對(duì)應(yīng)的音階進(jìn)行鳴叫
16、;并且可以通過(guò)串口和上位機(jī)進(jìn)行通訊,由上位機(jī)控制其啟動(dòng)或者停止。圖4-1 下位機(jī)最終結(jié)果圖4.2上位機(jī)部分根據(jù)課程任務(wù)書(shū)的要求,我們?cè)O(shè)計(jì)完成的上位機(jī)可以通過(guò)發(fā)送啟動(dòng)或者停止信號(hào)控制單片機(jī);可以將單片機(jī)回傳的距離值顯示在屏幕上,由于串口的通訊設(shè)置,完成一次的傳送會(huì)有1.5秒左右的延時(shí);可以將演奏的曲子以音階回傳的順序進(jìn)行排列并且記錄下來(lái),為txt文件。圖4-2 上位機(jī)最終結(jié)果圖五、明細(xì)清單表5-1 各種器件清單器件名稱數(shù)量?jī)r(jià)格STC89C52RC 單片機(jī)1個(gè)5元LCD 1602 液晶顯示屏1個(gè)5元HC-SR04 超聲波探頭1個(gè)4元蜂鳴器1個(gè)9元總計(jì)23元六、設(shè)計(jì)調(diào)試中遇到的疑難問(wèn)題及解決辦法王陸
17、童:1、問(wèn)題:第一次整體檢驗(yàn)的時(shí)候,超聲波測(cè)距器無(wú)法正確的進(jìn)行工作。解決辦法:檢查線路問(wèn)題,發(fā)現(xiàn)超聲波測(cè)距器的Trig和Echo端接線錯(cuò)誤,認(rèn)真查閱硬件原理圖后修改了接線,再次上電工作正常。2、問(wèn)題:第一次整體檢驗(yàn)的時(shí)候發(fā)現(xiàn)在LCD顯示屏上距離值顯示的格式不對(duì),覆蓋了前面的注釋以及后面的單位。解決辦法:通過(guò)修改下位機(jī)的程序,調(diào)整字符出現(xiàn)的位置使問(wèn)題得到了合理的解決。3、問(wèn)題:下位機(jī)向上位機(jī)傳輸?shù)臄?shù)據(jù)(距離值)無(wú)法正確的在上位機(jī)中體現(xiàn)出來(lái)。解決辦法:反復(fù)檢查下位機(jī)和上位機(jī)編寫(xiě)的程序,發(fā)現(xiàn)下位機(jī)向上位機(jī)傳送數(shù)據(jù)的格式和上位機(jī)接收數(shù)據(jù)的格式不相符合,修改接收格式后問(wèn)題得到解決。鄧青宇:1、對(duì)WPF應(yīng)
18、用程序的設(shè)計(jì)不熟,經(jīng)驗(yàn)不足。在MSDN查閱例程之后,仿寫(xiě)代碼寫(xiě)成了上位機(jī)。七、心得體會(huì)與建議王陸童:這次的單片機(jī)課程設(shè)計(jì)在四個(gè)課程設(shè)計(jì)當(dāng)中難度應(yīng)該是相當(dāng)大的,不同于大三上學(xué)期微機(jī)原理最后的綜合實(shí)驗(yàn),考察了我們匯編當(dāng)中定時(shí)器、中斷、串口、并口的用法,這次的實(shí)驗(yàn)更加綜合,考察了我們微機(jī)原理+計(jì)算機(jī)控制理論并且融合了我們大學(xué)所學(xué)習(xí)的編程思想,在設(shè)計(jì)側(cè)面難度很大,但同時(shí)也非常人性化,沒(méi)有限定我們必須使用匯編語(yǔ)言,我們可以選擇自己擅長(zhǎng)的機(jī)器語(yǔ)言進(jìn)行編寫(xiě)。我負(fù)責(zé)下位機(jī)程序的編寫(xiě),我使用的是C語(yǔ)言,因?yàn)橄鄬?duì)匯編來(lái)說(shuō),C語(yǔ)言我更加了解,但是由于長(zhǎng)時(shí)間不怎么使用,上手的時(shí)候不太熟練,經(jīng)過(guò)了一上午的摸索,漸漸找回
19、了當(dāng)時(shí)的感覺(jué),于是全力地投入到程序的編寫(xiě)當(dāng)中。在編寫(xiě)之前,會(huì)制定出一份流程圖,即主程序的編寫(xiě)規(guī)則,在編寫(xiě)完主程序后,分別編寫(xiě)主程序當(dāng)中引用的各個(gè)子程序,其中對(duì)于如何將距離值換算成頻率值這個(gè)子程序我比較頭疼,沒(méi)有什么思緒,和同學(xué)探討無(wú)果之后我們嘗試在網(wǎng)上查閱資料,經(jīng)過(guò)不斷的比對(duì)和理論分析,最終修改完成了這個(gè)子程序,第一次全部編寫(xiě)完感覺(jué)還是比較順利,但是在編譯的時(shí)候遇到了不少的問(wèn)題,其中有語(yǔ)法錯(cuò)誤,也有引入函數(shù)格式不對(duì)這樣的問(wèn)題,經(jīng)過(guò)和組里同學(xué)的討論,逐一的修改程序,最終得到了比較完美的解決。我想小組完成任務(wù)的目的就是在這個(gè)過(guò)程當(dāng)中不斷地互相交流不斷地互相提高,使效率最大化。感謝這次的課程設(shè)計(jì),不
20、僅再一次加深了我對(duì)單片機(jī)的理論學(xué)習(xí),更加強(qiáng)調(diào)的是在實(shí)際操作中如何解決遇到的問(wèn)題以及如何避免再次遇到這些問(wèn)題,理論結(jié)合實(shí)際,再次給我們敲響警鐘,不能一味的追求理論,因?yàn)楹芏鄷r(shí)候僅僅使用理論是無(wú)法做出真正的實(shí)物成果的,必須經(jīng)過(guò)實(shí)踐的磨練,最終才可以成功完成任務(wù)。另外我想感謝我的兩名隊(duì)友,感謝他們?cè)谖矣龅嚼щy時(shí)的不懈幫助,我想正是由于我們的共同努力才可以這么順利的完成任務(wù),使我們小組成為了前幾名完成的小組之一,我收獲的不僅是學(xué)習(xí)側(cè)面上的,更是我們?cè)谝黄鸱治鲈O(shè)計(jì)題目、互相解決各自問(wèn)題、共同調(diào)試程序的這個(gè)過(guò)程,意義非常深遠(yuǎn)。鄧青宇:這次課程設(shè)計(jì),我嘗試使用了課外所學(xué)到的技術(shù)來(lái)編寫(xiě)上位機(jī)程序。隨著時(shí)代的發(fā)
21、展,計(jì)算機(jī)領(lǐng)域已經(jīng)發(fā)生了極大的變化。許多新概念出現(xiàn)了,新技術(shù)也層出不窮。這些新技術(shù)極大地提高了開(kāi)發(fā)人員的工作效率。然而,新技術(shù)同時(shí)也是在不斷變化。因此,不斷學(xué)習(xí)新技術(shù)是作為一名開(kāi)發(fā)人員的基本要求。在這次的課程設(shè)計(jì)中,我使用到了WPF應(yīng)用程序設(shè)計(jì)。這是一個(gè)非常實(shí)用的,在Win平臺(tái)上現(xiàn)在日趨流行的一個(gè)GUI設(shè)計(jì)框架。在工業(yè)控制領(lǐng)域也用得比較多。但是限于知識(shí)水平與時(shí)間,上位機(jī)程序仍然有著相當(dāng)多的缺陷。首先,我并沒(méi)有針對(duì)每一條路徑進(jìn)行測(cè)試,也沒(méi)有進(jìn)行異常處理,使得上位機(jī)程序比較難用,時(shí)常出現(xiàn)崩潰的情況。另外,由于我現(xiàn)在并沒(méi)有深入了解C#中的事件機(jī)制,導(dǎo)致串口接收事件可能會(huì)丟失掉,導(dǎo)致顯示延時(shí)等。這些都
22、是可以改進(jìn)的地方。通過(guò)這次課程設(shè)計(jì),我得到了在程序設(shè)計(jì)上的很多教訓(xùn)。這些都是非常有意義的。段利波:我們的專業(yè)有三個(gè)發(fā)展方向,第一個(gè)是工業(yè)過(guò)程控制方向,第二個(gè)是電氣工程方向,第三個(gè)是嵌入式系統(tǒng)方向。無(wú)論哪個(gè)方向?yàn)榭刂破鞫紩?huì)使用到,我們不但不能好高騖遠(yuǎn)反而應(yīng)該腳踏實(shí)地的從最基本的做起。8051微控制器是絕對(duì)的經(jīng)典,迄今為止仍然占據(jù)著較大的市場(chǎng),于此同時(shí)8051架構(gòu)特別是51單片機(jī)能夠輕松的上手學(xué)習(xí)。從學(xué)習(xí)的過(guò)程中培養(yǎng)起我們的工程意識(shí)和實(shí)踐經(jīng)驗(yàn)。這對(duì)于以后學(xué)習(xí)其他類型的微控制器都能起到很好的作用。課程設(shè)計(jì)是我們將理論知識(shí)付諸實(shí)踐的方法之一,也是我們大多數(shù)人實(shí)踐的機(jī)會(huì)。同樣也是對(duì)我們自己的一個(gè)考驗(yàn)。學(xué)
23、習(xí)的東西唯有運(yùn)用起來(lái)才能成為自己的技能最終也才能將其轉(zhuǎn)換為生產(chǎn)力。最后感謝老師的辛苦指導(dǎo)、感謝隊(duì)友的理解和團(tuán)結(jié)合作使得我們的任務(wù)圓滿的完成。參考文獻(xiàn)1Karli Watson, Christian Negel. Beginning Visual C# 2012M.Hoboken:Wrox Press,2012附錄源代碼下位機(jī)程序#include"reg52.h"#include"intrins.h" #define uchar unsigned char /無(wú)符號(hào)8位#define
24、;uint unsigned int /無(wú)符號(hào)16位#define ulong unsigned long /無(wú)符號(hào)32位 #define FOSC 12000000#define T0FENPING 12 uchar run = 0;/- sbit SPK = P1
25、60;5;bit RunFlag = 0; sbit Trig = P2 7;sbit Echo = P2 6;sbit LCD_RS = P1 0; /寄存器選擇位,將RS位定義為P1.0引腳 sbit LCD_RW = P1 1; /讀寫(xiě)選擇位,將RW位定義為P1.1引腳 sbit LCD
26、_E = P1 2; /使能信號(hào)位,將E位定義為P1.2引腳#define LCD_Data P0 #define Busy 0x80 /用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí)uint code JINJIEFREQ = 523,587,659,699,784,880,988;unsigned char STH0, STL0;unsigned
27、char code Music = "tone " unsigned char code Distance = "Range" unsigned char code NUMBER15 = '0','1','2','3','4','5','6'
28、,'7','8','9','.','-','M' static unsigned char DisNum = 0; /顯示用指針 uint time = 0;unsigned long S = 0;bit flag = 0;uc
29、har disbuff3 = 0,0,0;/*5ms延時(shí)*/void delay5Ms(void) uint TempCyc = 5552; while (TempCyc-);/*400ms延時(shí)*/void delay400Ms(void) uchar TempCycA = 5; u
30、int TempCycB; while (TempCycA-) TempCycB = 7269; while (TempCycB-); /*延遲*/void delayms(uint ms)
31、 unsigned char i = 100, j; for (;ms;ms-) while (-i) &
32、#160; j = 10; while (-j); /*讀狀態(tài)*/uchar readStatusLCD(void) LCD_Data = 0xFF; &
33、#160;LCD_RS = 0; LCD_RW = 1; LCD_E = 0; LCD_E = 0; LCD_E = 1; while (LCD_Data & Busy); /檢測(cè)忙信號(hào)
34、; return(LCD_Data);/*寫(xiě)數(shù)據(jù)*/void writeDataLCD(uchar WDLCD) readStatusLCD(); /檢測(cè)忙 LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E =
35、160;0; /若晶振速度太高可以在這后加小的延時(shí) LCD_E = 0; /延時(shí) LCD_E = 1;/*寫(xiě)指令*/void writeCommandLCD(unsigned char WCLCD, BuysC) /BuysC為0時(shí)忽略忙檢測(cè) if (BuysC) &
36、#160; readStatusLCD(); /根據(jù)需要檢測(cè)忙 LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 0; LCD_E = 0; LCD_E
37、 = 1;/*初始化*/void LCDInit(void) /LCD初始化 writeCommandLCD(0x38, 0); /顯示模式設(shè)置,不檢測(cè)忙信號(hào) delay5Ms(); writeCommandLCD(0x38, 1); /顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào) writeCommandLCD(0x08, 1
38、); /關(guān)閉顯示 writeCommandLCD(0x01, 1); /顯示清屏 writeCommandLCD(0x06, 1); /顯示光標(biāo)移動(dòng)設(shè)置 writeCommandLCD(0x0c, 1); /顯示關(guān)及光標(biāo)設(shè)置/按指定位置顯示一個(gè)字符void DisplayOneChar(unsigned char X, unsigned
39、60;char Y, unsigned char DData) Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40;
40、0; /當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80; /算出指令碼 writeCommandLCD(X, 1); /發(fā)命令字 writeDataLCD(DData); /發(fā)數(shù)據(jù)/*顯示字符*/按指定位置顯示一串字符void displayListChar(uchar X, uchar Y,
41、60;uchar code *DData) uchar ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 while (DDataListLength
42、;> 0x19) /若到達(dá)字串尾則退出 if (X <= 0xF) /X坐標(biāo)應(yīng)小于0xF DisplayOneChar(X, Y, DDataListLength); /顯示單個(gè)字符
43、60; ListLength+; X+; /*計(jì)數(shù)*/void count(void) time = TH0 * 256 + TL0;
44、60; TH0 = 0; TL0 = 0; S = (time*1.7) / 100; /算出來(lái)是CM if (S >= 700) | flag = 1) /當(dāng)距離超出測(cè)量時(shí),范圍顯示“-”
45、 flag = 0; DisplayOneChar(0, 1, NUMBER11); DisplayOneChar(1, 1, NUMBER10); /顯示點(diǎn)
46、160; DisplayOneChar(2, 1, NUMBER11); DisplayOneChar(3, 1, NUMBER11); DisplayOneChar(4, 1, NUMBER12); /顯示M e
47、lse /當(dāng)距離未超出距離限制時(shí),正常顯示 disbuff0 = S % 1000 / 100; disbuff1 = S % 1000 % 100 / 10;
48、60; disbuff2 = S % 1000 % 10 % 10; DisplayOneChar(0, 1, NUMBERdisbuff0); DisplayOneChar(1, 1, NUMBER10); /顯示點(diǎn)
49、160; DisplayOneChar(2, 1, NUMBERdisbuff1); DisplayOneChar(3, 1, NUMBERdisbuff2); DisplayOneChar(4, 1, NUMBER12); /顯示M
50、 /*發(fā)聲程序*/void voice() if (S >= 0 && S < 6) STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ0)
51、160;/ 256; STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ0) % 256; TH1 = STH0; /- 裝入TH1,
52、TL1的計(jì)數(shù)寄存器 - TL1 = STL0; RunFlag = 1; /- 置音階播放標(biāo)志為1 - SPK = 1;
53、 DisplayOneChar(5, 0, NUMBER1); if (S >= 6 && S < 12) STH0 = (65536 - FOSC /
54、;T0FENPING / 2 / JINJIEFREQ1) / 256; STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ1) % 256; TH1 = STH0
55、; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 - TL1 = STL0; RunFlag = 1; /- 置音階播放標(biāo)志為1 -
56、60; SPK = 1; DisplayOneChar(5, 0, NUMBER2); if (S >= 12 && S < 18)
57、 STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ2) / 256; STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ2) % 256;
58、0; TH1 = STH0; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 - TL1 = STL0; RunFlag = 1; /- 置音階
59、播放標(biāo)志為1 - SPK = 1; DisplayOneChar(5, 0, NUMBER3); if (S >= 18 && S < 24)
60、160; STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ3) / 256; STL0 = (65536 - FOSC / T0FENPING / 2
61、 / JINJIEFREQ3) % 256; TH1 = STH0; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 - TL1 = STL0; RunFla
62、g = 1; /- 置音階播放標(biāo)志為1 - SPK = 1; DisplayOneChar(5, 0, NUMBER4); if (S >=
63、24 && S < 30) STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ4) / 256; STL0 = (
64、65536 - FOSC / T0FENPING / 2 / JINJIEFREQ4) % 256; TH1 = STH0; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 - TL1 = S
65、TL0; RunFlag = 1; /- 置音階播放標(biāo)志為1 - SPK = 1; DisplayOneChar(5, 0, NUMBER5);
66、; if (S >= 30 && S < 36) STH0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ5) / 256;
67、160; STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ5) % 256; TH1 = STH0; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 -
68、 TL1 = STL0; RunFlag = 1; /- 置音階播放標(biāo)志為1 - SPK = 1; DisplayOne
69、Char(5, 0, NUMBER6); if (S >= 36 && S < 42) STH0 = (65536 - FOSC / T0FENPING / 2
70、60;/ JINJIEFREQ6) / 256; STL0 = (65536 - FOSC / T0FENPING / 2 / JINJIEFREQ6) % 256; TH1 = STH0;
71、160; /- 裝入TH1,TL1的計(jì)數(shù)寄存器 - TL1 = STL0; RunFlag = 1; /- 置音階播放標(biāo)志為1 - SPK =
72、160;1; DisplayOneChar(5, 0, NUMBER7); if (S >= 42) DisplayOneChar(5, 0, NUMBER1
73、1); /*中斷*/void timer0() interrupt 1 /T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍 flag = 1; /中斷溢出標(biāo)志/*外部中斷0*/void Int0_isr() interrupt 0 /EXint0
74、中斷用來(lái)單獨(dú)控制芯片 EX0=0; run=run; EX0=1; /*啟動(dòng)模塊*/void startModule() /啟動(dòng)模塊 uchar i; Trig = 1;
75、160; /啟動(dòng)一次模塊 for (i = 0;i < 20;i+) /延遲 以便于進(jìn)行傳送數(shù)據(jù) _nop_(); Trig = 0;
76、/*/- 定時(shí)器T1溢出中斷服務(wù)程序 -void T1_ISR(void) interrupt 3 if (1 = RunFlag&&run = 1)
77、 /- 在音階播放標(biāo)志為1情況下 - TH1 = STH0; /- 重新裝初值 - TL1 = STL0;
78、; SPK = SPK; /- P1.5引腳上的電平翻轉(zhuǎn) - /*/串口初始化void init() / 串口初始化函數(shù) RCAP2H = 0xff; / 96
79、00 bps RCAP2L = 0xdc; TH2 = RCAP2H; TL2 = RCAP2L; T2CON = 0x34; / TF2 EXF2 RCLK TCLK EXEN2 TR2 C_T2 CP_RL2
80、 SCON = 0x50; / 串口方式1, 8-n-1, 允許接收. PCON = 0x00; / 波特率不倍增 ES = 1; / 允許串口中斷 EA =
81、60;1; void timer2() interrupt 5 TF2 = 0; / 定時(shí)器2軟件對(duì)溢出標(biāo)志位清零 /*發(fā)數(shù)據(jù)*/ void uartSend(uchar s, uint n) uint i; for (i = 0;i < n;i+)
82、0; SBUF = si; while (!TI); TI = 0; /*發(fā)幀頭*/ void uartData(unsigned char Data) &
83、#160; SBUF = Data; while (!TI); TI = 0; /*收數(shù)據(jù)*/void recieve() interrupt 4
84、0; /串口中斷函數(shù) RI = 0; /接收中斷標(biāo)志位,串行接收停止位的中間時(shí),由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請(qǐng)。 run =
85、;SBUF; /收到的數(shù)據(jù)存入緩沖器,然后賦給a /*主函數(shù)*/void main() LCDInit(); /LCD初始化 delay5Ms(); /延時(shí)片刻 displayListChar(0, 0, Music); /第一行顯示
86、60; displayListChar(0, 1, Distance);/第二行顯示 TMOD = 0x11; /設(shè)T0為方式1,GATE=1;T1為方式1 TH0 = 0; TL0 = 0; ET0 = 1;
87、 /允許T0中斷 ET1 = 1; /使能T1中斷 TR1 = 1; EX0=1; EA = 1; /開(kāi)啟總中斷
88、160; init(); /串口初始化 while (1) if (run = 1) &
89、#160; startModule(); while (!Echo); /當(dāng)RX為零時(shí)等待 TR0 = 1; /開(kāi)啟計(jì)數(shù) &
90、#160; while (Echo); /當(dāng)RX為1計(jì)數(shù)并等待 TR0 = 0; /關(guān)閉計(jì)數(shù)
91、60; count(); /計(jì)算 voice(); /發(fā)聲 uartData(10);
92、0;/和串口進(jìn)行通訊的啟動(dòng)信號(hào) uartSend(disbuff, 3);/發(fā)送數(shù)據(jù) delayms(80); /80MS
93、60; else SPK=1; 上位機(jī)程序<MainWindow.xaml.cs>using System.Windows;using System.IO;using System.IO.Ports;using System.Collections.Generic;using System.Text; namespace SonicViolin /
94、160;<summary> / MainWindow.xaml 的交互邏輯 / </summary> public partial class MainWindow : Window SerialPort
95、_serialport; bool _enableMonitor; bool _enableRecord; Queue<string> _recordbuffer; int
96、60;_lastReceivedData; int _count; int _statusCount; int digit1; int digit2;
97、0; int digit3; double result; string scale; public MainWindow()
98、0; InitializeComponent(); / Initialize &
99、#160; _serialport = new SerialPort(); _enableMonitor = false; _enableRecord = false; _count = 0; digit1 = 0; &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙科版選擇性必修3歷史下冊(cè)階段測(cè)試試卷
- 2025年外研版選修3地理下冊(cè)階段測(cè)試試卷含答案
- 2025年滬科新版六年級(jí)語(yǔ)文上冊(cè)階段測(cè)試試卷
- 二零二五年度美容院?jiǎn)T工持股計(jì)劃股份購(gòu)買(mǎi)合同4篇
- 2025年度木模板木方綠色認(rèn)證與采購(gòu)合同4篇
- 二零二五年度圍欄行業(yè)規(guī)范制定與實(shí)施合同2篇
- 二零二五版跨境電商進(jìn)口商品質(zhì)量保證實(shí)務(wù)合同范本3篇
- 2025版寧波慈溪編制城市社區(qū)規(guī)劃與建設(shè)合同4篇
- 二零二五版嬰幼兒奶粉行業(yè)培訓(xùn)與專業(yè)人才培養(yǎng)合同3篇
- 樂(lè)器采購(gòu)合同標(biāo)準(zhǔn)版可打印
- 湖北省黃石市陽(yáng)新縣2024-2025學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報(bào)告
- 央視網(wǎng)2025亞冬會(huì)營(yíng)銷方案
- 《00541語(yǔ)言學(xué)概論》自考復(fù)習(xí)題庫(kù)(含答案)
- 《無(wú)砟軌道施工與組織》 課件 第十講雙塊式無(wú)砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測(cè)試+英語(yǔ)+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運(yùn)輸安全保障方案
- 借名買(mǎi)車的協(xié)議書(shū)范文范本
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
評(píng)論
0/150
提交評(píng)論