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

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  第1章 概述1</b></p><p>  1.1本設計研究的背景及意義1</p><p>  1.2本課題研究的主要內容1</p><p>  1.3各部分元件介紹1</p><p>  第2章

2、 硬件設計3</p><p>  2.1 設計的方案3</p><p>  2.2 基本原理3</p><p>  第三章 軟件設計5</p><p>  3.1 程序的主程序流程圖5</p><p><b>  3.2實驗步驟5</b></p><p>  

3、第4章 調試結果及分析7</p><p><b>  心得與體會8</b></p><p><b>  參考文獻9</b></p><p><b>  附錄10</b></p><p><b>  第1章 概述</b></p><

4、;p>  1.1本設計研究的背景及意義</p><p>  在廣泛的自動控制領域中,需要有類似微型計算機功能的支持,但常常又不能把微型計算機安裝在設備里面。因此,微型控制器的一個重要分支(單片機)應運而生。SPCE061A單片機的CPU內核是一個通用核結構,除此之外的其他功能模塊均為可選結構,借助這種通用結構附加可選結構的積木式的構成,便可形成各種不同系統(tǒng)派生產(chǎn)品,以適應不同的應用場合。本次課題所選用的就為

5、LCD顯示模組模塊。LCD就是指數(shù)碼相機的液晶顯示屏(LCD,全稱為Liquid Crystal Display),LCD的特點包括低壓微功耗,平板型結構,被動顯示型,顯示信息量大,易于彩色化,無電磁輻射,長壽命等。</p><p>  1.2本課題研究的主要內容</p><p>  本次設計要求完成基于單片機的電壓測量系統(tǒng)的設計。系統(tǒng)包括數(shù)據(jù)采集A/D轉換模塊,單片機控制模塊和驅動顯示模

6、塊。主程序利用C語言編寫,中斷服務程序利用匯編語言編寫,實現(xiàn)一個模擬電壓表的功能,要求電壓表能夠測量電壓值,在液晶顯示器上顯示并播報測量電壓值。</p><p>  在開機運行后,顯示一個圖片MM.bmp,顯示并播放當前電位所在位置的電壓;變化R22電位器,顯示并播報R22電位器變化后的電壓,即只要R22電位器改變,系統(tǒng)就能自動測量出R22電位器的電壓,并把測量的到的電壓值播報并顯示出來。</p>

7、<p>  1.3各部分元件介紹</p><p>  SPCE061A提供了位控制結構的I/O端口,每一位都可以被單獨定義用于輸入或輸出數(shù)據(jù)。通常,對某一位的設定包括以下3個基本項:數(shù)據(jù)向量Data、屬性向量Attribution和方向控制向量Direction。3個端口內每個對應的位組合在一起,形成一個控制字,用來定義相應I/O口位的輸入輸出狀態(tài)和方式。SPCE061A有32個可編程I/O端口,分為兩

8、組:IOA0~15口和IOB0~15口,其中每一個端口都可以被單獨設置為輸入或者輸出口。</p><p>  SPLC501液晶顯示模組采用的驅動控制芯片為凌陽科技的SPLC501A芯片,SPLC501A為液晶顯示控制驅動器,SPLC501A單芯片液晶驅動,可以直接與其他微控制器接口總線相連。微控制器可以將顯示數(shù)據(jù)通過8位數(shù)據(jù)總線或者串行接口寫到SPLC501A的顯存中。</p><p>

9、  SACM_S480語音播放也有自動和手動兩種方式,無論利用自動方式還是手動方式進行播放,都要通過語音播放初始化,即初始化為自動方式或者手動方式,取數(shù)據(jù),填充語音隊列,譯碼播放的過程。在自動方式里,取語音數(shù)據(jù),填充語音隊列,對語音資源進行解碼,以及輸出隊列的過程只需通過SACM_S480_ServiceLoop()一條語音就可以實現(xiàn)。</p><p><b>  第2章 硬件設計</b>&

