單片機課程設計0~3v電壓測量表_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  大慶石油學院課程設計任務書</p><p>  課程 單片機控制系統(tǒng)課程設計 </p><p>  題目 0~3V電壓測量表

2、 </p><p>  專業(yè) 自動化 姓名 鄒建 學號 060601140625 </p><p><b>  主要內容:</b></p><p>  用現(xiàn)有凌陽系列單片機試驗箱編寫一段程序,用以實現(xiàn)測量電壓值并且將獲得的結果顯示在液晶顯示器上,并用語音播報出來

3、。</p><p><b>  基本要求:</b></p><p>  1. 編程要求:主程序利用C語言編寫,中斷服務程序利用匯編語言編寫。 </p><p>  2. 實現(xiàn)功能:實現(xiàn)一個模擬電壓表的功能,要求電壓表能夠測量電壓值,在液晶顯示器上顯示并播報測量電壓值。 </p><p>  3. 實驗現(xiàn)象:開機(運行)后

4、,顯示一個圖片MM.bmp(它的字模數(shù)據(jù)MM.c、MM.在IDE的安裝徑\SPCE061A\example\IntExa\ex10_VoltageMeasureFrom0To3提供),顯示并播放當前電位器所在位置的電壓;變化R22電位器,顯示并播報R22電位器變化后的電壓。</p><p><b>  參考資料</b></p><p>  1. 杜剛 16位單片機原

5、理及應用[M]. 北京 中國電力出版社 2007.9</p><p>  2 杜剛/張東霞 16位單片機原理及應用學習與實驗指導[M]. 北京 中國電力出版社 2008.12</p><p>  3 羅亞飛 凌陽16位單片機應用基礎[M]. 北京 北京航空航天大學出版社 2003.12</p><p>  4 李曉白 凌陽16位單片機C語言

6、開發(fā)[M]. 北京 北京航天航空大學出版社2006.7</p><p>  完成期限 2009.6.29至2009.7.3 </p><p>  指導教師 董長義 董宏麗 </p><p>  專業(yè)負責人 </p><p>  2009年 6月16日</p&

7、gt;<p><b>  目 錄</b></p><p><b>  1系統(tǒng)設計1</b></p><p><b>  1.1設計要求1</b></p><p>  1.1.1編程要求 1</p><p>  1.1.2實現(xiàn)功能1</p>&

8、lt;p>  1.1.3實驗現(xiàn)象1</p><p><b>  1.2設計思路1</b></p><p>  2設計環(huán)境及基本原理1</p><p><b>  2.1設計裝置1</b></p><p><b>  2.2基本原理1</b></p>

9、<p><b>  3系統(tǒng)硬件設計2</b></p><p>  4單片機軟件設計3</p><p>  4.1A/D轉換3</p><p>  4.2串口發(fā)送數(shù)據(jù)4</p><p>  4.3程序流程圖5</p><p>  4.4編寫程序步驟5</p>&

10、lt;p><b>  5總結6</b></p><p><b>  6參考文獻7</b></p><p><b>  7附錄8</b></p><p><b>  第1章 系統(tǒng)設計</b></p><p>  1.1 設計要求 </p&

11、gt;<p>  1.1.1 編程要求:主程序利用C語言編寫,中斷服務程序利用匯編語言編寫。 </p><p>  1.1.2 實現(xiàn)功能:實現(xiàn)一個模擬電壓表的功能,要求電壓表能夠測量電壓值,在液晶顯示器上顯示并播報測量電壓值。 </p><p>  1.1.3 實驗現(xiàn)象:開機(運行)后,顯示一個圖片MM.bmp(它的字模數(shù)據(jù)MM.c、MM.h在IDE的安裝徑\SPCE061A

12、\example\IntExa\ex10_VoltageMeasureFrom0To3提供),顯示并播放當前電位器所在位置的電壓;變化R22電位器,顯示并播報R22電位器變化后的電壓;即只要R22電位器改變,系統(tǒng)就能自動測量出R22電位器的電壓,并把測量得到的電壓值播報并顯示出來。(要求顯示和播報電壓值的精度為小數(shù)點后第四位) </p><p><b>  1.2 設計思路</b><

