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

下載本文檔

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

文檔簡介

1、<p><b>  單片機原理</b></p><p><b>  實訓說明書</b></p><p>  題 目: 步進電機控制器 </p><p>  學 院: 信息與通信學院 </p><p>  專 業(yè): 電子

2、信息工程 </p><p>  學生姓名: </p><p>  學 號: </p><p><b>  指導教師:</b></p><p>  2012年 12 月 27 日</p><p><b>  

3、摘 要</b></p><p>  步進電動機是一種將電脈沖信號轉換成角位移或線位移的精密執(zhí)行元件,具有快速起動和停止的特點。其驅動速度和指令脈沖能嚴格同步,具有較高的重復定位精度, 并能實現(xiàn)正反轉和平滑速度調節(jié)。它的運行速度和步距不受電源電壓波動及負載的影響, 因而被廣泛應用于數(shù)模轉換、速度控制和位置控制系統(tǒng)。本文在分析了步進電機的驅動特性、斬波恒流細分驅動原理和混合式步進電機驅動芯片ULN2

4、003AN的性能、結構的基礎上,結合AT89C52單片機,設計出了混合式步進電機驅動電路。</p><p>  關鍵詞:步進電機;AT89C52單片機;ULN2003AN驅動。</p><p><b>  Abstract</b></p><p>  Stepping motors is a kind of will convert angul

5、ar displacement or electrical impulses signal line displacement of precision actuator, have fast start and stop characteristics. The driving speed and instructions pulse can strictly synchronization, which has high repos

6、itioning precision, and can realize the positive &negative and smooth adjustable speed. Its operation speed and step distance from supply voltage fluctuation and load effect, which have been widely applied in analog-

7、to-digital conver</p><p>  Key words: Stepping motor; AT89C52 single chip computer; ULN2003AN driver.</p><p><b>  目 錄</b></p><p>  第1章 步進電機的原理介紹2</p><p&

8、gt;  1.1 步進電機的工作原理3</p><p>  1.2 步進電機24BYJ48的相關電氣參數(shù)3</p><p>  1.3 步進電機的基本術語4</p><p>  1.3.1 相數(shù)4</p><p>  1.3.2 拍數(shù)4</p><p>  1.3.3 步距角4</p><

9、;p>  1.3.4 信號分配4</p><p>  第2章 總體設計思路5</p><p>  2.1 方案與設計思路5</p><p><b>  2.2 總框圖5</b></p><p>  第3章 程序設計5</p><p><b>  3.1 主程序5&l

10、t;/b></p><p>  3.2 LCD及檔位顯示程序6</p><p>  3.3正反轉流程圖7</p><p>  3.4啟動與停止流程圖8</p><p>  第4章 硬件設計9</p><p>  4.1 硬件的設計與選取9</p><p>  4.1.1 步進

11、電機的驅動9</p><p>  4.1.2 單片機的選取10</p><p>  4.1.3 液晶LCD1602顯示模塊10</p><p>  4.1.4 按鍵電路設計11</p><p>  4.1.5 時針產(chǎn)生電路11</p><p>  4.2 硬件的總體電路連接12</p><

12、;p>  第5章 調試與故障分析13</p><p>  5.1 軟件編寫及調試13</p><p>  5.2 調試過程及相關顯示結果14</p><p>  5.3 故障分析及解決方法15</p><p>  第6章 心得體會15</p><p>  第7章 參考文獻17</p>

13、<p><b>  附件18</b></p><p><b>  系統(tǒng)原理圖19</b></p><p><b>  元器件清單19</b></p><p><b>  PCB板19</b></p><p><b>  源程序

14、清單28</b></p><p>  第1章 步進電機的原理介紹</p><p>  1.1 步進電機的工作原理</p><p>  步進電機是一種將電脈沖轉化為角位移的執(zhí)行機構。通俗一點講:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)??梢酝ㄟ^控制脈沖個來控制角位移量,從而達到準確定位的目的;同時可以通

