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

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計(jì) 書</b></p><p><b>  《嵌入式系統(tǒng)實(shí)訓(xùn)》</b></p><p>  學(xué)院 </p><p>  姓名 </p><p>  學(xué)號

2、 </p><p>  組別 </p><p><b>  1設(shè)計(jì)概述</b></p><p>  能源是經(jīng)濟(jì)發(fā)展和社會進(jìn)步的支柱,能源問題成為當(dāng)今世界各國尤其是發(fā)達(dá)國家所要解決的頭等大事。世界各國都在鼓勵(lì)大力開發(fā)可再生能源。風(fēng)能和太陽能成為當(dāng)下最受歡迎的新能源,也是目前可再生能源應(yīng)用技術(shù)中最成熟的

3、。本設(shè)計(jì)基于人體運(yùn)動出來的機(jī)械能轉(zhuǎn)化成可利用回收的電能,是新能源的一種體現(xiàn),具有很好的開發(fā)前景和實(shí)際用途。</p><p>  該設(shè)計(jì)是基于以stm32f030芯片為主芯片的智能發(fā)電的PCB主板,再利用開關(guān)磁阻電機(jī)進(jìn)行發(fā)電,將其電壓和電流通過wifi模塊發(fā)送給手機(jī)端,通過手機(jī)上的APP可以顯示出電流和電壓值,并進(jìn)行后臺處理和數(shù)據(jù)保存。設(shè)計(jì)將從芯片器件的選型再到PCB板的設(shè)計(jì),之后是PCB板的焊接,再是軟件的編寫與

4、調(diào)試,軟件部分還包括手機(jī)APP的編寫,最終完成本次設(shè)計(jì)。</p><p><b>  設(shè)計(jì)方案</b></p><p>  該設(shè)計(jì)方案可以劃分為兩個(gè)部分,第一部分是終端部分,有發(fā)電機(jī)的驅(qū)動模塊,電壓電流采集模塊,WiFi模塊以和主控芯片及其外設(shè);第二部分是手機(jī)部分,該部分主要是實(shí)現(xiàn)一個(gè)上位機(jī)的功能,包括接收信息,發(fā)送指令,主要有登錄界面和查詢界面。兩部分之間通過WIF

5、I來實(shí)現(xiàn)通信。所以總體設(shè)計(jì)框圖1所示:</p><p>  圖2.1 總體設(shè)計(jì)方案</p><p>  其中手機(jī)端的設(shè)計(jì)為純粹的軟件設(shè)計(jì),而智能發(fā)電系統(tǒng)主體的設(shè)計(jì)方案是方案設(shè)計(jì)中的重點(diǎn)部分包括硬件部分的設(shè)計(jì)與軟件部分的設(shè)計(jì)。該系統(tǒng)的設(shè)計(jì)方案包括以下幾個(gè)方面,一是小車主體電路板的設(shè)計(jì)方案,屬于硬件部分的設(shè)計(jì);二是軟件設(shè)計(jì)方案,屬于軟件部分的設(shè)計(jì),主要是用于驅(qū)動硬件電路和給手機(jī)端APP提供操作

6、接口。</p><p>  該系統(tǒng)主體電路板的設(shè)計(jì)包括電源模塊的設(shè)計(jì),主芯片外圍電路的設(shè)計(jì),WiFi模塊的設(shè)計(jì),電機(jī)驅(qū)動模塊的設(shè)計(jì),各個(gè)傳感器模塊的設(shè)計(jì)。軟件部分的設(shè)計(jì)包括主體函數(shù)的設(shè)計(jì)及各個(gè)功能模塊的設(shè)計(jì),在實(shí)現(xiàn)了各個(gè)功能模塊設(shè)計(jì)的基礎(chǔ)上設(shè)計(jì)出主體程序,以便可以隨時(shí)中斷某一個(gè)功能而去實(shí)現(xiàn)另外的功能。外圍設(shè)計(jì)主要是各個(gè)傳感器的放置位置的選擇,以便達(dá)到所需的功能。</p><p><b

7、>  詳細(xì)設(shè)計(jì)方案 </b></p><p>  2.1.1 電源模塊</p><p>  由于電機(jī)的驅(qū)動需要15V的電源,而USB及傳感器等模塊的供電需要5V的電源,主芯片需要3.3V及1.2V的電源。所以在電源模塊的設(shè)計(jì)中需要用到外部供電電源為15V的可移動電源,可以是蓄電池也可以是干電池串聯(lián)而得。5V的電源通過對15V電源降壓而得到,3.3V電源分別由XC6206P

