步進電機控制程式

步進電機控制程式是一個電腦的控制程式,用來控制電機的運行。

MOV P2,#0FFH

MOV R7,#00H

;R7為電機轉動正反狀態暫存器:為1時為正轉,為2時為反轉,為0時為停止

CLR F0 ;F0為速度狀態,為0慢,為1加速

CLR P3.7 ;關七段數碼顯示開關,為1開,為0關

CLR P3.4 ;同上

MOV 30H,#00H;數碼管要顯示的值

MOV 31H,#00H;第一個數碼管顯示的值

MOV 32H,#00H; 第二個數碼管顯示的值

clr 08h

clr 09h; 按次數正反轉狀態位

MAIN:MOV A,P2; 掃描p2口按鍵

CPL A

JZ NOKEY; 沒鍵就跳到nokey

ACALL qudou ;去抖動

MOV A,P2; 再次掃描p2口看是否為真的按下

CPL A

JB ACC.0,KEY1

JB ACC.1,KEY2

JB ACC.2,KEY3

JB ACC.3,KEY4

NOKEY:CJNE R7,#01H,nokey1

mov dptr,#tab1

acall fuzhi

AJMP main

nokey1:CJNE R7,#02H,finish

mov dptr,#tab2

acall fuzhi

finish:AJMP MAIN

KEY1:JNB P2.0,$ ;按鍵控制正轉

MOV R7,#01H

mov r0,#0

AJMP NOKEY

KEY2:JNB P2.1,$ ;按鍵控制反轉

MOV R7,#02H

mov r0,#0

AJMP NOKEY

KEY3:JNB P2.2,$ ;按鍵控制速度

CPL F0

AJMP NOKEY

KEY4:JNB P2.3,$ ;stop按鍵

CJNE R7,#00H,KEY44;判斷步進電機是否已經停止,沒有就執行停止,否則就調轉動次數

Acall led71

acall led72

ACALL XZCS;調旋轉次數

KEY44:MOV R7,#00H;

CLR F0

AJMP MAIN

LED71:mov dptr,#tab3; 十位數數碼管顯示

MOV A,31H

MOVC A,@A+DPTR

SETB P3.7

MOV P0,A

ACALL QUDOU

CLR P3.7

ret

led72:mov dptr,#tab3; 個位數數碼管顯示

MOV A,32H

MOVC A,@A+DPTR

MOV P0,A

SETB P3.4

ACALL QUDOU

CLR P3.4

RET

XZCS:MOV A,P2

CPL A

JZ MJ;沒鍵按下

ACALL qudou ;去抖動

MOV A,P2

CPL A

JB ACC.0,JIAN1

JB ACC.1,JIAN2

JB ACC.2,JIAN3;第四鍵表示次數已經調好了,按照數碼管顯示次數轉動

JB ACC.3,JIAN4

MJ: ACALL LED71

acall led72

SJMP XZCS

JIAN1:ACALL LED71;十位數數碼管的數值調節,k0按一次加一

acall led72

JNB P2.0,JIAN1

MOV A,31H

CJNE A,#09H,JIA1

MOV 31H,#0

AJMP XZCS

JIA1: INC A

MOV 31H,A

AJMP XZCS

JIAN2:ACALL LED71; 個位數數碼管的數值調節,k1按一次加一

acall led72

JNB P2.1,JIAN2

MOV A,32H

CJNE A,#09H,JIA11

MOV 32H,#0

AJMP XZCS

JIA11: INC A

MOV 32H,A

AJMP XZCS

JIAN4:JNB P2.3,$; 返回並且停止轉動

RET

JIAN3:ACALL LED71 ;控制步進電機的轉動

acall led72

JNB P2.2,JIAN3

MOV A,31H

mov b,#10

mul ab

add a,32h; 求出數碼管顯示的數值

jjxz: MOV R6,A; 控制轉動次數

JXZ: cjne r6,#00h,jxz1 ;如果是0就不要轉了,返回

ajmp xzcs

jxz1: MOV R0,#50; 轉動一圈需要的步距角數

LOOPP:jnb p2.2,fanzhuan; k2鍵控制轉動的方向,按一下就改變一下

jnb p2.3,jian44; k3鍵按一下停止轉動

jian44:acall qudou

jnb p2.3,jian4

sjmp cc

fanzhuan:acall qudou

jnb p2.2,fanzhuan1

fanzhuan1:acall led71

acall led72

jnb p2.2,fanzhuan1

cpl 09h

cc: jnb 09h,aa

mov dptr,#tab2

sjmp bb

aa: MOV DPTR,#TAB1

bb: ACALL FUZHI

djnz R0,LOOPP;一圈完了

MOV A,32H; 數碼管減一

CJNE A,#00H,DEC11

DEC 31H

MOV 32H,#0aH

DEC11:DEC 32H

DJNZ R6,JXZ; 繼續轉

AJMP xzcs

FUZHI:MOV R2,#8; 給p1口送脈衝

MOV R3,#0

LOOP:MOV A,R3

MOVC A,@A+DPTR

MOV P1,A

INC R3

cjne r0,#00h,loop1

ACALL DELAY

sjmp loop2

loop1:push acc

push DPL

push DPH

jnb 08h,loop3

acall led72

ajmp loop4

loop3:acall led71

loop4:cpl 08h

pop dph

pop dpl

pop acc

loop2:DJNZ R2,LOOP

RET

delay: JNB F0,DELAY2;控制步進電機中途延時時間,即速度

MOV R4,#6

AJMP DELAY1

DELAY2:mov r4,#12

delay1:mov r5,#250

djnz r5,$

djnz r4,delay1

ret

QUDOU:MOV R4,#6 ;延時去抖動3ms

QUDOU1:MOV R5,#250

DJNZ R5,$

DJNZ R4,QUDOU1

RET

TAB1:DB 0f7h,0f5h,0fdh,0f9h,0fbh,0fah,0feh,0f6h;正轉

TAB2:DB 0f6h, 0feh,0fah,0fbh,0f9h,0fdh,0f5h,0f7h;反轉

TAB3:DB 08H,3BH,14H,11H,23H,41H,40H,1BH,00H,01H ;七段數碼顯示

END

相關詞條

熱門詞條

聯絡我們