15、過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。</p><p>  本次設計是采用步進電機28BYJ48型四相八拍電機,電壓為DC5V—DC12V。當對步進電機施加一系列連續(xù)不斷的控制脈沖時,它可以連續(xù)不斷地轉動。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態(tài)改變一次,也就對應轉子轉過一定的角度(一個步距角)。當通電狀態(tài)的改變完成一個循環(huán)時,轉子轉過一個齒距。四相步進電機可以在不同的通電

16、方式下運行,常見的通電方式有單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)</p><p><b>  其相序分配表如下:</b></p><p>  1.2 步進電機24BYJ48的相關電氣參數(shù)</p><p>  1

17、.額定電壓:12VDC(另有電壓:5V、6V、24V)</p><p><b>  2.相數(shù):4</b></p><p>  3.減速比:1/64(另有減速比:1/16、1/32)</p><p>  4.步距角:5.625°/64</p><p>  5.驅動方式:4相8拍</p><p&

18、gt;  6.直流電阻:200Ω±7%(25℃)(按客戶要求而定:80、130歐姆)</p><p>  7.空載牽入頻率:≥600Hz</p><p>  8.空載牽出頻率:≥1000Hz</p><p>  9.牽入轉矩:≥34.3mN.m(120Hz)</p><p>  10.自定位轉矩:≥34.3mN.m</p>

19、;<p>  11.絕緣電阻:>10MΩ(500V)</p><p>  12.絕緣介電強度:600VAC/1mA/1S</p><p><b>  13.絕緣等級:A</b></p><p>  14.溫升:<50K(120Hz)</p><p>  15.噪音:<40dB(120Hz)</p>

20、;<p>  16.重量:大約40g</p><p>  17.未注公差按:GB1804-m</p><p><b>  18.轉向:CCW</b></p><p>  1.3 步進電機的基本術語</p><p><b>  1.3.1 相數(shù)</b></p><p&

21、gt;  產(chǎn)生不同對極N、S磁場的激磁線圈對數(shù),常用m表示。</p><p><b>  1.3.2 拍數(shù)</b></p><p>  完成一個磁場周期性變化所需脈沖數(shù)或導電狀態(tài)用n表示,或指電機轉過一個齒距角所需脈沖數(shù),比如說本次設計中使用的24BYJ48有單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。

22、。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)</p><p><b>  1.3.3 步距角</b></p><p>  對應一個脈沖信號,電機轉子轉過的角位移用θ表示。θ=360度(轉子齒數(shù)J*運行拍數(shù)),以常規(guī)二相,轉子齒為50齒電機為例。四拍運行時步距角為θ=360度/(50*4)=1.8度(俗稱整步),八拍運行時步距角為θ=360度/(50*

23、8)=0.9度(俗稱半步)。</p><p>  1.3.4 信號分配</p><p>  四相步進電機按照其通電方式的不同,可以分為單四拍,雙四拍和雙八拍三種工作方式。單四拍與雙四拍的步距角相等,均為11.25度,而八拍的步距角則是單四拍與雙四拍的一半,5.625度。單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍

24、 (A-AB-B-BC-C-CD-D-DA-A。。。)。這里選取的是八拍的工作方式。</p><p>  28BYJ48步進電機為四相八拍,其相序表如下 3  2 1 0 對應A口輸出值          1&

25、#160; 0 0 0 1 01H          2  0 0 1 1 03H          3  0 0 1 0&#

26、160;02H          4  0 1 1 0 06H          5  0 1 0 0 04H   

27、0;      6  1 1 0 0 0CH          7  1 0 0 0 08H        

28、0; 8  1 0 0 1 09H  </p><p>  第2章 總體設計思路</p><p>  2.1 方案與設計思路</p><p>  因為步進電機的控制是通過脈沖信號來控制的,將電脈沖信號轉變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。所以怎樣產(chǎn)生這個脈沖信號和產(chǎn)生怎樣的信號是電機控制的關鍵。</

29、p><p>  用單片機來產(chǎn)生這個脈沖信號,通過單片機的P1口輸出脈沖信號,因為所選電機是四相的,所以只需要P1口的低四位P1.0~P1.3分別接到電機的四根電線上。定時器定時來調整電機的轉速,通過鍵盤的按鈕,就可以改變定時初值從而改變了電機的轉速,單片機上P3.2~P3.5連的是按鍵,這里鍵盤上的K1鍵為啟動與停止鍵,K2鍵為減速鍵,K3鍵為加速鍵,K4鍵為方向轉換鍵。P0以及P2.0~P2.2口接LCD1602,