10、lt;/p><p><b>  2.1 設計的方案</b></p><p>  硬件連接圖如圖2-1。IOA8~IOA15連接SPLC501液晶顯示模塊的D0~D7,IOB4連接AO,IOB5連接RWP,IOB6連接EP,RE連接/RES,IOB9連接/CS,VR、C86和PS跳線都與V3短接,把SPLC501液晶顯示模組的時序選擇為6800時序,即把JP6中所有左右兩排

11、的引針用跳線短接;兩路音頻輸出J8和J13中靠左邊的兩個引針用跳線短接;IOA0連接R22電位器,即用排線把J26的第0號引針和J17(雙0~3V的直流電平輸入電路其中之一)中任一引針連接起來。</p><p>  本實驗中,通過SPCE061A內部ADC采集數(shù)據(jù),如圖2-1。實驗箱上V3為3.3V,當滑動頭變化時,IOA0口輸入的電壓就隨著變化;當已經(jīng)通過[P_ADC_MUX_Ctrl]啟動轉換,通過[P_AD

12、C_MUX_Ctrl]設置從LINE_IN1輸入時,因為LINE_IN1也就是IOA0,所以IOA0口輸入的電壓變化時,就會送入A/D轉換器變化的值,A/D轉換器采集轉換;通過讀取[P_ADC_MUX_Data]轉換得到數(shù)據(jù),并把這些數(shù)據(jù)計算成電壓值,計算出電壓值的個位、小數(shù)點后第一位、小數(shù)點后第二位、小數(shù)點后第三位、小數(shù)點后第四位。</p><p>  圖 2-1硬件連接圖</p><p&g

13、t;<b>  2.2 基本原理</b></p><p>  本課題用到的實驗箱硬件模塊為:SPCE061A核心及周邊電路模塊(包含32個I/O口),LCD顯示模組模塊,雙0~3.3V直流電平輸入電路模塊,兩路音頻輸出電路模塊。</p><p>  圖2-2 0~3.3V直流電平輸入電路</p><p>  圖 2-3 硬件原理圖</

14、p><p><b>  軟件設計</b></p><p>  3.1 程序的主程序流程圖</p><p>  主程序流程圖如圖3-1,初始化LCD后,顯示開機圖片MM;進入電壓測量循環(huán):啟動轉換,采集20個轉換數(shù)據(jù)并取平均值,主要是為了減少誤差;計算電壓值;如果和上次電壓值之差小于±0.1V,則電壓沒有變化,返回繼續(xù)采集數(shù)據(jù);如果和上次電

15、壓值之差大于±0.1 V,表示有電壓變化,計算電壓各位(包括個位到小數(shù)點后四位)的數(shù);清屏,顯示圖片MM;播報并顯示電壓值。 </p><p>  圖 3-1 程序流程圖</p><p><b>  3.2實驗步驟</b></p><p>  1. 新建一個工程ex10_VoltageMeasureFrom0To3,新建一個C語言程序

16、main.c。(根據(jù)編程需要,讀者可自行新建其他文件)。</p><p>  2. 拷貝支持sacmv26e.lib的匯編語言文件hardware.asm和頭文件hardware.h、hardware.inc以及頭文件SPCE061A.h和SPCE061A.inc到ex10_VoltageMeasureFrom0To3工程文件夾。</p><p>  3. 拷貝語音播放庫sacmv26e.

17、lib和頭文件s480.h、s480.inc到ex10_ VoltageMeasureFrom0To3工程文件夾。</p><p>  4. 拷貝語音資源到當前工程的文件夾中,并將語音資源加載到工程中;語音資源可在IDE的安裝路徑\SPCE061A\example\IntExa\ ex10_VoltageMeasureFrom0To3\voice文件夾中找到。</p><p>  5.拷貝

18、SPLC501液晶顯示DataOSforLCD.asm、SPLC501Driver_IO.asm、SPLC501Driver_IO.inc、SPLC501User.c和SPLC501User.h五個LCD驅動程序到ex10_ VoltageMeasureFrom0To3工程文件夾。</p><p>  6. 在IDE集成開發(fā)環(huán)境的Project􀃆Setting􀃆link中鏈接s