13、/p><p>  本次設計要求完成基于單片機的電壓測量系統(tǒng)的設計。系統(tǒng)包括數(shù)據(jù)采集A/D轉換模塊,單片機控制模塊和驅動顯示模塊。SPLC501為液晶顯示模組顯示。</p><p>  第2章 設計環(huán)境及基本原理</p><p><b>  2.1 設計裝置</b></p><p>  1. 裝有Windows系統(tǒng)和μ’n

14、SP? IDE仿真環(huán)境的PC機一臺,μ’nSP? 十六位單片機實驗箱一個。 </p><p>  2. 本實驗用到的實驗箱硬件模塊為:SPCE061A核心及周邊電路模塊(包含32個I/O口),LCD顯示模組模塊,雙0~3.3V直流電平輸入電路模塊,兩路音頻輸出電路模塊。 </p><p>  2.2 基本工作原理 </p><p>  本實驗中,通過SPCE061

15、A內部ADC采集數(shù)據(jù),如圖2-1,實驗箱上V3為3.3V,當滑動頭變化時,IOA0口輸入的電壓就隨著變化;當已經(jīng)通過[P_ADC_MUX_Ctrl]啟動轉換,通過[P_ADC_MUX_Ctrl]設置從LINE_IN1輸入時,因為LINE_IN1也就是IOA0,所以IOA0口輸入的電壓變化時,就會送入A/D轉換器變化的值,A/D轉換器采集轉換;通過讀取[P_ADC_MUX_Data]轉換得到數(shù)據(jù),并把這些數(shù)據(jù)計算成電壓值,計算出電壓值的個

16、位、小數(shù)點后第一位、小數(shù)點后第二位、小數(shù)點后第三位、小數(shù)點后第四位,然后把電壓值按從個位到小數(shù)點后第四位的順序播報和顯示。</p><p>  圖2-1 0~3.3V直流電平輸入電路</p><p>  第3章 系統(tǒng)硬件設計</p><p>  硬件連接圖如圖3-1 ,IOA8~IOA15連接SPLC501液晶顯示模塊的D0~D7,IOB4連接AO,IOB5連接R

17、WP,IOB6連接EP,RE連接/RES,IOB9連接/CS,VR、C86和PS跳線都與V3短接,把SPLC501液晶顯示模組的時序選擇為6800時序,即把JP6中所有左右兩排的引針用跳線短接;兩路音頻輸出J8和J13中靠左邊的兩個引針用跳線短接;IOA0連接R22電位器,即用排線把J26的第0號引針和J17(雙0~3V的直流電平輸入電路其中之一)中任一引針連接起來。</p><p>  圖3-1 硬件連接圖&l

18、t;/p><p>  第4章 單片機軟件設計 </p><p>  軟件部分設計要實現(xiàn)2個功能,一個是A/D轉換,另一是把轉換的數(shù)據(jù)通過串口發(fā)送給PC機。</p><p><b>  4.1 A/D轉換</b></p><p>  ADC模塊專用的有4個完整的寄存器:ADC結果高字節(jié)寄存器ADRESH,ADC結果低字節(jié)寄存

19、器ADRESL,0號ADC控制寄存器ADCON0和1號ADC 控制寄存器ADCON1。</p><p>  個是把轉換的數(shù)據(jù)通過串口發(fā)送給PC機。</p><p>  ADCON0的格式如下: </p><p>  其中:ADCS1~ADCS0為A/D轉換時鐘及其頻率選擇位;</p><p>  CHS2~CHS0為A/D轉換模擬通道選擇位;

20、</p><p>  轉換啟動控制位兼做狀態(tài)位;</p><p>  ADON為A/D轉換器開關位。</p><p>  ADCON1的格式如下: 其中:ADFM為A/D轉換轉換結果格式選擇位;PCFG3~PCFG0為A/D轉換引腳功能選擇位。</p><p><b>  A/D轉換流程:</b></p>

21、<p>  1.如果需要A/D中斷功能,開放相應的中斷使能位。</p><p>  2.等待所需要的采樣時間。</p><p>  3.將啟動控制兼狀態(tài)位置1,啟動A/D轉換過程。</p><p>  4.等待A/D轉換完成,可以通過查詢或中斷的方法來判斷。</p><p>  5.讀取A/D轉換結果寄存器對ADRESH:ADRES

