課程設(shè)計(jì)---基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  設(shè)計(jì)題目:基于MCS-51單片機(jī)的反應(yīng)式步進(jìn)電機(jī)控制器設(shè)計(jì),要求能夠控制其轉(zhuǎn)速、正反轉(zhuǎn)和運(yùn)行步數(shù)。</p><p>  摘要:在中國(guó)這個(gè)發(fā)展中大國(guó),單片機(jī)的出現(xiàn)意味著計(jì)算機(jī)分為通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)。單片機(jī)單芯片因它的體積微小和成本低廉的優(yōu)點(diǎn)而廣泛的應(yīng)用到家電、儀表、汽車電子、工業(yè)控制單元、辦公自動(dòng)化設(shè)備、通信設(shè)備等這些產(chǎn)品中去,是現(xiàn)代電子系統(tǒng)中極其重要的智能化工具。在未來(lái),單片機(jī)

2、將會(huì)進(jìn)一步的走向低功耗、小體積、大容量、高性能、低價(jià)位和混合信號(hào)集成化。本設(shè)計(jì)基于AT89S51單片機(jī),利用反應(yīng)式步進(jìn)電機(jī)控原理,對(duì)其控制進(jìn)行硬件和軟件的設(shè)計(jì)。以實(shí)現(xiàn)對(duì)反應(yīng)式電機(jī)的控制器可對(duì)36BF003型步進(jìn)電機(jī)進(jìn)行正反轉(zhuǎn)、啟停、速度和步數(shù)控制。</p><p>  關(guān)鍵字:步進(jìn)電機(jī);單片機(jī);拍數(shù);控制器;反應(yīng)式</p><p><b>  一、控制原理分析</b>

3、</p><p>  1.1 三相步反應(yīng)式進(jìn)電機(jī)工作原理</p><p>  反應(yīng)式步進(jìn)電機(jī)又稱可變磁阻式步進(jìn)電機(jī),它和普通的電機(jī)一樣,也是有定子和轉(zhuǎn)子組成,它利用磁阻轉(zhuǎn)矩使轉(zhuǎn)子轉(zhuǎn)動(dòng)。三相反應(yīng)式步進(jìn)電機(jī)定機(jī)定子上有六個(gè)極,每個(gè)極上裝有控制繞組,每相對(duì)的兩極組成一相。轉(zhuǎn)子上有數(shù)個(gè)均勻分布的齒,其上沒(méi)有繞組,當(dāng)A相通電時(shí),轉(zhuǎn)子在磁場(chǎng)力的作用下與定子齒對(duì)齊,若切斷A相電源,同時(shí)接通B相電源,在磁

4、場(chǎng)力的作用下轉(zhuǎn)子轉(zhuǎn)過(guò)一個(gè)步距角(步距角由轉(zhuǎn)子齒數(shù)、控制繞組相數(shù)和通電方式?jīng)Q定),如再使B相斷電,同時(shí)使C相控制繞組通電,轉(zhuǎn)子又轉(zhuǎn)過(guò)一個(gè)步距角。如此循環(huán)通電,并按A→B→C→A順序通電,步進(jìn)電機(jī)便按一定的方向轉(zhuǎn)動(dòng)。電機(jī)的轉(zhuǎn)速取決于控制繞組接通的斷開的變化頻率。若改變通電順序,即按A→C→B→A方式通電,則電機(jī)反向轉(zhuǎn)動(dòng)。上述通電方式稱為三相單三拍通電方式;這里的“拍”是指定子控制繞組每改變一次通電方式,為一拍;“單”是指每次只有一相控制繞組

5、通電;“三拍”是指經(jīng)過(guò)三次切換控制繞組的通電狀態(tài)為一個(gè)循環(huán)。</p><p>  三相步反應(yīng)式進(jìn)電機(jī)除上述通電方式外,還有三相雙三拍和三相單雙六拍通電方式,三相雙三拍通電順序?yàn)锳B→BC→CA→AB或AB→CA→BC→AB,三相單雙六拍通電順序?yàn)锳→AB→B→BC→C→CA→A或A→AC→C→CB→B→BA→A,這里“AB”表示A、B兩相同時(shí)通電,依此類推。</p><p>  三相反應(yīng)式

6、步進(jìn)電機(jī)的步距角θs的大小是由轉(zhuǎn)子的齒數(shù)、控制繞組的相數(shù)和通電方式所決定的,其關(guān)系為</p><p>  θs=360o/(mZrC)</p><p>  式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時(shí),C=1;而采用單雙拍方式時(shí),C=2;m為步進(jìn)電機(jī)相數(shù),當(dāng)Zr為步進(jìn)電機(jī)轉(zhuǎn)子數(shù)。</p><p>  若步進(jìn)電機(jī)能電的脈沖頻率為f(每秒的拍數(shù)),則步進(jìn)電機(jī)的速度為</

7、p><p>  n=60f/(mZrC)</p><p>  式中:f為頻率,單位為Hz;n為轉(zhuǎn)速,單位為r/min。</p><p>  1.2 基于單片機(jī)的步進(jìn)電機(jī)驅(qū)動(dòng)器控制原理</p><p>  步進(jìn)電機(jī)驅(qū)動(dòng)器控制系統(tǒng)的硬件設(shè)備由單片機(jī)、功率放大器、鍵盤輸入設(shè)備和顯示設(shè)備幾個(gè)部分組成,其示意圖如圖1-1所示:</p><

8、;p>  1、鍵盤:鍵盤由0~9號(hào)數(shù)字健、正轉(zhuǎn)啟動(dòng)鍵、反轉(zhuǎn)啟動(dòng)鍵、停止鍵、轉(zhuǎn)速+、轉(zhuǎn)速-等15個(gè)按鍵組成,通過(guò)鍵盤可以設(shè)置電機(jī)運(yùn)行步數(shù)(電機(jī)轉(zhuǎn)動(dòng)角度)、轉(zhuǎn)速、正/反轉(zhuǎn)啟動(dòng)和停止。</p><p>  2、單片機(jī):?jiǎn)纹瑱C(jī)是系統(tǒng)的控制單元,它通過(guò)對(duì)輸入設(shè)置運(yùn)算產(chǎn)生和分配控制電機(jī)的脈沖信號(hào),同時(shí)也要產(chǎn)生步數(shù)和速度的顯示信號(hào)。</p><p>  3、功率放大器:?jiǎn)纹瑱C(jī)輸出的脈沖信號(hào)功率很小

