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

下載本文檔

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

文檔簡介

1、<p><b>  單片機原理及應用</b></p><p><b>  課程設計報告</b></p><p>  設計課題: 單片機控制步進電機 </p><p>  專業班級: 信工091班 </p><p>  學生姓名: *

2、 </p><p>  指導教師: </p><p>  2012 年 5 月</p><p><b>  目 錄</b></p><p><b>  目 錄1</b></p><p><b>  1

3、設計任務書2</b></p><p>  1.1 基本設計要求2</p><p>  1.2 選作項目2</p><p><b>  2 設計闡明3</b></p><p><b>  2.1設計內容3</b></p><p><b>  2.

4、2設計要求3</b></p><p>  2.3設備及工作環境3</p><p>  3 系統方案整體設計4</p><p>  3.1 設計思路4</p><p><b>  4 硬件設計6</b></p><p>  4.1 系統硬件設計6</p><

5、;p>  4.1.1 最小單片機系統6</p><p>  4.1.2 鍵盤設計6</p><p>  4.2 系統工作原理論述7</p><p><b>  5 軟件設計9</b></p><p>  5.1 分析論證9</p><p>  5.1.1 步進電機運行驅動模塊9&

6、lt;/p><p>  5.1.2 溫度采集模塊9</p><p>  5.1.3 主函數模塊9</p><p>  5.1.4 整體功效9</p><p>  5.2 程序流程圖10</p><p>  5.3程序清單11</p><p>  6 調試過程及分析18</p>

7、<p><b>  7 設計總結19</b></p><p>  參 考 文 獻20</p><p><b>  1 設計任務書</b></p><p>  1.1 基本設計要求</p><p> ?。?)用萬能板、主芯片AT89S52、35BYJ412步進電機、BLN2003以及

8、其他周圍原件芯片完成實驗設計。</p><p> ?。?)程序的首地址應使目標機可以直接運行,即從0000H開端。在主程序的開端部分必須設置一個合適的棧底。程序放置的地址須持續且靠前,不要在中間留下大批的空間地址,以使目標機可以應用較少的硬件資源。</p><p> ?。?)采用單片機控制一個三相單三拍的步進電機工作。步進電機的旋轉方向由正反轉控制信號控制。步進電機的步數由鍵盤輸入,可輸入

9、的步數分別為3、6、9、12、15、18、21、24和27步,且鍵盤具有鍵盤鎖功能,當鍵盤上鎖時,步進電機不接受輸入步數,也不會運轉。只有當鍵盤鎖打開并輸入步數時,步進電機才開始工作。</p><p> ?。?)電機運轉的時候有正轉和反轉指示燈指示。</p><p> ?。?)電機在運轉過程中,如果過熱,則電機停止運轉,同時紅色指示燈亮,同時警報響。本題目的關鍵之處是:如何生成控制步進電機

10、的脈沖序列。</p><p><b>  1.2 選作項目</b></p><p>  1、用單片機(AT89S52)為主芯片設計電路來控制步進電機。</p><p>  2、設三個自鎖按鍵,分別作開關鍵盤、左轉、右轉控制。</p><p>  3、設9個觸電按鍵分別控制輸入的步數為3、6、9、12、15、18、21、2

11、4和27步。</p><p>  4、設置一片LCD12864顯示器實時顯示步進電機工作狀態,并提示用戶步操作。</p><p><b>  2 設計闡明</b></p><p><b>  2.1設計內容</b></p><p>  用ZY15MCU12BD型綜合單片機實驗箱仿真實現控制步進電機集

12、采問過程。</p><p><b>  2.2設計要求</b></p><p> ?。?)采用單片機控制一個三相單三拍的步進電機工作。步進電機的旋轉方向由正反轉控制信號控制。步進電機的步數由鍵盤輸入,可輸入的步數分別為3、6、9、12、15、18、21、24和27步,且鍵盤具有鍵盤鎖功能,當鍵盤上鎖時,步進電機不接受輸入步數,也不會運轉。只有當鍵盤鎖打開并輸入步數時,