8、332MR通過不同的外圍電路來獲得。</p><p>  2.1.2 主芯片模塊</p><p>  主芯片在此設(shè)計(jì)中制定為stm32f030作為主控芯片,stm32f030主控芯片的外圍電路包括復(fù)位電路,晶振,過芯片中的USB接口燒錄到SPI FLASH中,選擇的啟動方式是USB啟動。當(dāng)程序燒錄好以后,將啟動方式轉(zhuǎn)換為SPI FLASH啟動。SDRAM中用于存放程序。</p>

9、<p>  STM32F030 內(nèi)部有RC振蕩器,可以為內(nèi)部的鎖相環(huán)提供時(shí)鐘,但同外部晶振相比不夠準(zhǔn)確,所以本文使用外部時(shí)鐘源。外部時(shí)鐘源主要分為高速外部振蕩器和低速外部振蕩器,高速外部振蕩器主要作為芯片處理器和STM32 外設(shè)的驅(qū)動時(shí)鐘,低速外部振蕩器用于驅(qū)動窗口看門狗和實(shí)時(shí)時(shí)鐘。該系統(tǒng)采用 8M外部晶振作為高速外部時(shí)鐘信號的時(shí)鐘源,外接兩個(gè)20p F的貼片電容。低速外部振蕩器</p><p> 

10、 是時(shí)鐘源可以使用外部晶振或用戶自己提供,該系統(tǒng)采用頻率值為 32.768k Hz 的外部晶振,外接兩個(gè)10p F的貼片電容。STM32F030有3種啟動方式,分為系統(tǒng)復(fù)位、電源復(fù)位、備份區(qū)域復(fù)位。該系統(tǒng)采用電源復(fù)位,NRST 引腳與10K?電阻串聯(lián)使引腳處于高電位,當(dāng)需要復(fù)位時(shí),S1開關(guān)閉合使 NRST引腳接地,產(chǎn)生低電平使微處理器復(fù)位。該微處理器內(nèi)部也有復(fù)位電路,當(dāng)引腳電壓小于 2.0V,片會處于復(fù)位狀態(tài),但會有 40m A的延遲。

11、</p><p>  2.1.3 WIFI模塊</p><p>  WIFI模塊的作用是實(shí)現(xiàn)下位機(jī)與上位機(jī)的實(shí)時(shí)通信,并且向上位機(jī)傳遞圖像數(shù)據(jù)。使用的是HC05模塊。其特性如下:</p><p>  1、嵌入高性能32位RISC微處理器 2、55nm CMOS 高度集成射頻技術(shù) 3、集成高性能開關(guān)穩(wěn)壓器 4、低功耗

12、 5、支持1/2/3/4/線 PTA WIFI/藍(lán)牙 6、自動校準(zhǔn) 7、天線分集 8、控制每個(gè)包的功率 9、完全遵守USB v 2.0 高速模式 10、直接支持WIFI功能 11、支持802.1w保護(hù)管理框架</p><p>  2.1.4 霍爾傳感器模塊</p><p>  霍爾傳感器是根

13、據(jù)霍爾效應(yīng)制作的一種磁場傳感器?;魻栃?yīng)是磁電效應(yīng)的一種,這一現(xiàn)象是霍爾(A.H.Hall,1855—1938)于1879年在研究金屬的導(dǎo)電機(jī)構(gòu)時(shí)發(fā)現(xiàn)的。后來發(fā)現(xiàn)半導(dǎo)體、導(dǎo)電流體等也有這種效應(yīng),而半導(dǎo)體的霍爾效應(yīng)比金屬強(qiáng)得多,利用這現(xiàn)象制成的各種霍爾元件,廣泛地應(yīng)用于工業(yè)自動化技術(shù)、檢測技術(shù)及信息處理等方面?;魻栃?yīng)是研究半導(dǎo)體材料性能的基本方法。通過霍爾效應(yīng)實(shí)驗(yàn)測定的霍爾系數(shù),能夠判斷半導(dǎo)體材料的導(dǎo)電類型、載流子濃度及載流子遷移率等重

14、要參數(shù)。</p><p>  由霍爾效應(yīng)的原理知,霍爾電勢的大小取決于:Rh為霍爾常數(shù),它與半導(dǎo)體材質(zhì)有關(guān);I為霍爾元件的偏置電流;B為磁場強(qiáng)度;d為半導(dǎo)體材料的厚度。</p><p>  對于一個(gè)給定的霍爾器件,當(dāng)偏置電流 I 固定時(shí),UH將完全取決于被測的磁場強(qiáng)度B。</p><p>  一個(gè)霍爾元件一般有四個(gè)引出端子,其中兩根是霍爾元件的偏置電流 I 的輸入端