9、,不足以驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),故需要功率放大器將信號(hào)放大以驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)。</p><p><b>  二、硬件設(shè)計(jì)</b></p><p>  2.1 電機(jī)的選用及其電路</p><p>  2.1.1 確定步進(jìn)電機(jī)型號(hào)及其參數(shù)</p><p>  本設(shè)計(jì)選擇型號(hào)為36BF003反應(yīng)式步進(jìn)電機(jī),其參數(shù)如表2-1所示:<

10、/p><p>  表2-1 36BF003反應(yīng)式步進(jìn)電機(jī)技術(shù)數(shù)據(jù)</p><p>  2.1.2電機(jī)驅(qū)動(dòng)電路原理</p><p>  由表2-1可知電機(jī)的額定電壓是27V,本設(shè)計(jì)采用單電源功率放大電路驅(qū)動(dòng)步進(jìn)電機(jī),電路原理圖如圖2-1所示。電路中由單片機(jī)AT89S51分配的控制脈沖從P0口的P0.0~P0.7輸出,經(jīng)74LS125反相后控制光電開關(guān),光電隔離后,由功率

11、管TIP122將脈沖信號(hào)進(jìn)行電壓和電流放大,驅(qū)動(dòng)步進(jìn)電機(jī)的各相繞組。使步進(jìn)電機(jī)隨著不同的脈沖信號(hào)分別作正轉(zhuǎn)、反轉(zhuǎn)、加速、減速和停止等動(dòng)作。W1、W2、W3分別為電機(jī)三相繞阻,RL為繞組內(nèi)阻,阻值為1.6Ω,100Ω電阻(R1、R2、R3)是一外接電阻,起限流作用,也是一個(gè)改善回路時(shí)間常數(shù)的元件。VD1、VD2、VD3為續(xù)流二極管,使電機(jī)繞組產(chǎn)生的反電動(dòng)勢(shì)通過(guò)續(xù)流二極管(VD1、VD2、VD3)而衰減掉,從而保護(hù)了功率管TIP122不受損

12、壞。</p><p>  在100Ω外接電阻(R1、R2、R3)上并聯(lián)一個(gè)200μF電容,可以改善注入步進(jìn)電機(jī)繞組的電流脈沖前沿,提高了步進(jìn)電機(jī)的高頻性能。與續(xù)流二極管串聯(lián)的200Ω電阻(R10、R11、R12)可減小回路的放電時(shí)間常數(shù),使繞組中電流脈沖的后沿變陡,電流下降時(shí)間變小,也起到提高高頻工作性能的作用。</p><p>  2.3 單片機(jī)選擇及其電路設(shè)計(jì)</p>&

13、lt;p>  2.3.1 單片機(jī)的選用</p><p>  (1)本設(shè)計(jì)采用AT89S51,它是低功耗、高性能的單片機(jī),其特性如下: </p><p> ?。?)4KB可編程的Flash存儲(chǔ)器(可經(jīng)受1000次的擦除/寫入);

14、 </p><p> ?。?)全靜態(tài)工作:0Hz~24Hz; </p><p> ?。?)1288字節(jié)的內(nèi)存RAM;

15、 </p><p>  (5)32可編程I/O線; </p><p> ?。?)2個(gè)16位的定時(shí)/計(jì)數(shù)器; </p>

16、;<p> ?。?)編程串行通道; </p><p><b>  (8)片內(nèi)振蕩器。</b></p><p>  2.3.2 單片機(jī)工作電路設(shè)計(jì)</p><p><b>  (1

17、)電壓選擇</b></p><p>  單片機(jī)的工作電壓范圍為2.7~5.5,在本設(shè)計(jì)中的單片機(jī)的工作電壓是5。</p><p><b> ?。?)復(fù)位電路</b></p><p>  AT89S52單片機(jī)的引腳為復(fù)位信號(hào)輸入端,高電平有效,,當(dāng)振蕩器工作時(shí),在此引腳上出現(xiàn)兩個(gè)機(jī)器周期以上的高電平,就可以使單片機(jī)復(fù)位。本設(shè)計(jì)采用TP

18、S3824處理器監(jiān)控電路復(fù)位,電路原理圖如圖2-2所示。</p><p>  TPS3824是一個(gè)帶有看門狗功能的監(jiān)控器,在上電期間,監(jiān)控器REST端向單片機(jī)復(fù)位引腳(RESET)發(fā)出一個(gè)復(fù)位信號(hào),然后,其內(nèi)部定時(shí)器每延時(shí)時(shí)間td向單片機(jī)發(fā)出一個(gè)復(fù)位信號(hào),因此,在單片機(jī)正常工作期間,單片機(jī)P0.3口需要在時(shí)間t≤td時(shí)定期向監(jiān)控器WDI引腳發(fā)出一個(gè)正跳變或負(fù)跳變以觸發(fā)監(jiān)控器定時(shí)器復(fù)位,以防止單片機(jī)被誤復(fù)位。當(dāng)單片

19、機(jī)死機(jī)無(wú)法正常工作時(shí),P0.3無(wú)法輸出觸發(fā)監(jiān)控器定時(shí)器復(fù)位信號(hào),監(jiān)控器則向單片機(jī)發(fā)出復(fù)位信號(hào)使系統(tǒng)復(fù)位,所以,使用TPS3824監(jiān)控器復(fù)位電路具有系統(tǒng)死機(jī)自動(dòng)復(fù)位功能。</p><p><b> ?。?)時(shí)鐘電路</b></p><p>  本系統(tǒng)運(yùn)行程序不多,速度要求不高,采用外部時(shí)鐘脈沖,選用ZPA(穩(wěn)定度為1~9x10-4 普通石英晶體振蕩器)型12MHz石英晶

20、體振蕩器。其電路原理圖如圖2-3所示。</p><p>  如圖2-3,時(shí)鐘電路連接單片機(jī)引腳XTAL1和XTAL2向單片機(jī)提供時(shí)鐘脈沖,電路中的電容C1和C2稱為負(fù)載電容,也可以理解為諧振電容的一部分,兩電容并串在電路中取值相同,一般為數(shù)pF至數(shù)十pF,這里選擇30pF。</p><p><b>  (4)鍵盤輸入電路</b></p><p>