30、可以顯示當前的電機轉速、運行狀態(tài)、運行方向和檔位。具體結構見3-1框圖。</p><p><b>  2.2 總框圖</b></p><p>  圖2-1 總體設計方框圖</p><p><b>  第3章 程序設計</b></p><p><b>  3.1 主程序</b>

31、</p><p>  進入主程序,首先是對LCD進行初始化,然后依次進行鍵盤掃描,調用步進電機相關數(shù)據(jù)顯示子函數(shù),若檢測到有鍵按下,則進去相應的處理。流程圖如下圖4-1:</p><p>  3-1圖 主程序流程圖</p><p>  3.2 LCD及檔位顯示程序</p><p>  此次設計使用1602液晶顯示步進電機運行狀態(tài),其效果比用

32、數(shù)碼管顯示要更加明了,也更容易讀取相關狀態(tài)和數(shù)據(jù)。液晶上顯示有電機運行的狀態(tài)(RUNNING或STOP)、當前檔位(DW)、運行方向("<<"或">>")以及其運轉速度(r/min)。其顯示原理如下圖4-2:</p><p>  圖4-2 液晶顯示流程圖</p><p><b>  3.3正反轉流程圖</b&g

33、t;</p><p>  步進電機的正反轉用K4控制,初始化電機為順時針轉,即“》”,每當按下K4鍵,電機轉向改變,具體流程圖如下圖3-3:</p><p>  3.4啟動與停止流程圖</p><p>  啟動與停止是用K1鍵來控制的,初始化標志位on_off==0,檔按下K1,即將on_off置1,每當按下k1,都將在啟動與停止間切換,具體流程圖如下圖3-4:&l

34、t;/p><p>  圖3-4 啟動與停止流程圖</p><p><b>  第4章 硬件設計</b></p><p>  4.1 硬件的設計與選取</p><p>  4.1.1 步進電機的驅動</p><p>  步進電機的驅動采用ULN2003,接到單片機的P1.0~P1.3,具體如下:&l

35、t;/p><p>  圖4-1 步進電機驅動及其接口圖</p><p>  4.1.2 單片機的選取</p><p>  目前市面上的通用型單片機種類很多,且適合不同應用場合的新產(chǎn)品不斷出現(xiàn),但目前的應用狀況,以8位中檔MCS-51系列單片機的應用最為普遍。基于這次課程設計的要求不高,我們可以選用51系列或52系列單片機,其有可靠性高,易于擴展以及實用性好等特點,完全可

36、以滿足我們的控制要求。其圖如下圖5-2:</p><p>  圖4-2 AT89C52單片機</p><p>  4.1.3 液晶LCD1602顯示模塊</p><p>  P0接液晶的數(shù)據(jù)傳送口,P2.0~P2.2接液晶的控制端口。</p><p>  其接線圖如下圖5-3:</p><p>  圖4-3 液晶與單

37、片機接口原理圖</p><p>  4.1.4 按鍵電路設計</p><p>  鍵盤接口按不同標準有不同分類方法,按鍵盤排布,可以分為獨立方式(一組相互獨立的鍵盤)和矩陣(一行列組成矩陣)方式。此次設計只用到了四個按鍵,故可采用獨立按鍵,P3.2~P3.5分別接到K1~K4。其原理圖如下圖5-4:</p><p>  圖4-4 按鍵與單片機接口原理圖</p&

38、gt;<p>  4.1.5 時針產(chǎn)生電路</p><p>  時針電路部分晶振為12.0MHz,其原理圖如下:</p><p>  圖4-4 時針電路</p><p>  4.2 硬件的總體電路連接</p><p>  圖 4-5 總體原理圖</p><p>  第5章 調試與故障分析</p&