15、,另兩根是霍爾電壓的輸出端。如果兩輸出端構(gòu)成外回路,就會產(chǎn)生霍爾電流。一般地說,偏置電流的設(shè)定通常由外部的基準(zhǔn)電壓源給出;若精度要求高,則基準(zhǔn)電壓源均用恒流源取代。為了達(dá)到高的靈敏度,有的霍爾元件的傳感面上裝有高導(dǎo)磁系數(shù)的鍍膜合金;這類傳感器的霍爾電勢較大,但在0.05T左右出現(xiàn)飽和,僅適用在低量限、小量程下使用。</p><p>  在半導(dǎo)體薄片兩端通以控制電流I,并在薄片的垂直方向施加磁感應(yīng)強(qiáng)度為B的勻強(qiáng)磁場

16、,則在垂直于電流和磁場的方向上,將產(chǎn)生電勢差為UH的霍爾電壓。</p><p><b>  圖2.2 霍爾效應(yīng)</b></p><p>  2.1.5 開關(guān)磁阻電機(jī)</p><p>  開關(guān)磁阻電動機(jī),調(diào)速系統(tǒng)所用的開關(guān)磁阻電動機(jī)(SRM)是SRD中實(shí)現(xiàn)機(jī)電能量轉(zhuǎn)換的部件,也是SRD有別于其他電動機(jī)驅(qū)動系統(tǒng)的主要標(biāo)志。SRM系雙凸極可變磁阻電動

17、機(jī),其定、轉(zhuǎn)子的凸極均由普通硅鋼片疊壓而成。轉(zhuǎn)子既無繞組也無永磁體,定子極上繞有集中繞組,徑向相對的兩個(gè)繞組聯(lián)接起來,稱為“一相”,SR電動機(jī)可以設(shè)計(jì)成多種不同相數(shù)結(jié)構(gòu),且定、轉(zhuǎn)子的極數(shù)有多種不同的搭配。相數(shù)多、步距角小,有利于減少轉(zhuǎn)矩脈動,但結(jié)構(gòu)復(fù)雜,且主開關(guān)器件多,成本高,現(xiàn)今應(yīng)用較多的是四相(8/6)結(jié)構(gòu)和三相(12/8)結(jié)構(gòu)。</p><p>  圖2.2示出四相(8/6)結(jié)構(gòu)SR電動機(jī)原理圖。為簡單計(jì),

18、圖中只畫出A相繞組及其供電電路。SR電動機(jī)的運(yùn)行原理遵循“磁阻最小原理”— ‘磁通總要沿著磁阻最小的路徑閉合,而具有一定形狀的鐵心在移動到最小磁阻位置時(shí),必使自己的主軸線與磁場的軸線重合。圖2中,當(dāng)定子D-D’極勵(lì)磁時(shí),1-1'向定子軸線D-D'重合的位置轉(zhuǎn)動,并使D相勵(lì)磁繞組的電感最大。若以圖中定、轉(zhuǎn)子所處的相對位置作為起始位置,則依次給D→A→B→C相繞組通電,轉(zhuǎn)子即會逆著勵(lì)磁順序以逆時(shí)針方向連續(xù)旋轉(zhuǎn);反之,若依次給

19、B→A→D→C相通電,則電動機(jī)即會沿順時(shí)針方向轉(zhuǎn)動。可見,SR電動機(jī)的轉(zhuǎn)向與相繞組的電流方向無關(guān),而僅取決于相繞組通電的順序。另外,從圖2.2可以看出,當(dāng)主開關(guān)器件S1、S2導(dǎo)通時(shí),A相繞組從直流電源US吸收電能,而當(dāng)S1、S2關(guān)斷時(shí),繞組電流經(jīng)續(xù)流二極管VD1、VD2繼續(xù)流通,并回饋給電源US。因此,SR電動機(jī)傳動的共性特點(diǎn)是具有再生作用,系統(tǒng)效率高。</p><p><b>  圖 2.3</

20、b></p><p>  2.1.6 電路板抗干擾設(shè)計(jì)</p><p>  電路設(shè)計(jì)和應(yīng)用應(yīng)盡量消除或抑制電子電路的干擾,該監(jiān)測系統(tǒng)的硬件電路用來接收傳感器的數(shù)據(jù)并對其進(jìn)行處理,如果不能降低各類干擾的影響,將會增加監(jiān)測數(shù)據(jù)誤差。硬件電路設(shè)計(jì)過程中充分考慮對干擾的抑制,對電路進(jìn)行了合理的設(shè)計(jì)以及選擇合適的元器件。</p><p>  在硬件電路設(shè)計(jì)過程中,充