21、;  鍵盤是一組按鍵的集合,它是最常用的單片機(jī)輸入設(shè)備.操作人員可以通過(guò)鍵盤輸入數(shù)據(jù)或者命令,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)通信。單片機(jī)的鍵盤設(shè)計(jì)方式有獨(dú)立式和矩陣式兩種,由于本系統(tǒng)鍵盤由0~9號(hào)數(shù)字鍵、正轉(zhuǎn)控制鍵、反轉(zhuǎn)控制鍵、停止控制鍵、加速鍵和減速鍵15個(gè)按鍵組成,通過(guò)鍵盤可以輸入電機(jī)運(yùn)行步數(shù)、控制電機(jī)正轉(zhuǎn)/反轉(zhuǎn)/停止和速度。系統(tǒng)按鍵數(shù)量較多,為節(jié)省I/O口,簡(jiǎn)化電路,降低成本,本設(shè)計(jì)采用標(biāo)準(zhǔn)的4*4矩陣式由P1號(hào)接入單片機(jī)。電路原理如圖2-4所示

22、。電路中四個(gè)電阻起上拉電阻作用。</p><p><b> ?。?)顯示電路</b></p><p>  本設(shè)計(jì)采用七個(gè)八段數(shù)碼管顯示電機(jī)步數(shù),顯示步數(shù)范圍是0~9999999步,由步進(jìn)電機(jī)原理可知,步數(shù)x步距角為電機(jī)轉(zhuǎn)角。一個(gè)八段數(shù)碼管顯示速度,編程設(shè)定顯示范圍是1~9,倍率是100,即實(shí)際轉(zhuǎn)速為顯示數(shù)x100,例如,速度顯示1,則電機(jī)轉(zhuǎn)速為100r/min。為簡(jiǎn)化

23、電路,降低成本,八個(gè)八段顯示數(shù)碼管的陽(yáng)極位段選線并聯(lián)在一起,由一個(gè)8位的P2口控制,形成段選線多路復(fù)用。而各位的共陰極分別8位的P3口控制,實(shí)現(xiàn)各位的分時(shí)選通,構(gòu)成一個(gè)動(dòng)態(tài)顯示器,如圖2-5所示。圖中右七個(gè)數(shù)碼管顯示步數(shù),左一個(gè)數(shù)碼管顯示轉(zhuǎn)速,74LS125為集成四個(gè)非門的芯片。</p><p><b>  三、軟件設(shè)計(jì)</b></p><p><b>  

24、3.1控制地址分配</b></p><p>  為方便程序檢查和修改,在設(shè)計(jì)程序之前應(yīng)對(duì)所用到或使用較多數(shù)據(jù)存儲(chǔ)地單元命名標(biāo)號(hào),本程序數(shù)據(jù)儲(chǔ)存地址命名如表3-1所示。</p><p>  表3-1 數(shù)據(jù)儲(chǔ)存地址命名標(biāo)號(hào)表</p><p><b>  3.2主程序設(shè)計(jì)</b></p><p>  為節(jié)省單片機(jī)

25、程序掃描時(shí)間,使用定時(shí)器T0中斷方式轉(zhuǎn)入控制電機(jī)運(yùn)行,定時(shí)器T0定時(shí)時(shí)間為電機(jī)運(yùn)轉(zhuǎn)“拍數(shù)”切換時(shí)間,即控制電機(jī)的脈沖切換時(shí)間,根據(jù)步進(jìn)電機(jī)控制原理,改變此定時(shí)器定時(shí)時(shí)間可改變電機(jī)轉(zhuǎn)速。由此定時(shí)器定時(shí)時(shí)間未到時(shí)不斷進(jìn)行鍵盤掃描的輸出顯示。時(shí)間初值查詢表SD_TAB見程序所用到的查詢表及其說(shuō)明部分表4-1;主程序流程圖如圖3-1所示。</p><p><b>  主程序清單如下:</b><

26、/p><p>  ORG 0000H</p><p>  LJMP MAIN</p><p>  ORG 000BH</p><p>  LJMP DJKZ</p><p>  ORG 0050H</p><p>  MAIN: ;主程序</p&g

27、t;<p>  GB EQU 40H ;定義步數(shù)十位存儲(chǔ)單元</p><p>  SB EQU 40H ;定義步數(shù)百位存儲(chǔ)單元</p><p>  BB EQU 40H ;定義步數(shù)千位存儲(chǔ)單元</p><p>  QB EQU 40H ;定義步數(shù)萬(wàn)位存儲(chǔ)單元</p><p>

28、;  WB EQU 40H ;定義步數(shù)十萬(wàn)位存儲(chǔ)單元</p><p>  SWB EQU 40H ;定義步數(shù)百萬(wàn)位存儲(chǔ)單元</p><p>  BWB EQU 40H ;定義步數(shù)個(gè)位存儲(chǔ)單元</p><p>  SD EQU 40H ;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲(chǔ)單元</p><p>  

29、JK EQU 40H ;定義電機(jī)控制表偏移量存儲(chǔ)單元</p><p>  KONZ EQU 40H ;定義輸入口按鍵按下狀態(tài)暫存單元</p><p>  KBL EQU 40H ;定義輸入口按鍵按下狀態(tài)中間變量存儲(chǔ)單元</p><p>  MOV P0,#00H ;I/O口初始化</p><p>

30、;  MOV P1,#0FFH ;</p><p>  MOV P2,#0FFH ;</p><p>  MOV P3,#0FFH ;</p><p>  MOV GB,#00H ;步數(shù)個(gè)位初始化</p><p>  MOV SB,#00H ;步數(shù)十位初始化</p><p&

31、gt;  MOV BB,#00H ;步數(shù)百位初始化</p><p>  MOV QB,#00H ;步數(shù)千位初始化</p><p>  MOV WB,#00H ;步數(shù)萬(wàn)位初始化</p><p>  MOV SWB,#00H ;步數(shù)十萬(wàn)位初始化</p><p>  MOV BWB,#00H ;步數(shù)百萬(wàn)

32、位初始化</p><p>  MOV SD,#1 ;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/min</p><p>  MOV JK,#0;電機(jī)控制狀態(tài)開機(jī)為停止</p><p>  MOV KZ,#0 ;速度查詢表偏移初始化0</p><p>  MOV TMOD,#01H ;T0控制模式為1</p>

33、<p>  MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址</p><p>  MOV A,SD ;取轉(zhuǎn)速查詢表偏移量</p><p>  MOVC A,@A+DPTR ;取定時(shí)器低位初值</p><p>  MOV TL0,A ;裝入定時(shí)器低位初值</p><p>  MO

34、V A,SD;取轉(zhuǎn)速查詢表偏移量</p><p>  ADD A,#10;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備</p><p>  DA A;十進(jìn)制數(shù)調(diào)整</p><p>  MOVC A,@A+DPTR;取定時(shí)器高位初值</p><p>  MOV TH0,A;裝入定時(shí)器高位