19、acmv26e.lib庫到工程中。</p><p>  7. 添加hardware.asm、DataOSforLCD.asm、SPLC501Driver_IO.asm和SPLC501User.c到工程文件的“Source Files”,添加s480.h、s480.inc、hardware.h、hardware.inc、SPLC501Driver_IO.inc、SPLC501User.h六個頭文件到“Head Fi

20、les”。</p><p>  8. 按照程序流程圖編寫程序。</p><p>  9. Rebuild All。</p><p>  10. 按照硬件連接圖連接硬件。注意把J17的任一引腳和J26中的第0號引腳連接,把JP3和JP7的所有跳線全部拔掉,以免對I/O口的數(shù)據(jù)造成影響。 </p><p>  11. 下載程序,運行。 </

21、p><p>  12. 調節(jié)R22電位器(雙0~3.3V直流電平輸入電路模塊中下面一個電位器),觀察LCD顯示數(shù)據(jù)和實驗箱播報的數(shù)據(jù),分析是不是和實驗要求相統(tǒng)一。</p><p>  第4章 調試結果及分析</p><p>  實現(xiàn)一個模擬電壓表的功能,要求電壓表能夠測量電壓值,在液晶顯示器上顯示并播報測量電壓值. 開機(運行)后,顯示一個圖片 ,顯示并播放當前電位器所

22、在位置的電壓;變化 R22 電位器,顯示并播報 R22 電位器變化后的電壓;即只要 R22 電位器改變,系統(tǒng)就能自動測量出 R22 電位器的電壓,并把測量得到的電壓值播報并顯示出來。</p><p><b>  圖4-1 實驗結果</b></p><p><b>  心得與體會</b></p><p>  通過這次課程設計

23、使我更進一步掌握了SPCE061A內部ADC的使用方法,同時熟悉了凌陽單片機試驗箱LCD顯示模塊的使用方法,熟悉了SACM-S480格式的語音播放方式。</p><p>  通過對單片機資料的查閱和應用,更進一步增加了對單片機知識的理解和運用能力。本文列出了系統(tǒng)具體的硬件原理圖,硬件連接方案,軟件流程圖和具體匯編語言程序設計與調試等方面。在這次課程設計的過程中學會了凌陽十六位單片機的基本使用,感受到了熟練掌握它對

24、于自動化專業(yè)的同學的重要性??傮w來說這次的科研實踐很成功,達到了預想的目的,學到了知識,提高了能力,完成了任務。在此感謝指導老師的悉心教導,改正了很多不曾發(fā)現(xiàn)的問題,為即將的畢業(yè)設計打下了基礎。</p><p><b>  參考文獻</b></p><p>  [1]杜剛. 16位單片機原理及應用學習與實驗指導[M].北京:中國電力出版社,2008.12.</p

25、><p>  [2]羅亞飛.凌陽16位單片機應用基礎[M].北京:北京航空航天大學出版社,2003.12.</p><p>  [3]李曉白.凌陽16位單片機C語言開發(fā)[M].北京:北京航空航天大學出版社,2006.7.</p><p>  [4]李朝青.單片機原理及接口技術(修訂版)[M].北京:北京航空航天大學出版社,1998.5.</p><

26、p><b>  附錄 總程序</b></p><p>  //=====================================================================================================</p><p>  // 工程名稱:0~3V電壓測量表</p><p>

27、;  // 功能描述: </p><p>  // 0~3V電壓測量表</p><p>  // 采集電壓經(jīng)LCD顯示出來,并語音提示電壓值 </p><p>  // 涉及的庫:CMacro1016.lib</p><p>  // SacmV26e.l

28、ib</p><p>  // 組成文件:main.c/SPLC501User.c</p><p>  //ISR.asm/hardware.asm/SPLC501Driver_IO.asm/DataOSforLCD.asm</p><p>  // 480.h/480.inc/hardware.h/hardware.inc</p&g

29、t;<p>  //SPLC501Driver_IO.inc/SPLC501User.h/SPCE061A.h/SPCE061A.inc</p><p>  //硬件連接:選擇IOA0口為AD輸入</p><p>  // LCD數(shù)據(jù)IOA8-IOA15,AOP:IOB4,R/W:IOB5,EP:IOB6,片選由IOB9提供</p&