13、步進電機才開始工作。</p><p> ?。?)電機運轉的時候有正轉和反轉指示燈指示。</p><p> ?。?) 電機在運轉過程中,如果過熱,則電機停止運轉,同時紅色指示燈亮,同時警報響。</p><p> ?。?) 上機調試程序。</p><p> ?。?) 寫出設計報告。</p><p>  2.3設備及工作環境

14、</p><p>  (1) 硬件:AT89S52單片機一片、35BYJ412步進電機一臺、ISP下載器一個、LCD12864顯示器、溫度傳感器18B20芯片。</p><p>  (2) 軟件:Windows操縱系統、Keil C51軟件。</p><p>  3 系統方案整體設計</p><p><b>  3.1 設計思路&l

15、t;/b></p><p>  步進電機的不同驅動方式,都是在工作時,脈沖信號按一定順序輪流加到三相繞組上,從而實現不同的工作狀態。由于通電順序不同,其運行方式有三相單三相拍、三相雙三拍和三相單、雙六拍三種(注意:上面“三相單三拍”中的“三相”指定子有三相繞組;“拍”是指定子繞組改變一次通電方式;“三拍”表示通電三次完成一個循環?!叭嚯p三拍”中的“雙”是指同時有兩相繞組通電)。</p>&l

16、t;p> ?。?)三相單三拍運行方式:下頁圖所示為反應式步進電動機工作原理圖,若通過脈沖分配器輸出的第一個脈沖使A相繞組通電,B,C相繞組不通電,在A相繞組通電后產生的磁場將使轉子 上產生反應轉矩,轉子的1、3齒將與定子磁極對齊,如果圖(a)所示。第二個脈沖到來,使B相繞組通電,而A、C相繞組不通電;B相繞組產生的磁場將 使轉子的2、4齒與B相磁極對齊,如圖(b)所示,與圖(a)相比,轉子逆時針方向轉動了一個角度。第三個脈沖到來后

17、,是C相繞組通電,而 A、B相不通電,這時轉子的1、3齒會與C組對齊,轉子的位置如圖(c)所示,與圖(b)比較,又逆時針轉過了一個角度。</p><p>  圖 反應式步進電機工作原理圖</p><p>  當脈沖不斷到來時,通過分配器使定子的繞組按著A相--B相--C相--A相……的規律不斷地接通與斷開,這時步進電動機的轉子就連續不停地一步步的逆時 針方向轉動。如果改變步進電動機的轉動

18、方向,只要將定子各繞組通電的順序改為A相--C相--B相--A相,轉子轉動方向即改為順時針方向。</p><p>  單三拍分配方式時,步進電動機由A相通電轉換到B相同點,步進電動機的轉子轉過一個角度,稱為一步。這時轉子轉過的角度是30度。步進電動機每一步轉過的角度稱為步距角。</p><p> ?。?)三相雙三拍運行方式三相雙三拍運行方式:每次都有兩個繞組通電,通電方式是AB--BC--

19、CA--AB……,如果通電順序改為AB--CA--BC--AB……則步進電機反轉。雙三拍分配方式時,步進電動機的步距角也是30度</p><p> ?。?)三相單,雙六拍運行方式:三相六拍分配方式就是每個周期內有六個通電狀態。這六中通電狀態的順序可以使A--AB--B--BC--C--CA--A……或者A-- CA--C--BC--B--AB--A……六拍通電方式中,有一個時刻兩個繞組同時通電,這是轉子齒的位置將

20、位于通電的兩相的中間位置。在三相六拍分配 方式下,轉子每一步轉過的角度只是三相三拍方式下的一半,步距角是15度。</p><p>  單三拍運行的突出問題是每次只有一相繞組通電,在轉換過程中,一相繞組斷電,另一相繞組通電,容易發生失步;另外單靠一相繞組通電吸引轉子,穩定性不好,容易在平衡位置附近震蕩,故用的較少。</p><p>  雙三拍運行的特點是每次都有兩相繞組通電,且在轉換過程中始