35、初值</p><p>  MOV IE,#82H ;T0開中斷</p><p>  SETB TR0 ;啟動(dòng)T0</p><p><b>  LOOP:</b></p><p>  LCALL KEY_SUB ;調(diào)用鍵盤掃描錄入程序</p><p>  LCALL

36、DISP_SUB ;調(diào)用顯示程序</p><p>  LJMP LOOP ;返回LOOP</p><p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH</p><p>  DB F6H, FBH, FCH, FDH, FEH, FEH, FEH, FEH, FFH,

37、 FFH</p><p>  3.2鍵盤錄入子程序</p><p>  實(shí)現(xiàn)功能:通過(guò)掃描鍵盤,判斷是否有鍵按下,若有鍵按下則改變相應(yīng)控制地址單元的內(nèi)容,為后面的顯示和電機(jī)控制做準(zhǔn)備。鍵盤數(shù)據(jù)錄入子程序流程圖如圖3-2所示;輸入鍵鍵號(hào)查詢表IN_TAB見程序所用到的查詢表及其說(shuō)明部分表4-2;電機(jī)啟/??刂坪惋@示段選碼表SRDS_TAB見程序所用到的查詢表及其說(shuō)明部分表4-3;鍵盤掃描子程

38、序流程圖如圖3-2所示。</p><p>  鍵盤掃描方法:由硬件設(shè)計(jì)可知,鍵盤是4*4的行、列結(jié)構(gòu)設(shè)計(jì),行由P1.0~P1.3口輸入,列由P1.4~P1.7口輸入,其中行線通過(guò)上拉電阻接+5V,平時(shí)無(wú)按鍵動(dòng)作時(shí),行線處于高電平狀態(tài),而當(dāng)有按鍵按下時(shí),則對(duì)應(yīng)的行線和列線短接,行線電平狀態(tài)將由與此行線相連的列線電平?jīng)Q定。因此,其掃描方法是:先令P1.4列線為低電平,其余三根列線為高電平,讀行線狀態(tài)。如果行線都為高電

39、平,則這一列線上沒(méi)有鍵閉合,接著使下一列線P1.5為低電平,其余列線為高電平,用同樣方法檢查P1.5列上沒(méi)無(wú)鍵閉合,依次類推,直到最后一列掃描完成。</p><p>  鍵盤錄入程序代碼如下:</p><p>  KEY_SUB:;鍵盤錄入程序</p><p>  LCALL KNUM_SUB;調(diào)用鍵盤掃描程序</p>&

40、lt;p>  MOV A, KONZ;保存初次掃描輸入狀態(tài)</p><p>  ORL A, #0FH ;輸入狀態(tài)高四位置1</p><p>  MOV KBL, A;保存</p><p>  CJNE A, #0FFH, KE_NEXT1;(A)≠0FFH,有按鍵輸入,轉(zhuǎn)去抖動(dòng)</p>

41、<p>  LJMP KE_NEXT;否則轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT1:</b></p><p>  MOV R7, #10 ;延時(shí)10ms去抖動(dòng)</p><p>  LCALL DEL_SUB;調(diào)用延時(shí)1ms程序</p><p>  DJNZ

42、 R7, KE_NEXT1 ;</p><p>  LCALL KNUM_SUB;再次調(diào)用鍵盤掃描程序</p><p>  CJNE A, KONZ, KE_NEXT;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵</p><p>  ;釋放否則轉(zhuǎn)子程序返回</p><p>  KE_LOOP1: </p>

43、;<p>  LCALL KUNM_SUB;再次調(diào)用鍵盤掃描程序</p><p>  ORL A, #0FH;鍵盤輸入狀態(tài)高四位置1</p><p>  CJNE A, #0FFH, KE_LOOP1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動(dòng),否</p><p> ??;則轉(zhuǎn)KE_LOOP1再次判斷</p>

44、<p>  MOV R7, #10 ;延時(shí)10ms去抖動(dòng)</p><p>  LCALL DEL_SUB;調(diào)用延時(shí)1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  MOV DPTR, #IN_TAB;DPTR指向鍵號(hào)查詢表首地址</p><p>  M

45、OV R7, #0;從0號(hào)鍵開始掃描</p><p><b>  KE_LOOP2:</b></p><p>  MOV A, R7;取鍵號(hào)</p><p>  MOVC A, @A+DPTR;查表取出相應(yīng)鍵號(hào)狀態(tài)碼</p><p>  CJNE A, KONZ, KE_NEXT2

46、;與輸入狀態(tài)相比較,若</p><p>  LJMP KE_NEXT3;相等,則為該號(hào)鍵按下,轉(zhuǎn)取鍵號(hào)</p><p><b>  KE_NEXT2:</b></p><p>  INC R7;否則取下一鍵號(hào)</p><p>  LJMP KE_LOOP2;轉(zhuǎn)再次掃描</p

47、><p><b>  KE_NEXT3:</b></p><p>  MOV A, R7;取按下鍵鍵號(hào)</p><p>  CJNE A, #9, KE_NEXT4;若鍵號(hào)=9,轉(zhuǎn)設(shè)置步數(shù)</p><p>  LJMP B_SET;否則轉(zhuǎn)判斷是否<9</p><p>

48、;<b>  KE_NEXT4:</b></p><p>  JC B_SET;若鍵號(hào)<9,轉(zhuǎn)設(shè)置步數(shù),否則順序判斷</p><p>  CJNE A, #12, KE_NEXT5;若鍵號(hào)≠12,</p><p>  LJMP DJ_SET;否則轉(zhuǎn)電機(jī)控制設(shè)置</p><p><b

49、>  KE_NEXT5:</b></p><p>  JC DJ_SET;若鍵號(hào)<12,轉(zhuǎn)電機(jī)控制設(shè)置,否則繼續(xù)判斷</p><p>  CJNE A, #13, KE_NEXT7;若鍵號(hào)≠13,轉(zhuǎn)減速設(shè)置,</p><p><b>  ;則順序設(shè)置加速</b></p><p> 

50、 MOV A, SD;取當(dāng)前速度</p><p>  CJNE A, #7, KE_NEXT6;若當(dāng)前速度≠7,轉(zhuǎn)速度加1檔</p><p>  LJMP KE_NEXT;否則當(dāng)前速度為最大值,轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT6:</b></p><p>  INC