39、gt;<p>  5.1 軟件編寫及調試</p><p>  此次編程及調試是用keil軟件進行的,程序的編寫及調試步驟如下:</p><p>  根據(jù)步進電機24BYJ48的相序,編好正反轉相序表,這個是關鍵,不能編錯。</p><p>  2.定義各個變量及相關液晶顯示符:</p><p>  uchar code cdi

40、s0[ ] = {" WELCOME TO "};</p><p>  uchar code cdis1[ ] = {" STEPPING MOTOR "};</p><p>  uchar code cdis2[ ] = {" CONTROL SYSTEM "};</p><p>  ucha

41、r code cdis3[ ] = {"STOP "};</p><p>  uchar code cdis4[ ] = {"DW:"};</p><p>  uchar code cdis5[ ] = {"RUNNING"};</p><p>  uchar code cdis6[ ] = {

42、"r/min"};</p><p><b>  定義各個按鍵:</b></p><p>  sbit K1 = P3^2; //運行與停止</p><p>  sbit K2 = P3^3; //加速</p><p>  sbit K3 = P3^4;

43、 //減速</p><p>  sbit K4 = P3^5; //方向轉換</p><p>  sbit BEEP = P3^6; //蜂鳴器</p><p><b>  編寫各個子程序。</b></p><p>  編寫主程序,進入主程序即開始進行鍵盤掃描及調用液晶顯示。</

44、p><p>  定時器T0的中斷服務程序,進入中斷,若滿足條件,即向步進電機送8個脈沖。</p><p>  5.2 調試過程及相關顯示結果</p><p>  將程序下載到單片機中,LCD初始化顯示如下:</p><p>  之后進入步進電機初始化的畫面顯示,電機運行狀態(tài)顯示為STOP,檔位為5檔,開機轉速為2.66r/min,如下:</

45、p><p>  按下啟動鍵K1后,轉向顯示出顯示"》",即電機順時針轉,顯示如下:</p><p>  按K2鍵一次,檔位加一,高位檔為10檔,此時對應電機轉速為最慢,為1.33r/min,如下圖:</p><p>  5.3 故障分析及解決方法</p><p>  故障一:首先在設計總體方案時,思路上出現(xiàn)了一些問題,我首先

46、是想在中斷里完成許多應在中斷之外完成的事,經(jīng)過同學的指點,后來想清楚了。只在中斷中給電機送相序碼,并設定了一個參數(shù)對電機的轉速進行調控。</p><p>  故障二:由于編寫程序的經(jīng)驗不多,在計算電機轉速,并將其顯示在液晶時,遇到了一些問題,速度轉換公式是找出來了,但怎樣將其小數(shù)點表示出來,困惑了好久,最后還是請教了同學,才搞定。</p><p>  故障三:在仿真時首先液晶沒有接上拉電阻

47、,液晶上顯示不出來,我以為是程序方面出了問題,后來嘗試接了上拉電阻,就能夠正常顯示了。</p><p>  故障四:在做好硬件后,將程序下載到芯片后,單片機沒有工作,沒有實現(xiàn)所要的功能,后來經(jīng)過同學的幫助下,發(fā)現(xiàn)我將電容的管腳焊錯了,糾正后,單片機就正常工作了。</p><p><b>  第6章 心得體會</b></p><p>  在兩周的

48、單片機實訓,學到了許多知識,也能靈活的應用一些軟件,比如Protel 99 SE、Keil uVision4等;剛開始接到任務時,對步進電機不熟悉,毫無頭緒,通過自己搜索資料和向同學討論后,才有思路。在用軟件仿真時,出現(xiàn)了一些問題,比如,電機不轉動,液晶屏不顯示,經(jīng)過同學的指導下,發(fā)現(xiàn)了其中的問題:電機的線路接錯,液晶屏的電路沒加電阻。在用Protel 99 SE軟件畫原理圖時,自己對Protel 99 SE不是很熟悉,不會制作元件,元

49、件封裝,經(jīng)過自己的努力和同學的幫助下,也能熟悉Protel 99 SE的基本操作,順利完成了原理圖和PCB圖。由于自己以前沒有做過PCB板,第一次做板對我有一定的挑戰(zhàn),在制作PCB板中,忽略了一些細節(jié)的東西,仔細檢查后,沒有這些細節(jié),就不可能成功,才發(fā)現(xiàn)細節(jié)的重要性。熟悉其制作流程后,跟幾個同學一起討論,先是去打印,在轉印,后腐蝕,最后打孔;完成后在將元件按PCB板的位置焊接上去,通過一天的努力完成了任務;將程序下載到芯片運行時,出現(xiàn)了