21、終有一相繞組保持通電狀態,因此工作穩定,且步距角與單三拍相同。</p><p>  六拍運行方式轉換時始終有一相繞組通電,且步距角較小,故工作穩定性好,但電源較復雜,實際應用較多。</p><p><b>  4 硬件設計</b></p><p>  4.1 系統硬件設計</p><p>  4.1.1 最小單片機系統&

22、lt;/p><p>  5V電源:給系統供電。</p><p>  復位電路:程序跑飛時復位電路可以使程序從新執行,相當于電腦的重啟。</p><p>  晶振:給單片機運行提供時鐘。比如電腦的2.2GHz頻率。</p><p>  EA接高電平:表示運行內部程序存儲器下載的程序。</p><p>  P0口接排阻:P0口

23、開漏結構,使用時一般接排阻拉高電平。</p><p>  4.1.2 鍵盤設計</p><p>  該電路中采用獨立鍵盤工作方式,共設有12個按鍵,分別提供3、6、9、12、15、18、21、24布局選擇功能、鍵盤鎖功能以及步進電機轉動方向選擇功能。其中有程序決定起作用。</p><p>  4.2 系統工作原理論述</p><p>  該系

24、統的工作核心CPU為ATMEL公司生產的AT89S52芯片將多種功能的8位CPU與FPEROM(快閃可編程/擦除只讀存儲器)結合在一個芯片上,是一種低功耗、高性能的CMOS控制器,為很多嵌入式控制應用提供了非常靈活而又價格適宜的方案,其性能價格比遠高于同類芯片。它與MCS-51指令系統兼容,片內FPEROM允許對程序存儲器在線重復編程,也可用常規的EPROM編程器編程,可循環寫入/擦除1000次。89S52內含4KB的FPEROM,一般

25、的EEPROM的字節擦除時間和寫入時間基本上均為10ms,對于任一個實時控制系統來說,這樣長的時間是不可能在線修改程序的。</p><p>  CPU為Atmel公司生產的89C51/89C52/89C55等。出廠所配晶振頻率為11.0592MH,每個機器周期為1.085us,用戶更換晶振以提高速度;</p><p>  存貯器為64K,前4K/8K20K在CPU內部,其它程序在EPR0M

26、27512中;</p><p>  數據存貯器為32K(62256),地址為8000—FFFFH;</p><p> ?、?O擴展8155,片內RAM地址∶200O-20FFH ;</p><p>  8155命令口地址為∶2100H ;</p><p>  A口地址∶21O1H B口地址:2102H C口地址:2103H ;</p&g

27、t;<p>  T低八位∶2104H T高八位∶2105H ;</p><p>  多路模擬開關的使用∶ </p><p>  IN0∶P1=0F8H IN4:P1=0FCH IN1∶P1=0F9H IN5:P1=OFDH </p><p>  IN2∶P1=0FAH IN5:P1=0FEH IN3∶P1=0FBH IN7:P1=0FF

28、H </p><p>  不掉電數據存貯器為∶500EH-507FH ;</p><p>  控制板∶160x1O9(mm) 供電∶+5V300mA +12V100mA -12V100mA ;</p><p>  AT89C51是一種低功耗、高性能的片內含有4KB快閃可編程/擦除只讀存儲器(FPEROM-Flash Programmable and Eraseabl

29、e Read Only Memory)的8位CMOS微控制器,使用高密度、非易失存儲技術制造,并且與80C51引腳和指令系統完全兼容;</p><p><b>  主要性能: </b></p><p>  與MCS-51 微控制器產品系列兼容;</p><p>  片內有4KB可在線重復編程的快閃擦寫存儲器 。</p><p