30、gt;<p>  // 注意:拔掉usb的數(shù)據(jù)線 </p><p>  // 維護記錄:2005-10-17</p><p>  //====================================================================================================</p

31、><p>  //========================================================================</p><p>  //文件名稱:main.c</p><p>  //功能描述:采集電壓經(jīng)LCD顯示出來,并語音提示電壓值 </p><p>  //維護記錄:2005

32、-10-17v1.0</p><p>  //========================================================================</p><p>  #include "VolMeasure.h" //定義了一個結構體</p><p

33、>  #include "MM.h"</p><p>  #include "SPLC501User.h"</p><p>  #include "SPCE061A.h"</p><p>  unsigned int AD_Read(void);</p><p>  void

34、PlayS480(int Result);</p><p>  //========================================================================</p><p>  //語法格式:int main(void)</p><p>  //實現(xiàn)功能:主程序</p><p>

35、<b>  //參數(shù):無</b></p><p>  //返回值:int 無意義</p><p>  //========================================================================</p><p>  int main(void)</p><p&

36、gt;<b>  {</b></p><p>  int i=0,j=0,k=0,m;</p><p>  float fVolVal;</p><p>  int uiVolFlag=0,uiVolFlagOne=0;</p><p>  long int uiVolFlagHow=0;</p><

37、p>  unsigned int uiData;</p><p>  long int liDataVol;</p><p>  struct ST_VolValude VolValude; //0-3。3V電壓表服務結構</p><p>  VolValude.VolTureValudeB=7;

38、 //初始化電壓采集值</p><p>  LCD501_Init(0x00); //初始化LCD</p><p>  LCD501_SetPaintMode(4); //設置LCD顯示圖象模式為取反疊加模式</p><p>  

39、LCD501_ClrScreen(0); //清屏</p><p>  LCD501_Bitmap(0,0,(unsigned int *)encoding_00); //顯示開機圖片</p><p>  fVolVal=0.0;</p><p>  while(1)

40、 //主循環(huán)</p><p><b>  {</b></p><p>  *P_DAC_Ctrl = 0;</p><p>  *P_ADC_Ctrl = C_ADCE+C_MIC_DIS+C_AGCN+C_DAC_OUT3mA+C_VEXTREF_DIS+C_V2VREFB_DIS; &l

41、t;/p><p>  uiData = *P_ADC_LINEIN_Data; </p><p>  while((*P_ADC_MUX_Ctrl&0x8000)!= 0x8000); </p><p>  *P_ADC_MUX_Ctrl=C_ADC_CH1;</p><p>  /

42、/播放語音后會改變P_ADC_Ctrl的設置</p><p>  uiData=AD_Read(); //丟掉第一個數(shù)</p><p><b>  j=0;</b></p><p>  for(i=0;i<20;i++)

43、 //采20個數(shù)據(jù)到VolValude.VolValudeA[j]</p><p><b>  {</b></p><p>  *P_Watchdog_Clear=C_WDTCLR;</p><p>  uiData=AD_Read();</p><p>  VolValude.VolValudeA[

44、j]= uiData;</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  uiVolFlagOne=0xff;</p><p>  uiVolFlag=0;</p><p><b>  j=0;</b&g

45、t;</p><p><b>  uiData=0;</b></p><p>  liDataVol=0;</p><p>  for(i=0;i<20;i++)</p><p><b>  {</b></p><p>  liDataVol=liDataVol+Vol

46、Valude.VolValudeA[j];</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  uiData=liDataVol/20; //取20個數(shù)據(jù)的平均值,以減少誤差</p><p>

47、  VolValude.VolTureValudeA=(float)uiData*3.3/0xffc0;</p><p><b>  //得到電壓值</b></p><p>  fVolVal=VolValude.VolTureValudeB-VolValude.VolTureValudeA;</p><p>  if(fVolVal<0

48、.1&&fVolVal>(-0.1)) //和前一次數(shù)據(jù)比較,有變化更新顯示和語音提示</p><p><b>  {</b></p><p><b>  if(k==0) </b></p><p><b>  {</b></p>&

49、lt;p><b>  k++;</b></p><p><b>  }</b></p><p><b>  else k++;</b></p><p><b>  } </b></p><p><b>  else</b><