50、問題:液晶屏不顯示,電機不轉動。那時我就用萬用表對單板仔細檢查,檢查一遍后,還是沒能找出問題的所在;后面自己想了</p><p><b>  第7章 參考文獻</b></p><p>  [1]王迎旭.《單片機原理及及應用》.北京:機械工業(yè)出版社</p><p>  [2]張迎新.《單片微型計算機原理、應用及接口技術》.北京:國防工業(yè)出版社&

51、lt;/p><p>  [3]郭天祥.《新概念51單片機C語言教程》.北京:電子工業(yè)出版社</p><p>  [4]蔡明文 馮先成編著.《單片機課程設計》.北京:華中科技大學出版社</p><p>  [5]王曉明.《電動機的單片機控制》.北京航空航天大學出版社 </p><p><b>  附件</b></p>

52、;<p><b>  系統(tǒng)原理圖</b></p><p><b>  元器件清單</b></p><p>  STC89C52 1片</p><p>  LCD1602 1塊</p><p>

53、  ULN2003 1個</p><p>  步進電機 1個</p><p>  按鈕開關 5個</p><p>  排阻10K 2個</p><p>  滑動電阻10K

54、 1個</p><p>  電容30PF 2個</p><p>  電解電容10μF 1個</p><p>  晶振12MHZ 1個</p><p>  16P插座 1個</p>&

55、lt;p>  40P插座 1個</p><p>  覆銅板 1塊</p><p><b>  PCB板</b></p><p><b>  源程序清單</b></p><p>  #include <reg5

56、1.h> //51芯片管腳定義頭文件</p><p>  #include <intrins.h> //內部包含延時函數(shù) _nop_();</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #

57、define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};</p><p>  uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正轉相序編碼表</p><p>  uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0x

58、f3,0xf1};//反轉相序編碼表</p><p>  sbit K1 = P3^2; //運行與停止</p><p>  sbit K2 = P3^3; //加速</p><p>  sbit K3 = P3^4; //減速</p><p>  sbit K4 = P3^5;

59、 //方向轉換</p><p>  sbit LCD_RS = P2^0; </p><p>  sbit LCD_RW = P2^1;</p><p>  sbit LCD_EN = P2^2;</p><p>  bit on_off=0; //運行與停止標志</p>

60、;<p>  bit direction=1; //方向標志</p><p>  uchar code cdis0[ ] = {" WELCOME TO "};</p><p>  uchar code cdis1[ ] = {" STEPPING MOTOR "};</p><p>

61、;  uchar code cdis2[ ] = {" CONTROL SYSTEM "};</p><p>  uchar code cdis3[ ] = {"STOP "};</p><p>  uchar code cdis4[ ] = {"DW:"};</p><p>  uchar co

62、de cdis5[ ] = {"RUNNING"};</p><p>  uchar code cdis6[ ] = {"r/min"};</p><p>  uchar code cdis7[ ] = {"RATE:"};</p><p>  uchar m,v=0,q=0,j;</p&g

63、t;<p>  uchar rate=5; //預設定速度檔</p><p>  uchar data_temP1,data_temp2,data_temp3,data_temp4; </p><p>  uint zs,data_temp;</p><p>  /********************

64、*********************************/</p><p>  void delay(uint t) // 延時t毫秒函數(shù)</p><p>  { </p><p><b>  uchar k;</b></p><p>  while(t--)

65、</p><p><b>  {</b></p><p>  for(k=0; k<125; k++)</p><p><b>  { }</b></p><p><b>  }</b></p><p><b>  }</b>

66、</p><p>  bit lcd_busy() //檢查LCD是否為忙狀態(tài),lcd_busy為1時,忙,等待。為0時,閑,可寫指令與數(shù)據(jù)。</p><p>  { </p><p>  bit result;</p><p>  LCD_RS = 0;</p><p&g