21、分從抑制干擾源、切斷干擾途徑以及提高元器件的抗干擾性能等三方面考慮,為降低信號干擾,采取了以下措施。</p><p> ?。?)以核心部件為中心,圍繞其進(jìn)行布線,易受干擾元器件相互遠(yuǎn)離,輸入輸出元器件分開放置,電源和高頻電路部分盡量遠(yuǎn)離;</p><p>  (2)STM32微處理器和大功率器件的地線需要單獨(dú)接地,以減少相互干擾,大功率元器件放置在電路板邊緣;</p><

22、;p> ?。?)在電路板布線時(shí)避免九十度折線,同時(shí)減少回路環(huán)面積,選擇合適粗細(xì)的地線以及電源線;</p><p> ?。?)數(shù)字區(qū)和模擬區(qū)用地線隔離,模擬地和數(shù)字地要分離,統(tǒng)一在一點(diǎn)接于電源地。</p><p><b>  軟件設(shè)計(jì)方案</b></p><p><b>  軟件系統(tǒng)框圖如下:</b></p>

23、;<p>  軟件系統(tǒng)框圖 2.4</p><p>  手機(jī)客戶端APP設(shè)計(jì)</p><p><b>  開發(fā)環(huán)境的搭建</b></p><p>  本設(shè)計(jì)在開發(fā)過程中使用Eclipse加ADT插件的開發(fā)環(huán)境,Eclipse集成開發(fā)環(huán)境JDK,首先需要安裝JDK工具包,本設(shè)計(jì)中使用的JDK版本是JDK-7-Windows-i586

24、.exe。安裝完成后,配置系統(tǒng)環(huán)境變量,將JDK的安裝路徑添加到系統(tǒng)Path中去。在Andriod developer官網(wǎng)上下載Eclipse開發(fā)環(huán)境,其己對Eclipse和ADK插件綁定,開發(fā)者直接下載后解壓即可使用。本設(shè)計(jì)使用的ADT版本是adt-bundle-windows-x86-20140702.zip。</p><p>  手機(jī)APP的主要功能模塊</p><p>

25、  手機(jī)APP的設(shè)計(jì)采用了MVC框架,將Model、View和Controler分開,有效減少開發(fā)工作量量和有效減少開發(fā)工作查和代碼冗余率,有利于代碼調(diào)試。本設(shè)計(jì)將手機(jī)端功能主要分為5大功能模塊:登錄功能模塊、查詢功能模塊、接收數(shù)據(jù)模塊、藍(lán)牙驗(yàn)證模塊。</p><p><b> ?。?)登錄模塊</b></p><p>  登錄模塊需要用戶輸入個(gè)人信息,如用戶名、密碼

26、、手機(jī)號碼等。登錄界面設(shè)計(jì)兩個(gè)EditView輸入爛和2個(gè)Button,輸入爛用來接收用戶名,2個(gè)按紐分別是登錄和取消。當(dāng)用戶點(diǎn)擊確認(rèn)按鈕后,跳轉(zhuǎn)到主頁面。</p><p>  confirm=(ImageButton)findViewById(R.id.confirm);(確認(rèn)按鈕綁定)</p><p>  cancel=(ImageButton)findViewById(R.id.ca

27、ncel); (取消按鈕綁定)</p><p>  public void onClick(View v) { (設(shè)定按鈕點(diǎn)擊事件)</p><p>  switch (v.getId()) {</p><p>  case R.id.confirm:</p><p>  username=name.get

28、Text().toString();</p><p>  if(username.equals(""))</p><p><b>  {</b></p><p>  Toast.makeText(LoginActivity.this, "用戶名為空,請輸入!", Toast.LENGTH_SHORT).s

29、how();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Intent intent = new Intent();</p><p>  intent.

30、setClass(LoginActivity.this, MainActivity.class);</p><p>  intent.putExtra("name", username); </p><p>  startActivity(intent);</p><p><b>  }</b></p>

31、;<p><b>  break;</b></p><p>  case R.id.cancel:</p><p>  this.finish();</p><p><b>  break;</b></p><p><b>  default:</b></p

32、><p><b>  break;</b></p><p><b>  }</b></p><p><b> ?。?)藍(lán)牙搜索模塊</b></p><p>  進(jìn)入搜索藍(lán)牙界面后,會搜索附近的藍(lán)牙</p><p>  a.設(shè)置權(quán)限 在manife