30、><b>  引腳簡介:</b></p><p><b>  整體介紹:</b></p><p>  該系統采用的芯片還有:DS18B20溫度傳感器、ULN2003A以及MP28GA四相五線步進電機,并且步進電機在雙八拍的方式下工作,步矩為 5.625° ,步進電機的旋轉方向由正反轉控制信號控制。步進電機的步數由鍵盤輸入,可通過獨

31、立鍵盤S1~S9輸入的步數分別為3、6、9、12、15、18、21、24和27步對應的角度為16.875°、33.725°、……、151.875°,且鍵盤S10具有鍵盤鎖功能,當鍵盤上鎖時,步進電機不接受輸入步數,也不會運轉。只有當鍵盤鎖打開,選擇運轉方向并且輸入步數時,步進電機才開始工作。</p><p>  電機運轉的時候有正轉指示燈D2和反轉指示燈D3指示。</p>

32、<p>  電機在運轉過程中用溫度傳感器采集步進電機外表溫度(可設置),如果過熱,則電機停止運轉,同時紅色指示燈亮,同時蜂鳴器警報響。</p><p><b>  5 軟件設計</b></p><p><b>  5.1 分析論證</b></p><p>  此步進電機控制電路設計與實現,主要采用了ULN20

33、03A驅動芯片,溫度傳感器芯片DS18B20芯片,獨立鍵盤等,包含步進電機運行驅動,溫度采集,主函數三大功效模塊。</p><p>  5.1.1 步進電機運行驅動模塊</p><p>  由于該系統中沒有完全使用I/O端口,所以采用了獨立鍵盤的工作方式,系統工作時,鍵盤控制的I/O口處于高電平狀態,當按鍵按下時觸發低電平,驅動程序實時監測并立即響應執行相應工作。</p>&

34、lt;p>  5.1.2 溫度采集模塊</p><p>  該模塊的重要功效是對步進電機的外表采集溫度,并且對已設定好的數值進行比較,從而確定機身溫度是否過高,正常時電機正常轉動,當溫度過高時電機不再轉動,并且蜂鳴器報警,紅燈點亮。</p><p>  5.1.3 主函數模塊</p><p>  該模塊重要功效是調動溫度采集函數、步進電機函數中函數,實現模塊化

35、編程。</p><p>  5.1.4 整體功效</p><p>  AT89S52芯片控制ULN2003A芯片驅動步進電機,掃描鍵盤輸入運行狀態以及運轉步數,當電機外表溫度超過32℃是電機停止轉動,并且報警!</p><p><b>  5.2 程序流程圖</b></p><p>  主程序流程圖如圖所示:</p

36、><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p>  否

37、 </p><p><b>  圖2 程序流程圖</b></p><p><b>  5.3程序清單</b></

38、p><p><b>  步進電機驅動函數:</b></p><p><b>  //BJDJ.h</b></p><p>  #ifndef _BJDJ_H_</p><p>  #define _BJDJ_H_ </p><p>  #include <reg52.h

39、> </p><p>  #include <intrins.h> </p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit k1=P1^0;</p><p&

40、gt;  sbit k2=P1^1;</p><p>  sbit k3=P1^2;</p><p>  sbit k4=P1^3;</p><p>  sbit k5=P1^4;</p><p>  sbit k6=P1^5;</p><p>  sbit k7=P1^6;</p><p> 

41、 sbit k8=P1^7;</p><p>  sbit k9=P0^0;</p><p>  sbit k10=P0^1;</p><p>  sbit k11=P0^2;</p><p>  sbit k12=P0^3;</p><p>  void key_scan();</p><p>

42、;  void motor_turn();</p><p>  void motor_stop();</p><p><b>  #endif</b></p><p><b>  //BJDJ.c</b></p><p>  #include"BJDJ.h"</p>

43、<p>  uchar code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};</p><p>  uchar code REV[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};</p><p>  uchar rate ;</p><p>  extern