67、t;  LCD_RW = 1;</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  result = (bit)(P0&0x80);</p><p>  LCD_EN = 0;</p><p>  return(result); </p>&

68、lt;p><b>  }</b></p><p>  /********************************************************/</p><p>  void lcd_wcmd(uchar cmd)//寫指令數(shù)據(jù)到LCD ,*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。</p><p> 

69、 { while(lcd_busy());</p><p>  LCD_RS = 0;</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p><b>  _nop_();</b></p><p><b>  _nop_(); <

70、/b></p><p><b>  P0 = cmd;</b></p><p>  delayNOP();</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  LCD_EN = 0; </p><p><

71、b>  }</b></p><p>  /********************************************************/</p><p>  void lcd_wdat(uchar dat)//寫顯示數(shù)據(jù)到LCD,RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。</p><p>  { while(lcd_

72、busy());</p><p>  LCD_RS = 1;</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p><b>  P0 = dat;</b></p><p>  delayNOP();</p><p>  LC

73、D_EN = 1;</p><p>  delayNOP();</p><p>  LCD_EN = 0; </p><p><b>  }</b></p><p>  /********************************************************/</p><p&

74、gt;  void lcd_init()//LCD初始化設定</p><p><b>  { </b></p><p>  delay(30); </p><p>  lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數(shù)據(jù)</p><p><b> 

75、 delay(5);</b></p><p>  lcd_wcmd(0x38); </p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x38); </p><p><b>  delay(5);</b><

76、/p><p>  lcd_wcmd(0x0c); //顯示開,關光標</p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x06); //移動光標</p><p><b>  delay(5);</b></p><p&g

77、t;  lcd_wcmd(0x01); //清除LCD的顯示內容</p><p>  delay(5);}</p><p>  /********************************************************/</p><p>  void lcd_pos(uchar pos)//設定顯示位置</p><

78、;p>  { </p><p>  lcd_wcmd(pos | 0x80); //數(shù)據(jù)指針=80+地址變量</p><p><b>  }</b></p><p>  /********************************************************/&

79、lt;/p><p>  void LCD_init_DIS()// LCD1602初始顯示子程序</p><p>  { </p><p>  delay(10); //延時</p><p>  lcd_init(); //初始化LCD

80、</p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis0[m] != '\0')</p><p>  { /

81、/顯示字符WELCOME</p><p>  lcd_wdat(cdis0[m]);</p><p><b>  m++;</b></p><p><b>  }</b></p><p>  delay(2000);</p><p>  lcd_wcmd(0x01);

82、//清屏</p><p>  delay(5); //清屏以后的這個延時不能少,給LCD一定的緩沖,否則下一條指令不一定被執(zhí)行</p><p>  lcd_pos(0x10); //設置顯示位置為第一行的第17個地址</p><p><b>  m = 0;</b></p><p>

83、  while(cdis1[m] != '\0')</p><p>  { //顯示字符</p><p>  lcd_wdat(cdis1[m]);</p><p><b>  m++;</b></p><p><b>  }</b>&

84、lt;/p><p>  lcd_pos(0x50); //設置顯示位置為第二行第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis2[m] != '\0')</p><p><b>  {</b></p>

85、;<p>  lcd_wdat(cdis2[m]); //顯示字符</p><p><b>  m++;</b></p><p><b>  }</b></p><p>  for(j=0;j<16;j++)</p><p><b>  {</b>

86、</p><p>  lcd_wcmd(0x18);</p><p>  delay(300);</p><p><b>  }</b></p><p>  delay(3000); //延時 </p><p>  lcd_wcmd(0x01); /