51、 SD;當(dāng)前速度增加1檔</p><p>  LJMP KE_NEXT;轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT7:</b></p><p>  MOV A, SD;取當(dāng)前速度</p><p>  CJNE A, #0, KE_NEXT8;若當(dāng)前速度≠0

52、,轉(zhuǎn)速度減1檔</p><p>  LJMP KE_NEXT;否則當(dāng)前速度為最小值,轉(zhuǎn)子程序返回</p><p>  KE_NEXT8: </p><p>  DEC SD;當(dāng)前速度減1檔</p><p>  LJMP KE_NEXT;轉(zhuǎn)子程序返回</p><p

53、>  B_SET: </p><p>  MOV BWB, SWB;步數(shù)十萬(wàn)位移至百萬(wàn)位</p><p>  MOV SWB, WB;步數(shù)萬(wàn)位移至十萬(wàn)位</p><p>  MOV WB, QB;步數(shù)千位移至萬(wàn)位</p><p>  MOV QB, BB;

54、步數(shù)百位移至千位</p><p>  MOV BB, SB;步數(shù)十位移至百位</p><p>  MOV SB, GB;步數(shù)個(gè)位移至十位</p><p>  MOV GB, A;步數(shù)新數(shù)移至個(gè)位</p><p>  LJMP KE_NEXT;轉(zhuǎn)子程序返回</p><p&

55、gt;<b>  DJ_SET:</b></p><p>  MOV DPTR, #SRDS_TAB;DPTP指向控制與顯示表首地址</p><p>  MOVC A, @A+DPTR;取控制狀態(tài)</p><p>  MOV JK, A;控制狀態(tài)存入控制單元</p><p><b&g

56、t;  KE_NEXT:</b></p><p>  RET ;子程序返回</p><p>  IN_TAB:DB 77H, B7H ,D7H, E7H,7BH ,BBH ,DBH ,EBH;輸入鍵鍵號(hào)查詢表</p><p>  DB 7DH, BDH ,DDH ,EDH,7EH ,BEH ,DEH</p>&l

57、t;p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H </p><p>  DB 82H ,F8H, 80H, 90H ,1, 2,3 ;電機(jī)啟/??刂坪惋@示段選碼表</p><p><b>  鍵盤掃描程序代碼:</b></p><p><b>  KUNM_SUB:</b

58、></p><p>  MOV P1, #0FFH;鍵盤輸入口置1</p><p>  CLR P1.4;掃描第一列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.4;關(guān)閉掃描第一列</p><p>  CLR

59、P1.5;掃描第二列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.5;關(guān)閉掃描第二列</p><p>  CLR P1.6;掃描第三列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p&g

60、t;  SETB P1.6;關(guān)閉掃描第三列</p><p>  CLR P1.6;掃描第四列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.6;關(guān)閉掃描第四列</p><p>  RET ;子程序返回</p>

61、<p><b>  3.3顯示程序</b></p><p>  實(shí)現(xiàn)功能:根據(jù)轉(zhuǎn)速控制單元SD和步數(shù)控制單元GB(個(gè)位)、SB(十位)、BB(百位)、QB(千位)、WB(萬(wàn)位)、SWB(十萬(wàn)位)、BWB(百萬(wàn)位)的內(nèi)容查詢SRKS_TAB取相應(yīng)顯示段碼送相應(yīng)顯示位顯示。電機(jī)啟/停控制和顯示段選碼表SRDS_TAB見程序所用到的查詢表及其說(shuō)明部分表4-3;程序流程圖如圖3-4所示;&

62、lt;/p><p>  8位八段數(shù)碼管顯示方法:由硬件結(jié)構(gòu)可知,步數(shù)顯示7位八段數(shù)碼管和速度顯示1位數(shù)碼管的段選線并聯(lián)在一起由單片機(jī)P2口控制,而各位的共陰極點(diǎn)分別由相應(yīng)的P3口控制,實(shí)現(xiàn)各位的分時(shí)選通,構(gòu)成8位的動(dòng)態(tài)顯示。根據(jù)實(shí)際情況,每位顯示的字符不同,因此軟件設(shè)計(jì)必須采用掃描顯示方式,即在每一個(gè)瞬間只使某一位顯示相應(yīng)字符。在此瞬間,段選碼由控制P2口輸出需顯示的段碼,位選P3口輸出位選碼選通該位顯示相應(yīng)字符。如

63、此輪流,使每一位顯示該應(yīng)顯示的字符,并延時(shí)一段時(shí)間,這里延時(shí)3ms,以造成視覺(jué)暫留效果。</p><p><b>  顯示代碼如下:</b></p><p>  DISP_SUB:;顯示子程序</p><p>  MOV P2, #0FFH;</p><p>  MOV P3, #00H

64、;關(guān)顯示</p><p>  MOV R7, #8;設(shè)置顯示位數(shù)</p><p>  MOV R0, GB;取步數(shù)個(gè)位顯示數(shù)字</p><p>  MOV DPTR, #SRDS_TAB;DPTR指向控制與顯示段碼表首地址</p><p>  MOV A, #01H;取步數(shù)位顯示控制字</p&g

65、t;<p>  PUSH ACC;保護(hù)步數(shù)位顯示控制字</p><p>  MOV A, @R0;取步數(shù)顯示數(shù)字</p><p>  MOVC A, @A+DPTR;取顯示段碼</p><p>  MOV P2, A;送顯示</p><p>  POP ACC;取出位顯示

66、控制字</p><p>  MOV P3, A;打開位顯示</p><p><b>  DLOOP2:</b></p><p>  MOV R6, #3 ;延時(shí)3ms</p><p>  LCALL DEL_TAB;調(diào)用延時(shí)1ms程序</p><p>  DJNZ

67、 R6, DLOOP2;判斷時(shí)是否到,未到剛返回延時(shí),否則往下執(zhí)行</p><p>  RL A;取下一位顯示控制字</p><p>  INC R0;R0;指向下一位顯示數(shù)字存儲(chǔ)地址</p><p>  DJNZ R7, DLOOP1;若(R7)-1=0,八位顯示完成,往下執(zhí)行,否則轉(zhuǎn)顯示下一位</p><

68、p>  MOV P2, #0FFH;</p><p>  MOV P3, #00H;關(guān)顯示</p><p>  RET ;子程序返回</p><p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H </p><p>  DB 82H ,F8H, 80H, 9