22、L,如果需要,對轉換中斷標志清</p><p>  4.2 串口發(fā)送數(shù)據(jù)</p><p>  與串口有關的寄存器除了和中斷有關的寄存器外,我們編寫程序時主要有4個:發(fā)送狀態(tài)兼控制寄存器TXSTA、接收狀態(tài)兼控制寄存器RCSTA、發(fā)送寄存器TXREG、波特率寄存器SPBRG。</p><p>  發(fā)送狀態(tài)兼控制寄存器TXSTA格式如下: </p><

23、;p>  其中:TX9D為發(fā)送數(shù)據(jù)的第9位(如果使用9位數(shù)據(jù)幀結構);</p><p>  TRMT為發(fā)送移位寄存器“空”標志;</p><p>  BRGH為高波特率選擇位(異步方式下使用);</p><p>  SYNC為USART同步/異步模式選擇位;</p><p>  TXEN為發(fā)送使能位;</p><p&

24、gt;  TX9為發(fā)送數(shù)據(jù)長度選擇位;</p><p>  CSRC為時鐘源選擇位(異步方式下未用)。</p><p>  接收狀態(tài)兼控制寄存器RCSTA格式如下: 我們只使用了最高位SPEN(串行口使能端)。</p><p>  發(fā)送寄存器TXREG: TXREG是一個用戶可讀寫的寄存器,每次用戶發(fā)送的數(shù)據(jù)都是通過寫入該緩沖器來實現(xiàn)的。</p>&l

25、t;p><b>  發(fā)送流程:</b></p><p>  1.選擇合適的波特率。</p><p>  2.置SYNC=0及SPEN=1,使USART工作于異步模式。</p><p>  3.如果需要中斷處理功能,置TXIE=1。</p><p>  4.如果要傳送9位數(shù)據(jù),置TX9=1。</p>&

26、lt;p>  5.置TXEN=1,使USART工作于發(fā)送器方式。</p><p>  6.如果選擇傳送第9位數(shù)據(jù),把第9位數(shù)據(jù)置入TX9D。</p><p>  7.把即將發(fā)送的8位數(shù)據(jù)送入TXREG并啟動發(fā)送。 </p><p>  4.3 程序流程圖 </p><p>  主程序流程圖如圖4-1,初始化LCD后,顯示開機圖片MM

27、;進入電壓測量循環(huán):啟動轉換,采集20個轉換數(shù)據(jù)并取平均值,主要是為了減少誤差;計算電壓值;如果和上次電壓值之差小于±0.1V,則電壓沒有變化,返回繼續(xù)采集數(shù)據(jù);如果和上次電壓值之差大于±0.1 V,表示有電壓變化,計算電壓各位(包括個位到小數(shù)點后四位)的數(shù);清屏,顯示圖片MM;播報并顯示電壓值。 </p><p>  圖4-1 主程序流程圖</p><p>  4.4

28、 編寫程序步驟 </p><p>  1. 新建一個工程ex10_VoltageMeasureFrom0To3,新建一個C語言程序main.c。(根據(jù)編程需要,讀者可自行新建其他文件)。 </p><p>  2. 拷貝支持sacmv26e.lib的匯編語言文件hardware.asm和頭文件hardware.h、hardware.inc以及頭文件SPCE061A.h和SPCE061A.

29、inc到ex10_VoltageMeasureFrom0To3工程文件夾。 </p><p>  3. 拷貝語音播放庫sacmv26e.lib和頭文件s480.h、s480.inc到ex10_ VoltageMeasureFrom0To3工程文件夾。 </p><p>  4. 拷貝語音資源到當前工程的文件夾中,并將語音資源加載到工程中;語音資源可在\SPCE061A\example\In

30、tExa\ ex10_VoltageMeasureFrom0To3\voice文件夾中找到。 </p><p>  5. 拷貝SPLC501液晶顯示DataOSforLCD.asm、SPLC501Driver_IO.asm、SPLC501Driver_IO.inc、SPLC501User.c和SPLC501User.h五個LCD驅動程序到ex10_ VoltageMeasureFrom0To3工程文件夾。 <