87、/清屏</p><p>  lcd_pos(0x00); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis3[m] != '\0')</p><p>  {

88、 //顯示字符STOP</p><p>  lcd_wdat(cdis3[m]);</p><p><b>  m++;</b></p><p><b>  }</b></p><p>  lcd_pos(0x08); //設置顯示位置為第一行第9個字符</p&g

89、t;<p><b>  m = 0;</b></p><p>  while(cdis4[m] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(cdis4[m]); //顯示字符DW</p><p><b>

90、;  m++;</b></p><p><b>  } </b></p><p>  for(m=0;m<2;m++)</p><p><b>  { </b></p><p>  lcd_pos(0x0e+m); //顯示方向符號</p><p

91、>  lcd_wdat(0x2d);</p><p><b>  }</b></p><p>  lcd_pos(0x47); //顯示小數(shù)點</p><p>  lcd_wdat(0x2e);</p><p><b>  m = 0;</b></p><p>

92、;  lcd_pos(0x4a); //顯示字符r/min</p><p>  while(cdis6[m] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(cdis6[m]); </p><p><b>  m++;</b>

93、;</p><p><b>  } </b></p><p><b>  m = 0;</b></p><p>  lcd_pos(0x40); //顯示字符RATE:</p><p>  while(cdis7[m] != '\0')</p><

94、;p><b>  {</b></p><p>  lcd_wdat(cdis7[m]); </p><p><b>  m++;</b></p><p><b>  } </b></p><p><b>  }</b></p&g

95、t;<p>  /********************************************************/</p><p>  void data_conv()//檔位數(shù)據(jù)轉換子程序 </p><p><b>  {</b></p><p>  data_temP1=data_temp/10;

96、 //高位</p><p>  if(data_temP1==0)</p><p><b>  {</b></p><p>  data_temP1=0x20;//高位為0不顯示</p><p>  } </p><p><b>  else </b&g

97、t;</p><p><b>  {</b></p><p>  data_temP1=data_temP1+0x30;</p><p><b>  }</b></p><p>  data_temp2=data_temp%10; //低位</p><p>  d

98、ata_temp2=data_temp2+0x30;</p><p><b>  }</b></p><p>  /********************************************************/</p><p>  void data_conv1()//轉速數(shù)據(jù)轉換子程序 </p><p

99、>  { data_temP1=data_temp/1000;//整數(shù)位第一位</p><p>  if(data_temP1==0)</p><p><b>  {</b></p><p>  data_temP1=0x20;//高位為0不顯示</p><p>  } <

100、;/p><p><b>  else </b></p><p><b>  {</b></p><p>  data_temP1=data_temP1+0x30;</p><p><b>  }</b></p><p>  data_temp2=data_t

101、emp%1000/100; //整數(shù)位第2位</p><p>  data_temp2=data_temp2+0x30;</p><p>  data_temp3=data_temp%100/10; //小數(shù)位第一位</p><p>  data_temp3=data_temp3+0x30;</p><p>  data_te

102、mp4=data_temp%10; //小數(shù)位第二位</p><p>  data_temp4=data_temp4+0x30;</p><p><b>  } </b></p><p>  /********************************************************/</p><

103、;p>  void data_dis() //數(shù)據(jù)顯示子程序</p><p><b>  {</b></p><p>  data_temp = rate; //顯示檔位</p><p>  data_conv();</p><p>  lcd_pos(0x0b); </p><

104、;p>  lcd_wdat(data_temP1);</p><p>  lcd_pos(0x0c); </p><p>  lcd_wdat(data_temp2);</p><p>  zs=1332/rate;//轉速換算公式:zs=13.32/rate;</p><p>  data_temp=zs; //顯示轉速&l

105、t;/p><p>  data_conv1();</p><p>  lcd_pos(0x45); </p><p>  lcd_wdat(data_temP1);</p><p>  lcd_pos(0x46); </p><p>  lcd_wdat(data_temp2);</p><p> 

106、 lcd_pos(0x48); </p><p>  lcd_wdat(data_temp3);</p><p>  lcd_pos(0x49); </p><p>  lcd_wdat(data_temp4);</p><p><b>  }</b></p><p>  /***********

107、*********************************************/</p><p>  void motor_DR()//顯示運行方向符號</p><p><b>  {</b></p><p>  if(direction==1) //正轉方向標志</p><p>  {