69、0H ,1, 2,3 ;電機(jī)啟/??刂坪惋@示段選碼表</p><p><b>  電機(jī)控制程序</b></p><p>  實(shí)現(xiàn)功能:根據(jù)地址單元JK的內(nèi)容控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停止。時(shí)間初值查詢表SD_TAB見程序所用到的查詢表及其說(shuō)明部分表4-1;單片機(jī)輸出控制字查詢表MQ_TAB見程序所用到的查詢表及其說(shuō)明部分表4-4;程序流程圖如圖3-5所示:</p&

70、gt;<p>  電機(jī)控制程序代碼如下:</p><p>  KT0_INT: ;電機(jī)控制程序中斷服務(wù)程序</p><p>  MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址</p><p>  MOV A,SD ;取轉(zhuǎn)速查詢表偏移量</p><p>  MOVC A,@A+D

71、PTR ;取定時(shí)器低位初值</p><p>  MOV TL0,A ;裝入定時(shí)器低位初值</p><p>  MOV A,SD ;取轉(zhuǎn)速查詢表偏移量</p><p>  ADD A,#10 ;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備</p><p>  DA A ;十進(jìn)制數(shù)調(diào)整</p&

72、gt;<p>  MOVC A,@A+DPTR ;取定時(shí)器高位初值</p><p>  MOV TH0,A ;裝入定時(shí)器高位初值</p><p>  MOV R7, #7 ;循環(huán)7次,分別判斷7位步數(shù)是否為0</p><p>  MOV R0, #GB ;R0指向步數(shù)個(gè)位</p><p>&

73、lt;b>  KLOOP1:</b></p><p>  MOV A, @R0 ;取位步數(shù)</p><p>  CJNE A, #0, KNEXT1 ;若位步數(shù)=0,判斷下一位,否則轉(zhuǎn)判斷電機(jī)控制狀態(tài)</p><p>  INC R0 ;R0指向步數(shù)下一位地址</p><p>  DJNZ R

74、7, KLOOP1 ;若(R7)-1=0,則步數(shù)每一位均為0,轉(zhuǎn)</p><p>  LJMP KNEXT ;程序返回</p><p><b>  KNEXT1:</b></p><p>  MOV A, JK ;取電機(jī)控制狀態(tài)</p><p>  CJNE A, #1, KNEXT2

75、 ;若電機(jī)控制狀態(tài)=1,電機(jī)正轉(zhuǎn),否則判斷是否反轉(zhuǎn)</p><p>  LJMP ZZKZ ;轉(zhuǎn)電機(jī)正轉(zhuǎn)控制</p><p><b>  KNEXT2:</b></p><p>  CJNE A, #2, KNEXT ;若電機(jī)控制狀態(tài)≠2,電機(jī)處于停止?fàn)顟B(tài),</p><p>  ;轉(zhuǎn)返回,否則電機(jī)

76、 </p><p>  MOV A, KZ ;取上一次電機(jī)控制表偏移量</p><p>  CJNE A, #0, KNEXT3 ;若上一次電機(jī)控制表偏移量為不0,轉(zhuǎn)減1,若為0,</p><p>  MOV A, #5 ;則電機(jī)控制表偏移量取5</p><p>  LJMP KN

77、EXT6;</p><p><b>  KNEXT3:</b></p><p>  DEC A ;電機(jī)控制表偏移量減1</p><p>  LJMP DNEXT5 ;轉(zhuǎn)取脈沖輸出</p><p><b>  ZZKZ:</b></p><p>  MOV

78、 A, KZ ;取上一次電機(jī)控制表偏移量</p><p>  CJNE A, #5,KNEXT4 ;若上一次電機(jī)控制表偏移量為不5,轉(zhuǎn)加1,若為5,</p><p>  MOV A, #0 ;則電機(jī)控制表偏移量取0</p><p>  LJMP KNEXT5 ;轉(zhuǎn)取脈沖輸出</p><p><b&

79、gt;  KNEXT4:</b></p><p>  INC A ;電機(jī)控制表偏移量加1</p><p><b>  KNEXT5:</b></p><p>  MOV KZ, A ;保存當(dāng)前電機(jī)控制表偏移量</p><p>  MOV DPTR,#MQ_TAB ;DPTR指向電機(jī)

80、控制表首地址</p><p>  MOVC A, @A+DPTR ;取輸出脈沖</p><p>  MOV P0, A ;輸出脈沖</p><p>  MOV R7, #6 ;步數(shù)減1循環(huán)6次</p><p>  MOV R0, #GB ;R0指向步數(shù)個(gè)位儲(chǔ)存單元</p><p>

81、<b>  KLOOP2:</b></p><p>  MOV A ,@R0 ;取位步數(shù)</p><p>  CJNE A, #0, KNEXT6 ;若位步數(shù)≠0,轉(zhuǎn)位步數(shù)-1,否則</p><p>  MOV @R0, #9 ;往該位步數(shù)存9</p><p>  INC R0 ;R

82、0指向下一位</p><p>  DJNZ R7, DLOOP2;若(R7)-1=0,六位判斷完成,百萬(wàn)位減1,否則繼</p><p><b>  ;續(xù)判斷</b></p><p>  DEC BWB ;百萬(wàn)位減1</p><p>  LJMP KNEXT ;轉(zhuǎn)程序返回</p>&l

83、t;p><b>  KNEXT6:</b></p><p>  DEC A ;位步數(shù)-1</p><p>  MOV @R0, A ;存回該單元</p><p><b>  KNEXT:</b></p><p>  RET ;程序返回</p>

84、<p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH;定時(shí)器初值查詢</p><p>  DB F6H, FBH, FCH, FDH, FEH, FEH, FEH, FEH, FFH, FFH</p><p>  MQ_TAB:DB 01H, 03H ,02H, 06H,04H ,05H

85、;單片機(jī)輸出控制字查詢表</p><p><b>  延時(shí)1ms程序</b></p><p>  實(shí)現(xiàn)功能:利用軟件循環(huán)運(yùn)行延時(shí)約1ms。</p><p>  DEL_SUB:MOV R7, #2</p><p>  DLE1: MOV R6 ,#248</p><p>  DEL2:

86、 DJNZ R6, DEL2</p><p>  DJNZ R7, DEL1</p><p><b>  RET</b></p><p>  查指令表可知執(zhí)行MOV指令需要用1個(gè)機(jī)器周期,DJNZ指令需要用2個(gè)機(jī)器用期,本系統(tǒng)使用12MHz晶振,一個(gè)機(jī)器周期時(shí)間長(zhǎng)度為1us,所以該段程序執(zhí)行時(shí)間為:</p><p&g