33、st中配置 </p><p>  <uses-permission android:name="android.permission.BLUETOOTH"/>  </p><p>  <uses-permission android:name="android.permission.BLUET

34、OOTH_ADMIN"/>b.啟動藍(lán)牙 首先要查看本機(jī)是否支持藍(lán)牙,獲取BluetoothAdapter藍(lán)牙適配器對象 </p><p>  BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();  </p><

35、p>  if(mBluetoothAdapter == null){  //表明此手機(jī)不支持藍(lán)牙  </p><p><b>  return;  </b></p><p><b>  }  </b></p><p>  i

36、f(!mBluetoothAdapter.isEnabled()){ //藍(lán)牙未開啟,則開啟藍(lán)牙  </p><p>  Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);  </p><p>  star

37、tActivityForResult(enableIntent, REQUEST_ENABLE_BT);  </p><p><b>  }   </b></p><p>  public void onActivityResult(int requestCode, i

38、nt resultCode, Intent data){  </p><p>  if(requestCode == REQUEST_ENABLE_BT){  </p><p>  if(requestCode == RESULT_OK){ //藍(lán)牙已經(jīng)開啟 &

39、#160; </p><p><b>  }  </b></p><p><b>  }  </b></p><p>  }  c.發(fā)現(xiàn)藍(lán)牙設(shè)備 這里可以細(xì)分為幾個(gè)方面  (I)使本機(jī)藍(lán)牙處于可見(即處于易被搜索到狀態(tài)),便

40、于其他設(shè)備發(fā)現(xiàn)本機(jī)藍(lán)牙 </p><p>  //使本機(jī)藍(lán)牙在300秒內(nèi)可被搜索  </p><p>  private void ensureDiscoverable() {  </p><p>  if (mBluetoothAdapter.getScanMode()

41、60;!=  </p><p>  BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {  </p><p>  Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQ

42、UEST_DISCOVERABLE);  </p><p>  discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);  </p><p>  startActivity(discoverableIntent);  &

43、lt;/p><p><b>  }  </b></p><p>  }  (II)查找已經(jīng)配對的藍(lán)牙設(shè)備,即以前已經(jīng)配對過的設(shè)備 </p><p>  Set<BluetoothDevice> pairedDevices = mBluetoothAdapt

44、er.getBondedDevices();  </p><p>  if (pairedDevices.size() > 0) {  </p><p>  findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); 

45、 for (BluetoothDevice device : pairedDevices) {  </p><p>  //device.getName() +" "+ device.getAddress());  </p><p><

46、b>  }  </b></p><p>  } else {  </p><p>  mPairedDevicesArrayAdapter.add("沒有找到已匹對的設(shè)備");  </p><p><b>  }  &l

47、t;/b></p><p>  (III)通過mBluetoothAdapter.startDiscovery();搜索設(shè)備,要獲得此搜索的結(jié)果需要注冊 一個(gè)BroadcastReceiver來獲取。先注冊再獲取信息,然后處理</p><p>  //注冊,當(dāng)一個(gè)設(shè)備被發(fā)現(xiàn)時(shí)調(diào)用onReceive</p><p>  IntentFilter

48、0;filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);</p><p>  this.registerReceiver(mReceiver, filter);</p><p>  //當(dāng)搜索結(jié)束后調(diào)用onReceive</p><p>  filter =

49、 new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);  </p><p>  this.registerReceiver(mReceiver, filter);  </p><p>  private BroadcastReceiver&#

50、160;mReceiver = new BroadcastReceiver() {@Override  </p><p>  public void onReceive(Context context, Intent intent) {  </p><p&

51、gt;  String action = intent.getAction();  </p><p>  if(BluetoothDevice.ACTION_FOUND.equals(action)){  </p><p>  BluetoothDevice device = intent.

52、getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  // 已經(jīng)配對的則跳過  </p><p>  if (device.getBondState() != BluetoothDevice.BOND_BONDED) {</p><p>  mNewDe

53、vicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());  //保存設(shè)備地址與名字  </p><p><b>  }  </b></p><p>  }else

54、60;if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {  //搜索結(jié)束  </p><p>  if (mNewDevicesArrayAdapter.getCount() == 0)  </p><p&g

55、t;  mNewDevicesArrayAdapter.add("沒有搜索到設(shè)備");  </p><p><b>  }  </b></p><p><b>  }  </b></p><p><b>  }  