44、uchar i=0; </p><p>  /********************************************************/ </p><p>  /* 延時

45、 </p><p>  /********************************************************/</p><p>  void delay(uchar x)</p><p>  { </p><p>  uchar i,j;</

46、p><p>  for(i=0;i<x;i++);</p><p>  for(j = 0 ; j<110 ; j++) ;</p><p><b>  }</b></p><p>  /********************************************************/</p

47、><p><b>  /*步進電機正轉</b></p><p>  /********************************************************/</p><p>  void motor_ffw(uchar x)</p><p><b>  { </b><

48、/p><p>  uchar i,j;</p><p>  for (j=0; j<x; j++) //轉1*n圈 </p><p><b>  { </b></p><p>  for (i=0; i<8; i++) //一個周期轉45度</p><p>&l

49、t;b>  {</b></p><p>  P2 = FFW[i]; //取數據</p><p>  delay(150); //調節轉速</p><p><b>  }</b></p><p><b>  }</b></p>

50、<p><b>  }</b></p><p>  /********************************************************/</p><p><b>  /*</b></p><p><b>  /*步進電機反轉</b></p>&l

51、t;p>  /********************************************************/</p><p>  void motor_rev(uchar x)</p><p><b>  { </b></p><p>  uchar i,j;</p><p>  for (j

52、=0; j<x; j++) //轉1*n圈 </p><p><b>  { </b></p><p><b>  //退出此循環程序</b></p><p>  for (i=0; i<8; i++) //一個周期轉45度</p><p><b>

53、  {</b></p><p>  P2 = REV[i]; //取數據</p><p>  delay(150); //調節轉速</p><p><b>  }</b></p><p><b>  }</b></p><p&g

54、t;<b>  }</b></p><p>  /*******************************************************</p><p><b>  *鍵盤掃描</b></p><p>  ***********************************************

55、*******/</p><p>  void key_scan()</p><p><b>  {</b></p><p><b>  i=0;</b></p><p><b>  if(k1==0)</b></p><p><b>  {&

56、lt;/b></p><p><b>  delay(5);</b></p><p>  if(k1==0)i=24;</p><p><b>  }</b></p><p><b>  if(k2==0)</b></p><p><b>

57、;  {</b></p><p><b>  delay(5);</b></p><p>  if(k2==0)i=46;</p><p><b>  }</b></p><p><b>  if(k3==0)</b></p><p><

58、;b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k3==0)i=72;</p><p><b>  }</b></p><p><b>  if(k4==0)</b></p><p&g

59、t;<b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k4==0)i=96;</p><p><b>  }</b></p><p><b>  if(k5==0)</b></p>&l

60、t;p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k5==0)i=120;</p><p><b>  }</b></p><p><b>  if(k6==0)</b></p&g

61、t;<p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k6==0)i=144;</p><p><b>  }</b></p><p><b>  if(k7==0)</b>&l

62、t;/p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k7==0)i=168;</p><p><b>  }</b></p><p><b>  if(k8==0)</b

63、></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k8==0)i=192;</p><p><b>  }</b></p><p><b>  if(k9==0)

64、</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k9==0)i=216;</p><p><b>  }</b></p><p><b>  }&l

65、t;/b></p><p>  /********************************************************</p><p><b>  *電機轉動</b></p><p>  ********************************************************/</

66、p><p>  void motor_turn()</p><p><b>  {</b></p><p>  if(k10==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><

67、;p>  if(k10==0)P2=P2&0xf0;</p><p><b>  }</b></p><p>  if(k11==0&&k12==1&&k10==1)</p><p><b>  { </b></p><p><b>  de

68、lay(5);</b></p><p>  if(k11==0&&k12==1&&k10==1)</p><p>  motor_ffw(i);</p><p><b>  }</b></p><p>  if(k12==0&&k11==1&&

69、k10==1)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(k12==0&&k11==1&&k10==1)</p><p>  motor_rev(i);</p><p&

70、gt;<b>  }</b></p><p><b>  }</b></p><p>  void motor_stop()</p><p><b>  {</b></p><p>  motor_rev(0);</p><p><b>

71、;  }</b></p><p>  溫度傳感器18B20驅動函數:</p><p>  //DS18B20.h</p><p>  #ifndef __DS18B20_H__</p><p>  #define __DS18B20_H__</p><p>  #include<reg52.h>