50、;/p><p><b>  { </b></p><p>  k=0; //取得要在LCD上顯示的數(shù)據(jù),存入VolValude.LCD[j]</p><p>  VolValude.VolTureValudeB=VolValude.VolTureValu

51、deA;</p><p>  uiVolFlagHow=VolValude.VolTureValudeA*10000;</p><p>  VolValude.LCD[0]=uiVolFlagHow/10000%10;</p><p>  VolValude.LCD[1]=uiVolFlagHow/1000%10;</p><p>  Vol

52、Valude.LCD[2]=uiVolFlagHow/100%10;</p><p>  VolValude.LCD[3]=uiVolFlagHow/10%10;</p><p>  VolValude.LCD[4]=uiVolFlagHow%10;</p><p><b>  //LCD數(shù)據(jù)更新</b></p><p>

53、;  m = LCD501_GetPaintMode();//獲取當前圖象疊加模式</p><p>  LCD501_SetPaintMode(2);//設置為清除模式</p><p>  LCD501_Rectangle(68,40,127,56,PAINT_SOLID);//清除數(shù)據(jù)顯示區(qū)</p><p>  LCD501_SetP

54、aintMode(m);//圖象疊加模式恢復</p><p>  //////////////////////////////////////////////////顯示AD轉換數(shù)值以及語音播報結果</p><p>  LCD501_PutChar(68,40,('0'+VolValude.LCD[0])); &

55、lt;/p><p>  LCD501_PutChar(76,40,'.'); </p><p>  PlayS480(VolValude.LCD[0]);</p><p>  PlayS480(10);</p><p>  LCD501_PutChar(78,40,('0'+VolValude.LCD[1]))

56、;</p><p>  PlayS480(VolValude.LCD[1]);</p><p>  LCD501_PutChar(88,40,('0'+VolValude.LCD[2]));</p><p>  PlayS480(VolValude.LCD[2]);</p><p>  LCD501_PutChar(98

57、,40,('0'+VolValude.LCD[3]));</p><p>  PlayS480(VolValude.LCD[3]);</p><p>  LCD501_PutChar(108,40,('0'+VolValude.LCD[4]));</p><p>  PlayS480(VolValude.LCD[4]);</

58、p><p>  LCD501_PutChar(116,40,'V');</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //=============

59、================================================ </p><p>  // 語法格式: void AD();</p><p>  // 實現(xiàn)功能:數(shù)據(jù)采集</p><p>  // 參數(shù): 無</p><p>  // 返回值: bData-采得的數(shù)據(jù)</

60、p><p>  //=============================================================</p><p>  unsigned int AD_Read(void)</p><p><b>  {</b></p><p>  unsigned int bData;</

61、p><p>  while(!(*P_ADC_MUX_Ctrl&0x8000));//等待采樣完成</p><p>  bData=*P_ADC_LINEIN_Data; </p><p>  bData = bData&0xffc0;</p><p>  return bData;</p><p>&

62、lt;b>  }</b></p><p>  //============================================================= </p><p>  // 語法格式: void PlayS480(int Result);</p><p>  // 實現(xiàn)功能:語音播放</p><

63、;p>  // 參數(shù): int Result-要播放的段</p><p>  // 返回值: 無</p><p>  //=============================================================</p><p>  void PlayS480(int Result)</p>

64、<p><b>  {</b></p><p>  SACM_S480_Initial(1); //播放初始化,來自于SacmV26e.lib</p><p>  SACM_S480_InitQueue();</p><p>  SACM_S480_Play(Result, 3, 3);<

65、;/p><p>  while((SACM_S480_Status()&0x0001) != 0) //填充隊列播放,來自于SacmV26e.lib</p><p><b>  {</b></p><p>  SACM_S480_ServiceLoop();</p><p>  *P_Watchdog_Clear

66、=C_WDTCLR;</p><p><b>  }</b></p><p>  SACM_S480_Stop(); //停止播放,來自于SacmV26e.lib</p><p>  __asm("FIQ OFF"); </p><p><

溫馨提示

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

評論

0/150

提交評論