56、</b></p><p>  };  d.建立連接 查找到設(shè)備 后,則需要建立本機(jī)與其他設(shè)備之間的連接。一般用本機(jī)搜索其他藍(lán)牙設(shè)備時(shí),本機(jī)可以作為一個(gè)服務(wù)端,接收其他設(shè)備的連接。啟動一個(gè)服務(wù)器端的線程,死循環(huán)等待客戶端的連接,這與ServerSocket極為相似。 這個(gè)線程在準(zhǔn)備連接之前啟動 </p><p>  //UU

57、ID可以看做一個(gè)端口號  </p><p>  private static final UUID MY_UUID =  </p><p>  UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");  &

58、lt;/p><p>  //像一個(gè)服務(wù)器一樣時(shí)刻監(jiān)聽是否有連接建立  </p><p>  private class AcceptThread extends Thread{  </p><p>  private BluetoothServerSocket serve

59、rSocket;     </p><p>  public AcceptThread(boolean secure){  </p><p>  BluetoothServerSocket temp = null;  </p><p

60、><b>  try {  </b></p><p>  temp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord( </p><p>  NAME_INSECURE, MY_UUID);  </p>

61、<p>  } catch (IOException e) {  </p><p>  Log.e("app", "listen() failed", e);  </p><p><b>  }  

62、</b></p><p>  serverSocket = temp;  </p><p><b>  }    </b></p><p>  public void run(){  </p><

63、;p>  BluetoothSocket socket=null;  </p><p>  while(true){  </p><p><b>  try {  </b></p><p>  socket = serverSocket.a

64、ccept();  </p><p>  } catch (IOException e) {  </p><p>  Log.e("app", "accept() failed", e);  </p><

65、;p><b>  break;  </b></p><p><b>  }  </b></p><p><b>  }  </b></p><p>  if(socket!=null){ //此時(shí)可以新建一個(gè)數(shù)據(jù)交換線程,把此

66、socket傳進(jìn)去  </p><p><b>  }  </b></p><p><b>  }    </b></p><p><b>  //取消監(jiān)聽  </b></p><p

67、>  public void cancel(){     </p><p><b>  try {  </b></p><p>  serverSocket.close();  </p><p>  } cat

68、ch (IOException e) {  </p><p>  Log.e("app", "Socket Type" + socketType + "close() of server failed", 

69、e);  </p><p><b>  }  </b></p><p><b>  }  </b></p><p><b>  }  </b></p><p>  e.建立數(shù)據(jù)通信線程,進(jìn)行讀取數(shù)據(jù)

70、 </p><p>  //建立連接后,進(jìn)行數(shù)據(jù)通信的線程  </p><p>  private class ConnectedThread extends Thread{  </p><p>  private BluetoothSocket socke

71、t;  </p><p>  private InputStream inStream;  </p><p>  private OutputStream outStream;          </p&g

72、t;<p>  public ConnectedThread(BluetoothSocket socket){     </p><p>  this.socket = socket;  </p><p>  try { //獲得輸入輸出流

73、0; </p><p>  inStream = socket.getInputStream();  </p><p>  outStream = socket.getOutputStream();  </p><p>  } catch (IOExcept

74、ion e) {  </p><p>  Log.e("app", "temp sockets not created", e);  </p><p><b>  }  </b></p>

75、<p><b>  }     </b></p><p>  public void run(){  </p><p>  byte[] buff = new byte[1024];  </p>

76、<p>  int len=0;//讀數(shù)據(jù)需不斷監(jiān)聽,寫不需要  </p><p>  while(true){  </p><p><b>  try {  </b></p><p>  len = inStream.read(bu

77、ff);  </p><p>  //把讀取到的數(shù)據(jù)發(fā)送給UI進(jìn)行顯示  </p><p>  Message msg = handler.obtainMessage(BluetoothChat.MESSAGE_READ,len, -1, buff);  </p>&

78、lt;p>  msg.sendToTarget();  </p><p>  } catch (IOException e) {  </p><p>  Log.e("app", "disconnected", e);  &l

79、t;/p><p>  connectionLost();   //失去連接  </p><p>  start();    //重新啟動服務(wù)器  </p><p><b>  break;  </b></p>

80、<p><b>  }  </b></p><p><b>  }  </b></p><p><b>  }  </b></p><p>  public void write(byte[] bu

81、ffer) {  </p><p><b>  try {  </b></p><p>  outStream.write(buffer);  </p><p>  // Share the sent message 

82、;back to the UI Activity  </p><p>  handler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -1, buffer).sendToTarget();  </p><p>  } ca

83、tch (IOException e) {  </p><p>  Log.e("app", "Exception during write", e);  </p><p><b>  }  </b>