31、;/p><p>  6. 在IDE集成開發(fā)環(huán)境的Project􀃆Setting􀃆link中鏈接sacmv26e.lib庫到工程中。 </p><p>  7. 添加hardware.asm、DataOSforLCD.asm、SPLC501Driver_IO.asm和SPLC501User.c到工程文件的“Source Files”,添加s480.h、s480

32、.inc、hardware.h、hardware.inc、SPLC501Driver_IO.inc、SPLC501User.h六個頭文件到“Head Files”。 </p><p>  8. 按照程序流程圖編寫程序。 </p><p>  9. Rebuild All。 </p><p>  10. 按照硬件連接圖連接硬件。注意把J17的任一引腳和J26中的第0號

33、引腳連接,把JP3和JP7的所有跳線全部拔掉,以免對I/O口的數(shù)據(jù)造成影響。 </p><p>  11. 下載程序,運行。 </p><p>  12. 調節(jié)R22電位器(雙0~3.3V直流電平輸入電路模塊中下面一個電位器),觀察LCD顯示數(shù)據(jù)和實驗箱播報的數(shù)據(jù),分析是不是和實驗要求相統(tǒng)一。 </p><p><b>  第5章 總結</b>

34、</p><p>  通過這次課程設計使我進一步掌握了SPCE061A內部ADC的使用方法,同時熟悉了凌陽單片機實驗箱LCD顯示模塊的使用方法,熟悉了SACM-S480格式的語音播放方式。最后要感謝在這次設計中給與我?guī)椭幕衾蠋熀投蠋煛?lt;/p><p><b>  參考文獻</b></p><p>  1. 杜剛 16位單片機原理及應用[M

35、]. 北京 中國電力出版社 2007.9</p><p>  2 杜剛/張東霞 16位單片機原理及應用學習與實驗指導[M]. 北京 中國電力出版社 2008.12</p><p>  3 羅亞飛 凌陽16位單片機應用基礎[M]. 北京 北京航空航天大學出版社 2003.12</p><p>  4 李曉白 凌陽16位單片機C語言開發(fā)[M].

36、 北京 北京航天航空大學出版社2006.7</p><p>  5 李朝青 單片機原理及接口技術(修訂版)[M]. 北京 北京航空航天大學出版社 1998.5</p><p><b>  附 錄</b></p><p><b>  程序設計</b></p><p>  #include

37、"VolMeasure.h" //定義了一個結構體</p><p>  #include "MM.h"</p><p>  #include "SPLC501User.h"</p><p>  #include "SPCE061A.h&quo