87、t;  [1+(1+2×248+2)×2+2]*1us=999us≈1ms</p><p>  程序所用到的查詢表及其說(shuō)明</p><p>  時(shí)間初值查詢表SD_TAB</p><p>  根據(jù)步進(jìn)電機(jī)原理,步進(jìn)電機(jī)的轉(zhuǎn)速為</p><p>  n=60f/(mZrC)</p><p>  式中:

88、式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時(shí),C=1;而采用單雙拍方式時(shí),C=2;m為步進(jìn)電機(jī)相數(shù),當(dāng)Zr為步進(jìn)電機(jī)轉(zhuǎn)子數(shù),,f為頻率,單位為Hz ,n為轉(zhuǎn)速,單位為r/min。</p><p>  因此,當(dāng)步進(jìn)電機(jī)轉(zhuǎn)速為n時(shí),步進(jìn)電機(jī)的拍數(shù)切換時(shí)間與轉(zhuǎn)速的關(guān)系為</p><p>  t=1/f=60/(nmZrC)</p><p>  式中:t為電機(jī)拍數(shù)切換時(shí)間,單位為

89、秒。由此可以算出程序中定時(shí)器T0所需定時(shí)時(shí)間T。</p><p>  根據(jù)程序查指令表可知定時(shí)器定時(shí)到開始到脈沖輸出需要運(yùn)行約648個(gè)晶振周期數(shù)的程序,系統(tǒng)用的是12MHz晶振,即運(yùn)行此段程序需要648/12=54us的時(shí)間,故定時(shí)器T0所需定時(shí)時(shí)間T與轉(zhuǎn)速的關(guān)系為</p><p>  T=t-(54×10-3)=60/(nmZrC) -(54×10-3)</p&

90、gt;<p>  式中:定時(shí)器T0所需定時(shí)時(shí)間T的單位為秒。</p><p>  由選用電機(jī)的參數(shù)可知:步進(jìn)電機(jī)相數(shù)m=3,因運(yùn)行采用單雙拍方式,C=2,步進(jìn)電機(jī)轉(zhuǎn)子數(shù)Zr=40。而定時(shí)器工作在模式1下初值X與定時(shí)時(shí)間T的關(guān)系為</p><p>  X=216-T×106</p><p>  因此,由公式可算得電機(jī)轉(zhuǎn)速與定時(shí)器初值關(guān)系表如表4

91、-1所示;</p><p>  電機(jī)轉(zhuǎn)速與定時(shí)器初值關(guān)系表 表4-1</p><p>  定時(shí)器初值查詢表SD_TAB如下:</p><p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH</p><p>  DB F6H, FBH, FCH, FDH, FE

92、H, FEH, FEH, FEH, FFH, FFH</p><p>  輸入鍵鍵號(hào)查詢表IN_TAB</p><p>  輸入鍵鍵號(hào)與P1口狀態(tài)關(guān)系如下表4-2所示:</p><p>  輸入鍵鍵號(hào)與P1口狀態(tài)關(guān)系表 表4-2</p><p>  輸入鍵鍵號(hào)查詢表IN_TAB如下:</p><p>  IN_TA

93、B:DB 77H, B7H ,D7H, E7H,7BH ,BBH ,DBH ,EBH</p><p>  DB 7DH, BDH ,DDH ,EDH,7EH ,BEH ,DEH</p><p>  電機(jī)啟/停控制和顯示段選碼表SRDS_TAB</p><p>  電機(jī)啟/??刂婆c其狀態(tài)、顯示數(shù)與顯示段選碼關(guān)系表如下表4-3:</p><p&

94、gt;  電機(jī)啟/??刂婆c其狀態(tài)、顯示數(shù)與顯示段選碼關(guān)系表</p><p>  電機(jī)啟/??刂坪惋@示段選碼查詢表SRDS_TAB如下:</p><p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H ,82H ,F8H</p><p>  DB 80H, 90H ,1, 2,3 </p><p> 

95、 單片機(jī)輸出控制字查詢表MQ_TAB</p><p>  步進(jìn)電機(jī)采用單雙六拍方式輸出,電機(jī)繞組通電與單片機(jī)輸出控制字關(guān)系如下表4-4:</p><p>  電機(jī)繞組通電與單片機(jī)輸出控制字關(guān)系表 表4-4</p><p>  單片機(jī)輸出控制字查詢表MQ_TAB如下:</p><p>  MQ_TAB:DB 01H, 03H ,02H

96、, 06H,04H ,05H </p><p>  附錄一:系統(tǒng)電路原理</p><p>  附錄二:系統(tǒng)軟件程序清單</p><p>  ORG 0000H</p><p>  LJMP MAIA</p><p>  ORG 000BH</p><p>  LJMP DJKZ</

97、p><p>  ORG 0050H</p><p>  MAIN:;主程序</p><p>  GB EQU 40H ;定義步數(shù)十位存儲(chǔ)單元</p><p>  SB EQU 40H ;定義步數(shù)百位存儲(chǔ)單元</p><p>  BB EQU 40H ;定義步數(shù)千位

98、存儲(chǔ)單元</p><p>  QB EQU 40H ;定義步數(shù)萬(wàn)位存儲(chǔ)單元</p><p>  WB EQU 40H ;定義步數(shù)十萬(wàn)位存儲(chǔ)單元</p><p>  SWB EQU 40H ;定義步數(shù)百萬(wàn)位存儲(chǔ)單元</p><p>  BWB EQU 40H ;定義步數(shù)個(gè)位存儲(chǔ)單元</p

99、><p>  SD EQU 40H ;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲(chǔ)單元</p><p>  JK EQU 40H ;定義電機(jī)控制表偏移量存儲(chǔ)單元</p><p>  KONZ EQU 40H ;定義輸入口按鍵按下狀態(tài)暫存單元</p><p>  KBL EQU 40H ;定義輸入口按鍵按下狀態(tài)

100、中間變量存儲(chǔ)單元</p><p>  MOV P0,#00H ;I/O口初始化</p><p>  MOV P1,#0FFH ;</p><p>  MOV P2,#0FFH ;</p><p>  MOV P3,#0FFH ;</p><p>  MOV GB,#00H

101、;步數(shù)個(gè)位初始化</p><p>  MOV SB,#00H ;步數(shù)十位初始化</p><p>  MOV BB,#00H ;步數(shù)百位初始化</p><p>  MOV QB,#00H ;步數(shù)千位初始化</p><p>  MOV WB,#00H ;步數(shù)萬(wàn)位初始化</p><p&