84、</p><p><b>  }  </b></p><p>  public void cancel() {  </p><p><b>  try {  </b></p><p>  socket

85、.close();  </p><p>  } catch (IOException e) {  </p><p>  Log.e("app", "close() of connect socket failed",

86、60;e);</p><p><b>  }  </b></p><p><b>  }  </b></p><p><b>  }  </b></p><p><b> ?。?)數(shù)據(jù)查詢</b>

87、</p><p>  query=(ImageButton)findViewById(R.id.query);</p><p>  query.setOnClickListener(this);</p><p>  listview = (ListView) findViewById(R.id.listView);</p><p>  db=

88、new DataBaseCreat(MainActivity.this);</p><p>  db.open(); </p><p>  begin_date=(EditText)findViewById(R.id.begin_date);</p><p>  end_date=(EditText)findViewById(R.id.end_date);</

89、p><p>  yue=(Button)findViewById(R.id.yue);</p><p>  zhou=(Button)findViewById(R.id.zhou);</p><p>  ri=(Button)findViewById(R.id.ri);</p><p>  yue.setOnClickListener(new O

90、nClickListener() {</p><p><b>  @Override</b></p><p>  public void onClick(View v) {</p><p>  // TODO Auto-generated method stub</p><p>  QUERY_METHOD=0;<

91、/p><p><b>  }</b></p><p><b>  });</b></p><p>  zhou.setOnClickListener(new OnClickListener() {</p><p><b>  @Override</b></p><

92、;p>  public void onClick(View v) {</p><p>  // TODO Auto-generated method stub</p><p>  QUERY_METHOD=1;</p><p><b>  }</b></p><p><b>  });</b>

93、</p><p>  ri.setOnClickListener(new OnClickListener() {</p><p><b>  @Override</b></p><p>  public void onClick(View v) {</p><p>  // TODO Auto-generated met

94、hod stub</p><p>  QUERY_METHOD=2;</p><p><b>  }</b></p><p><b>  });</b></p><p><b>  }</b></p><p><b>  @Override&l

95、t;/b></p><p>  public void onClick(View v) {</p><p>  // TODO Auto-generated method stub</p><p>  switch (v.getId()) {</p><p>  case R.id.query:</p><p>

96、  if(TextUtils.isEmpty(begin_date.getText()) || TextUtils.isEmpty(end_date.getText()))</p><p><b>  {</b></p><p>  Toast.makeText(MainActivity.this, "輸入時(shí)間為空,請檢查", Toast.LENG

97、TH_SHORT).show();</p><p><b>  break;</b></p><p><b>  }</b></p><p>  Toast.makeText(MainActivity.this, "查詢中,請稍后", Toast.LENGTH_SHORT).show();</p&

98、gt;<p>  ArrayList<HashMap<String, Object>> temp = new ArrayList<HashMap<String,Object>>();</p><p>  temp=db.getAllContact(QUERY_METHOD,name,datebegin, dateend);</p><

99、;p>  SimpleAdapter myAdapter = null;</p><p>  switch (QUERY_METHOD) {</p><p><b>  case 0:</b></p><p>  myAdapter = new SimpleAdapter(this,temp,R.layout.item0,</p&g

100、t;<p>  new String[]{"user_name","year", "month","total"},</p><p>  new int[] {R.id.user_name0,R.id.year0,R.id.month0,R.id.total0} </p><p><b&g

101、t;  );</b></p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  myAdapter = new SimpleAdapter(this,temp,R.layout.item1,</p><p>  new St

102、ring[]{"user_name","weekofyear","total"},</p><p>  new int[] {R.id.user_name1,R.id.weekofyear1,R.id.total1} </p><p><b>  );</b></p><p><

103、;b>  break;</b></p><p><b>  case 2:</b></p><p>  myAdapter = new SimpleAdapter(this,temp,R.layout.item2,</p><p>  new String[]{"user_name","year&

104、quot;, "month","day","total"},</p><p>  new int[] {R.id.user_name2,R.id.year2,R.id.month2,R.id.day2,R.id.total2} </p><p><b>  );</b></p><p&g

105、t;<b>  break;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  listview.setAdapter(myAdapt

106、er);</p><p><b>  Break;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b&

107、gt;  }</b></p><p>  軟件件調(diào)試過程和結(jié)果</p><p>  由于我只負(fù)責(zé)軟件部分,硬件部分由終端同學(xué)負(fù)責(zé),需要將PCB板打出來,這里我們用電腦模仿硬件,用串口調(diào)試助手通過藍(lán)牙向外發(fā)送數(shù)據(jù),然后手機(jī)APP端接收,并通過查詢按鈕查詢出來并實(shí)時(shí)顯示電流數(shù)據(jù),電壓數(shù)據(jù),轉(zhuǎn)速數(shù)據(jù)和總電量,下面是我們的測試示意圖:</p><p><b

108、>  藍(lán)牙搜索界面:</b></p><p><b>  接收數(shù)據(jù)顯示界面:</b></p><p><b>  按天查詢界面:</b></p><p><b>  按周查詢:</b></p><p><b>  按月查詢:</b><

109、;/p><p>  測試結(jié)果表明,各功能均能正常實(shí)現(xiàn)。</p><p><b>  課程總結(jié)</b></p><p>  本學(xué)期為期一周的嵌入式課程設(shè)計(jì)在不知不覺中結(jié)束了,雖說這次課程設(shè)計(jì)時(shí)間不是很長,但是感覺自己收獲頗豐,不僅學(xué)習(xí)到了一些新知識,回顧了以前的一些快要遺忘的知識點(diǎn),而且使自己的學(xué)習(xí)目標(biāo)更加明確,學(xué)習(xí)方法更加完善,也體會到軟件開發(fā)的趣

110、味,更加清楚地認(rèn)識到了自己在軟件開發(fā)及學(xué)習(xí)上的一些不足之處。</p><p>  感謝這個(gè)互聯(lián)網(wǎng)發(fā)達(dá)的時(shí)代,在網(wǎng)上基本都能找到自己想要的資料,在設(shè)計(jì)開發(fā)過程中遇到很多問題,首先就是安卓開發(fā)軟件的熟悉和java語言的學(xué)習(xí),這個(gè)過程,我用了大概兩周的時(shí)間,在上網(wǎng)查閱相關(guān)資料和請教師兄的情況下,基本做到了具有實(shí)現(xiàn)基本開發(fā)的能力,然后就是藍(lán)牙通信的問題,這個(gè)問題也困擾了好長時(shí)間,因?yàn)槲抑皼]有接觸過這方面的東西,所有就問

111、了周圍的師兄,最終在師兄的指導(dǎo)下完成了藍(lán)牙通信,剩下的問題就是軟件功能的開發(fā)了,這個(gè)是主要工作量,我大部分都是通過上網(wǎng)找資料,花了大量的時(shí)間,最終設(shè)計(jì)出符合要求的軟件,值得一提的是中間數(shù)據(jù)存儲也花了不少時(shí)間,數(shù)據(jù)庫的建立并不容易,數(shù)據(jù)的查詢其實(shí)是主要問題,這個(gè)問題的解決最終標(biāo)志著我完成了最后的任務(wù)。</p><p>  此次實(shí)訓(xùn)最大的收獲不是我學(xué)習(xí)到了多少知識而是這幾天實(shí)訓(xùn)給我的感悟:首先是心態(tài)。一定要有一個(gè)積極

112、的心態(tài),獨(dú)立解決問題的意識,培養(yǎng)扎實(shí)基礎(chǔ)的認(rèn)識。不要什么東西都感覺跟簡單(很多東西可能是看似簡單)就不去做了或者不屑一做,以至于性網(wǎng)上搜搜就可以了,這樣很不好。有自己的東西有自己的付出才會有程序運(yùn)行成功時(shí)的喜悅和小自豪,這樣也有助于培養(yǎng)自己的興趣。要時(shí)刻牢記態(tài)度決定一切。其次是興趣,感覺學(xué)習(xí)工作中興趣很關(guān)鍵,只是一個(gè)引發(fā)人積極性的問題,有了興趣就自覺了,效率自然就高了。再次要敢于嘗試和挑戰(zhàn)。不要安于現(xiàn)成的程序,而且不要害怕失敗,在程序調(diào)

113、試的過程中這點(diǎn)尤為重要,“發(fā)現(xiàn)出問題然后解決問題”是一個(gè)積累經(jīng)驗(yàn)的過程,而且很高效。最后要不懈追求。對于源代碼進(jìn)行不斷的完善,要盡可能的實(shí)現(xiàn)課題所要求的功能。對于初學(xué)者或者開發(fā)較少的人來說,大量大寫程序還是有必要的,但同時(shí)要注意思考,理解其實(shí)現(xiàn)的內(nèi)在意義。還可以自己添加一些有意義的功能來實(shí)現(xiàn)。當(dāng)看到自己編寫的程序正常運(yùn)行時(shí),興趣也會隨之而來,樂此不疲,形成一個(gè)良性循環(huán)。</p><p>  短短一學(xué)期的實(shí)訓(xùn)課很快

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論