72、</p><p>  #include < intrins.h ></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  extern uchar T;</p><p>  sbit DQ=P2

73、^7; //溫度輸入口</p><p>  sbit bell=P0^4;</p><p>  sbit led1=P0^7;</p><p>  void delay2(uint t);</p><p>  void ow_reset(void);</p><p

74、>  void write_byte(uchar val);</p><p>  void read_temp();</p><p>  void work_temp();</p><p><b>  #endif</b></p><p>  //DS18B20.c</p><p>  #i

75、nclude"DS18B20.h"</p><p>  extern uchar data temp_data[2]={0x00,0x00};</p><p>  uchar flag;</p><p>  char presence=1;</p><p><b>  uchar T;</b><

76、/p><p>  /***********11微秒延時函數**********/</p><p>  void delay2(uint t)</p><p><b>  {</b></p><p>  for(;t>0;t--);</p><p><b>  }</b>&l

77、t;/p><p>  /***********18B20復位函數**********/</p><p>  void ow_reset(void)</p><p><b>  {</b></p><p>  presence=1;</p><p>  while(presence)</p>

78、<p><b>  {</b></p><p>  while(presence)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  DQ=0; //</p><p>  delay

79、2(50); // 550us</p><p>  DQ=1; // </p><p>  delay2(6); // 66us</p><p>  presence=DQ; // presence=0繼續下一步</p><p><b>  }</b></p><p>  delay2(45

80、); //延時500us</p><p>  presence = ~DQ;</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p><b>  } </b></p><p>  /*********

81、*18B20寫命令函數*********/</p><p>  void write_byte(uchar val)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for (i=8; i>0; i--) </p>

82、<p><b>  {</b></p><p><b>  DQ=1;</b></p><p>  _nop_();_nop_(); </p><p><b>  DQ = 0;</b></p><p>  _nop_();_nop_();_nop_();_nop

83、_();_nop_();//5us</p><p>  DQ = val&0x01; //最低位移出</p><p>  delay2(6); //66us</p><p>  val=val/2; //右移一位</p><p><b>  }</b></p&

84、gt;<p><b>  DQ = 1;</b></p><p>  delay2(1); </p><p><b>  }</b></p><p>  /*********18B20讀1個字節函數********/</p><p>  uchar read_byte(void)<

85、;/p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  uchar value = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></

86、p><p><b>  DQ=1;</b></p><p>  _nop_();_nop_();</p><p>  value>>=1;</p><p>  DQ = 0; //</p><p>  _nop_();_nop_();_nop_();_nop_();

87、 //4us</p><p><b>  DQ = 1;</b></p><p>  _nop_();_nop_();_nop_();_nop_(); //4us </p><p>  if(DQ)value|=0x80;</p><p>  delay2(6); //66us</p&g

88、t;<p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p><p><b>  }</b></p><p>  /***********讀出溫度函數**********/</p

89、><p>  void read_temp()</p><p><b>  {</b></p><p>  ow_reset(); //總線復位</p><p>  write_byte(0xCC); // 發Skip ROM命令</p><p>  write_byte(0xBE); /

90、/ 發讀命令</p><p>  temp_data[0]=read_byte(); //溫度低8位</p><p>  temp_data[1]=read_byte(); //溫度高8位</p><p>  ow_reset();</p><p>  write_byte(0xCC); // Skip ROM</p><

91、p>  write_byte(0x44); // 發轉換命令</p><p><b>  }</b></p><p>  /***********溫度數據處理函數**********/</p><p>  void work_temp()</p><p><b>  {</b></p&g

92、t;<p>  T=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4);</p><p><b>  }</b></p><p><b>  主函數:</b></p><p><b>  //main.c<