38、t;</p><p>  int main(void)</p><p><b>  {</b></p><p>  int i=0,j=0,k=0,m;</p><p>  float fVolVal;</p><p>  int uiVolFlag=0,uiVolFlagOne=0;</p

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

40、;/p><p>  VolValude.VolTureValudeB=7; //初始化電壓采集值</p><p>  LCD501_Init(0x00); //初始化LCD</p><p>  LCD501_SetPaintMode(4);

41、 //設置LCD顯示圖象模式為取反疊加模式</p><p>  LCD501_ClrScreen(0); //清屏</p><p>  LCD501_Bitmap(0,0,(unsigned int *)encoding_00); //顯示開機圖片</p><p>  fVolV

42、al=0.0;</p><p>  while(1) //主循環(huán)</p><p><b>  {</b></p><p>  *P_DAC_Ctrl = 0;</p><p>  *P_ADC_Ctrl = C_ADCE+C_MIC

43、_DIS+C_AGCN+C_DAC_OUT3mA+C_VEXTREF_DIS+C_V2VREFB_DIS; </p><p>  uiData = *P_ADC_LINEIN_Data; </p><p>  while((*P_ADC_MUX_Ctrl&0x8000)!= 0x8000); </p><p&g

44、t;  *P_ADC_MUX_Ctrl=C_ADC_CH1;</p><p>  //播放語音后會改變P_ADC_Ctrl的設置</p><p>  uiData=AD_Read(); //丟掉第一個數(shù)</p><p><b>  j=0;</b></p>&l

45、t;p>  for(i=0;i<20;i++) //采20個數(shù)據(jù)到VolValude.VolValudeA[j]</p><p><b>  {</b></p><p>  *P_Watchdog_Clear=C_WDTCLR;</p><p>  uiDa

46、ta=AD_Read();</p><p>  VolValude.VolValudeA[j]= uiData;</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  uiVolFlagOne=0xff;</p><p> 

47、 uiVolFlag=0;</p><p><b>  j=0;</b></p><p><b>  uiData=0;</b></p><p>  liDataVol=0;</p><p>  for(i=0;i<20;i++)</p><p><b>  

48、{</b></p><p>  liDataVol=liDataVol+VolValude.VolValudeA[j];</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  uiData=liDataVol/20;

49、 //取20個數(shù)據(jù)的平均值,以減少誤差</p><p>  VolValude.VolTureValudeA=(float)uiData*3.3/0xffc0;</p><p><b>  //得到電壓值</b></p><p>  fVolVal=VolValude.VolTureValudeB-VolVal

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

51、;</p><p><b>  {</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  else k++;</b></p><p><b>  } &l

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

53、<p>  VolValude.VolTureValudeB=VolValude.VolTureValudeA;</p><p>  uiVolFlagHow=VolValude.VolTureValudeA*10000;</p><p>  VolValude.LCD[0]=uiVolFlagHow/10000%10;</p><p>  VolValu

54、de.LCD[1]=uiVolFlagHow/1000%10;</p><p>  VolValude.LCD[2]=uiVolFlagHow/100%10;</p><p>  VolValude.LCD[3]=uiVolFlagHow/10%10;</p><p>  VolValude.LCD[4]=uiVolFlagHow%10;</p>&l

55、t;p><b>  //LCD數(shù)據(jù)更新</b></p><p>  m = LCD501_GetPaintMode();//獲取當前圖象疊加模式</p><p>  LCD501_SetPaintMode(2);//設置為清除模式</p><p>  LCD501_Rectangle(68,40,127,56,P

56、AINT_SOLID);//清除數(shù)據(jù)顯示區(qū)</p><p>  LCD501_SetPaintMode(m);//圖象疊加模式恢復</p><p>  //////////////////////////////////////////////////顯示AD轉換數(shù)值以及語音播報結果</p><p>  LCD501_PutChar(68,40,(

57、'0'+VolValude.LCD[0])); </p><p>  LCD501_PutChar(76,40,'.'); </p><p>  PlayS480(VolValude.LCD[0]);</p><p>  PlayS480(10);</p><p&

58、gt;  LCD501_PutChar(78,40,('0'+VolValude.LCD[1]));</p><p>  PlayS480(VolValude.LCD[1]);</p><p>  LCD501_PutChar(88,40,('0'+VolValude.LCD[2]));</p><p>  PlayS480(Vo

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

60、);</p><p>  PlayS480(VolValude.LCD[4]);</p><p>  LCD501_PutChar(116,40,'V');</p><p><b>  }</b></p><p><b>  }</b></p><p><

61、;b>  }</b></p><p>  unsigned int AD_Read(void)</p><p><b>  {</b></p><p>  unsigned int bData;</p><p>  while(!(*P_ADC_MUX_Ctrl&0x8000));//等待采

62、樣完成</p><p>  bData=*P_ADC_LINEIN_Data; </p><p>  bData = bData&0xffc0;</p><p>  return bData;</p><p><b>  }</b></p><p>  void PlayS480(int

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

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

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

66、gt;<p><b>  }</b></p><p><b>  目 錄</b></p><p>  第1章 系統(tǒng)設計1</p><p>  1.1 設計要求6</p><p>  1.2 設計思路6</p><p>  第2章 設計環(huán)境及基本原理

67、2</p><p>  2.1 設計裝置2</p><p>  2.2 基本工作原理7</p><p>  第3章 系統(tǒng)硬件設計3</p><p>  第4章 單片機軟件設計4</p><p>  4.1 A/D轉換4</p><p>  4.2 串口發(fā)送數(shù)據(jù)9</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

提交評論