102、gt;  MOV SWB,#00H ;步數(shù)十萬(wàn)位初始化</p><p>  MOV BWB,#00H ;步數(shù)百萬(wàn)位初始化</p><p>  MOV SD,#1 ;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/min</p><p>  MOV JK,#0;電機(jī)控制狀態(tài)開機(jī)為停止</p><p>  MOV KZ,#0

103、 ;速度查詢表偏移初始化0</p><p>  MOV TMOD,#01H ;T0控制模式為1</p><p>  MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址</p><p>  MOV A,SD ;取轉(zhuǎn)速查詢表偏移量</p><p>  MOVC A,@A+DPTR ;取定時(shí)器

104、低位初值</p><p>  MOV TL0,A ;裝入定時(shí)器低位初值</p><p>  MOV A,SD;取轉(zhuǎn)速查詢表偏移量</p><p>  ADD A,#10;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備</p><p>  DA A;十進(jìn)制數(shù)調(diào)整</p><p&

105、gt;  MOVC A,@A+DPTR;取定時(shí)器高位初值</p><p>  MOV TH0,A;裝入定時(shí)器高位初值</p><p>  MOV IE,#82H ;T0開中斷</p><p>  SETB TR0 ;啟動(dòng)T0</p><p><b>  LOOP:</b><

106、/p><p>  LCALL KEY_SUB ;調(diào)用鍵盤掃描錄入程序</p><p>  LCALL DISP_SUB ;調(diào)用顯示程序</p><p>  LJMP LOOP ;返回LOOP</p><p>  KEY_SUB:;鍵盤錄入子程序</p><p>  LCAL

107、L KNUM_SUB;調(diào)用鍵盤掃描程序</p><p>  MOV A, KONZ;保存初次掃描輸入狀態(tài)</p><p>  ORL A, #0FH ;輸入狀態(tài)高四位置1</p><p>  MOV KBL, A;保存</p><p>  CJNE A, #0FFH, KE_

108、NEXT1;(A)≠0FFH,有按鍵輸入,轉(zhuǎn)去抖動(dòng)</p><p>  LJMP KE_NEXT;否則轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT1:</b></p><p>  MOV R7, #10 ;延時(shí)10ms去抖動(dòng)</p><p>  LCALL DEL_SUB

109、;調(diào)用延時(shí)1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  LCALL KNUM_SUB;再次調(diào)用鍵盤掃描程序</p><p>  CJNE A, KONZ, KE_NEXT;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵</p><p> ??;釋放否則轉(zhuǎn)子程序返回<

110、/p><p>  KE_LOOP1: </p><p>  LCALL KUNM_SUB;再次調(diào)用鍵盤掃描程序</p><p>  ORL A, #0FH;鍵盤輸入狀態(tài)高四位置1</p><p>  CJNE A, #0FFH, KE_LOOP1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動(dòng),否</p>

111、<p> ??;則轉(zhuǎn)KE_LOOP1再次判斷</p><p>  MOV R7, #10 ;延時(shí)10ms去抖動(dòng)</p><p>  LCALL DEL_SUB;調(diào)用延時(shí)1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  MOV DPTR, #IN_TAB;

112、DPTR指向鍵號(hào)查詢表首地址</p><p>  MOV R7, #0;從0號(hào)鍵開始掃描</p><p><b>  KE_LOOP2:</b></p><p>  MOV A, R7;取鍵號(hào)</p><p>  MOVC A, @A+DPTR;查表取出相應(yīng)鍵號(hào)狀態(tài)碼</p&g

113、t;<p>  CJNE A, KONZ, KE_NEXT2;與輸入狀態(tài)相比較,若</p><p>  LJMP KE_NEXT3;相等,則為該號(hào)鍵按下,轉(zhuǎn)取鍵號(hào)</p><p><b>  KE_NEXT2:</b></p><p>  INC R7;否則取下一鍵號(hào)</p><

114、p>  LJMP KE_LOOP2;轉(zhuǎn)再次掃描</p><p><b>  KE_NEXT3:</b></p><p>  MOV A, R7;取按下鍵鍵號(hào)</p><p>  CJNE A, #9, KE_NEXT4;若鍵號(hào)=9,轉(zhuǎn)設(shè)置步數(shù)</p><p>  LJMP B_S

115、ET;否則轉(zhuǎn)判斷是否<9</p><p><b>  KE_NEXT4:</b></p><p>  JC B_SET;若鍵號(hào)<9,轉(zhuǎn)設(shè)置步數(shù),否則順序判斷</p><p>  CJNE A, #12, KE_NEXT5;若鍵號(hào)≠12,</p><p>  LJMP DJ_SET

116、;否則轉(zhuǎn)電機(jī)控制設(shè)置</p><p><b>  KE_NEXT5:</b></p><p>  JC DJ_SET;若鍵號(hào)<12,轉(zhuǎn)電機(jī)控制設(shè)置,否則繼續(xù)判斷</p><p>  CJNE A, #13, KE_NEXT7;若鍵號(hào)≠13,轉(zhuǎn)減速設(shè)置,</p><p><b> ??;則

117、順序設(shè)置加速</b></p><p>  MOV A, SD;取當(dāng)前速度</p><p>  CJNE A, #7, KE_NEXT6;若當(dāng)前速度≠7,轉(zhuǎn)速度加1檔</p><p>  LJMP KE_NEXT;否則當(dāng)前速度為最大值,轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT

118、6:</b></p><p>  INC SD;當(dāng)前速度增加1檔</p><p>  LJMP KE_NEXT;轉(zhuǎn)子程序返回</p><p><b>  KE_NEXT7:</b></p><p>  MOV A, SD;取當(dāng)前速度</p><p

119、>  CJNE A, #0, KE_NEXT8;若當(dāng)前速度≠0,轉(zhuǎn)速度減1檔</p><p>  LJMP KE_NEXT;否則當(dāng)前速度為最小值,轉(zhuǎn)子程序返回</p><p>  KE_NEXT8: </p><p>  DEC SD;當(dāng)前速度減1檔</p><p>  LJMP

120、 KE_NEXT;轉(zhuǎn)子程序返回</p><p>  B_SET: </p><p>  MOV BWB, SWB;步數(shù)十萬(wàn)位移至百萬(wàn)位</p><p>  MOV SWB, WB;步數(shù)萬(wàn)位移至十萬(wàn)位</p><p>  MOV WB, QB;步數(shù)千位移至萬(wàn)位<

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論