93、/b></p><p>  #include"DS18B20.h"</p><p>  #include"BJDJ.h"</p><p>  void main()</p><p><b>  {</b></p><p><b>  whil

94、e(1)</b></p><p><b>  {</b></p><p><b>  T=0;</b></p><p><b>  P1=0xff;</b></p><p><b>  P0=0x0f;</b></p><p

95、><b>  led1=1;</b></p><p>  ow_reset(); // 開機先轉換一次</p><p>  write_byte(0xCC); // Skip ROM</p><p>  write_byte(0x44); // 發轉換命令</p><p>  read_temp();

96、 //讀出18B20溫度數據</p><p>  work_temp(); //處理溫度數據</p><p>  key_scan();</p><p><b>  if(T>31)</b></p><p><b>  {</b></p><

97、p>  motor_stop();</p><p><b>  led1=0;</b></p><p><b>  bell=1;</b></p><p>  delay2(1000);</p><p><b>  }</b></p><p>&l

98、t;b>  else </b></p><p><b>  {</b></p><p><b>  led1=1;</b></p><p><b>  bell=0;</b></p><p>  motor_turn();</p><p&g

99、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  6 調試過程及分析</b></p><p>  編寫好的源程序在 Keil 編譯后呈現很多錯誤,這些錯誤有很多時平時

100、的實驗碰到過的,例如:字母開頭忘加0,零和字母O弄混雜了,有些標號用了幾次,CJNE寫成了CJNZ等等,幸好這些錯誤在平時的實驗中碰到了,所以改錯誤很輕易,。除了常見的錯誤外,還有幾條錯誤時在前幾次實驗都沒有出現過,如:AJMP跳轉指令跳不回指定的地位,是由于跳轉的長度大于AJMP跳轉的長度,最后只好用LJMP跳轉后才跳到指定的地位。在前期的程序編寫和幾天的上機調試,使我又獲得了很多新的知識,由于前期編寫程序時查了很多材料學到了很多知識

101、,這幾天的調試更時獲得很新的知識,由于程序中又很多的錯誤,為了修正錯誤必須看書或向別人請教,在這個過程中無意識的獲得了很多知識。同時也使我對單片機更感興趣了,這點我感到很重要,相信這會對以后的學習有所幫助。</p><p><b>  7 設計總結</b></p><p>  本次課程設計是用ZY15MCU12BD綜合單片機實驗箱及串口電路設計單片機驅動步進電機電路,

102、經過兩個星期的調試,成果滿足基本設計請求,驗證無誤。設計重要用到了多種芯片,程序也比較長,比較麻煩,同時也碰到了不少艱苦,尤其是關于校時模塊和時鐘與秒表之間切換的設計實現。關于顯示模塊,在以前的實驗中做過,所以題目很輕易解決。</p><p>  通過本次設計,我懂得了時鐘的設計流程,尤其是硬、軟件的設計方法以及鍵盤顯示電路的基礎功效及編程方法和鍵盤電路和顯示電路的一般原理,也進一步了解了8031定時器的應用和中

103、斷CPU程序的編程方法,開辟了思路,,提高了分工協作才能和分析題目,解決題目的能力。</p><p><b>  參 考 文 獻 </b></p><p>  1.張毅剛編著,《單片機原理及應用》高等教育出版社,2010。</p><p>  2. 郭天祥編著,《Altium Designer6.9 PCB設計視頻教程》,2007。</p

104、><p>  3.樓然苗等編著,《51系列單片機設計實例》北京航空航天大學出版社,2006。</p><p>  4.汪道輝編著,《單片機系統設計與實踐》 電子工業出版社 2005。</p><p>  5.譚浩強編著,《C程序設計(第三版)》清華大學出版社 2005。</p><p>  6.王港元編著,《電工電子實踐指導》江西科學技術出版社

溫馨提示

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

評論

0/150

提交評論