108、 for(m=0;m<2;m++)</p><p><b>  { </b></p><p>  lcd_pos(0x0e+m); //顯示方向符號</p><p>  lcd_wdat(0x3e);//顯示>>號</p><p><b>  }</b></p&g

109、t;<p><b>  }</b></p><p><b>  else</b></p><p>  { for(m=0;m<2;m++) //反轉方向標志</p><p><b>  { </b></p><p>  lcd_pos(0x0e+

110、m); //顯示方向符號 </p><p>  lcd_wdat(0x3c); //顯示<<號</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

111、;  /********************************************************/</p><p>  void motor_RUN() //顯示運行狀態(tài) </p><p><b>  {</b></p><p>  if(on_off==1)</p><p><b>

112、  { TR0=1; </b></p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis5[m] != '\0')</p><p>  { lcd_wdat(cdis5[

113、m]); //RUNNING</p><p><b>  m++; }</b></p><p>  motor_DR(); </p><p><b>  } </b></p><p><b>  else </b></p>

114、<p>  { TR0=0; P1 =0x0f; </p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis3[m] != '\0')</p><p><b&g

115、t;  { </b></p><p>  lcd_wdat(cdis3[m]); //STOP</p><p><b>  m++; </b></p><p><b>  }</b></p><p>  motor_DR();</p><p>  f

116、or(m=0;m<2;m++)</p><p><b>  { </b></p><p>  lcd_pos(0x0e+m); //顯示--</p><p>  lcd_wdat(0x2d);</p><p><b>  }</b></p><p><b&g

117、t;  } </b></p><p><b>  }</b></p><p>  /*******************************************************/</p><p>  main() //主程序</p><p><b>  { </b>&

118、lt;/p><p>  LCD_init_DIS();</p><p>  TMOD = 0x01; //T0定時方式1</p><p>  TH0=(65536-1100)/256;//賦初值</p><p>  TL0=(65536-1100)%256;</p><p>  EA = 1;//開啟總

119、中斷</p><p>  ET0 = 1; //開放定時器T0的中斷</p><p>  P1 = 0x0f;</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  if(K1==0)//運行與停止&

120、lt;/p><p>  { delay(120); //消抖</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p>  while(K1==0); //等待鍵釋放</p><p>  on_off=~on_

121、off; </p><p>  motor_RUN();</p><p><b>  } </b></p><p>  } //K1 end</p><p>  /*******************************************************/</p>&l

122、t;p>  if(K4==0) //方向轉換</p><p>  { delay(120);</p><p><b>  if(K4==0)</b></p><p><b>  { </b></p><p>  direction=~direction; </p>&l

123、t;p>  motor_DR();</p><p><b>  }</b></p><p><b>  }//K3 end</b></p><p>  /*******************************************************/</p><p>  if(

124、K2==0) //減速 </p><p>  {delay(120);</p><p><b>  if(K2==0)</b></p><p>  { rate++;</p><p>  if(rate==0x0b)</p><p>  rate=0x0a;</p><

125、;p><b>  }</b></p><p><b>  }</b></p><p>  if(K3==0) //加速</p><p>  {delay(120);</p><p><b>  if(K3==0)</b></p><p><

126、b>  {</b></p><p><b>  rate--;</b></p><p>  if(rate==0x00)</p><p>  rate=0x01;</p><p><b>  }</b></p><p><b>  }</b&

127、gt;</p><p>  data_dis();</p><p><b>  } </b></p><p><b>  } </b></p><p>  /*******************************************************/</p>&l

128、t;p>  void motor_onoff() interrupt 1 // 定時器 0 中斷</p><p>  { TH0=(65536-1100)/256;</p><p>  TL0=(65536-1100)%256; </p><p><b>  q++;</b></p><p> 

129、 if(q < rate)</p><p>  { return; }</p><p><b>  else </b></p><p>  { q=0; </p><p>  if(direction==1) //方向標志</p><p>  { if

130、(v<8) </p><p>  {P1 = FFW[v];v++;} //取數(shù)據(jù),正轉</p><p><b>  if(v==8) </b></p><p><b>  v=0; </b></p><p><b>  }</b></p>

131、<p><b>  else</b></p><p><b>  { </b></p><p><b>  if(v<8) </b></p><p>  {P1 = REV[v];v++;} //取數(shù)據(jù),反轉</p><p><b>  

溫馨提示

  • 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

提交評論