START: MOV DPTR , #TAB1
MOV R0, #03H
MOV R1 , #4H
MOV R4, #00H
MOV P0, #03H
WAIT: MOV P0, R0
MOV P0, #0FFH
JNB P3.4,TIZ ;P3.4有停止鍵按下時,跳到停止子程序
JNB P3.0,ZHENG ;P3.0有啟動正轉鍵按下時,跳到停止子程序
JNB P3.1,FAN
SJMP WAIT
ZHENG : ;正轉子程序
MOV A,R4
MOVC A,@A+DPTR
ACALL DELAY
INC R4
AJMP KEY
FAN: ;反轉子程序
MOV R4,#6
MOV A,R4
MOVC A,@A+DPTR
MOV P3,A ;
ACALL DELAY
AJMP KEY
KEY: MOV P3,#0FFH ;KEY檢測,賦初值
JB P3.4,ZZ1
AJMP TIZ
TIZ: MOV P0,#00H ;停止子程序
AJMP KEY
ZZ1: JB P3.0,FZ1 ;正轉按鍵檢測,有鍵按下轉到FZI
CJNE R4,#8,LOOPZ;循環次數是否為8,為8則清0
MOV R4,#0
LOOPZ: MOV A,R4 ;讀電機狀態顯示
MOVC A,@A+DPTR
MOV P0,A ;賦給P0,顯示1為正轉,2為反轉,3為加速,4為減速
SETB P1.1 ;賦高電平,關閉反向狀態燈
CPL P1.0 ;開正轉狀態燈
JNB P3.2,JIASUZ ;加速子程序
JNB P3.3,JIANSUZ ;減速子程序
ACALL DELAY
INC R4
AJMP KEY
FZ1:
JB P3.1,KEY
CJNE R4,#255,LOOPF
MOV R4,#8
LOOPF: DEC R4
MOV A,R4
MOVC A,@A+DPTR ;讀脈沖
MOV P0,A ;給步進電機輸入脈沖
SETB P1.0
CPL P1.1
JNB P3.2,JIASUF ;加速按鍵檢測
JNB P3.3,JIANSUF ;減速按鍵檢測
ACALL DELAY
AJMP KEY ;跳轉到KEY檢測子程序
DELAY:MOV A,R1 ;延時子程序
MOV R6,A
DELAY2:MOV R5,#6H
DD2:MOV R7,#0
DD3:DJNZ R7,DD3
DJNZ R5,DD2
DJNZ R6,DELAY2
RET
DELAY1:
MOV R6,#20H
DD4: MOV R5,#02H
DD5: MOV R7,#0
DD6: DJNZ R7,DD6
DJNZ R5,DD5
DJNZ R6,DD4
RET
JIASUZ: ;加速的按鍵檢測
ACALL DELAY1
CJNE R1,#02,L1
JMP L2
L1: DEC R1
L2: JMP LOOPZ
JIANSUZ: ;減速的按鍵檢測
ACALL DELAY1
CJNE R1,#08H,L3
JMP L4
L3: INC R1
L4: JMP LOOPZ ;返回LOOPZ,循環
JIASUF: ;加速子程序
ACALL DELAY1
CJNE R1,#02H,L5
JMP L6
L5: DEC R1
L6: JMP LOOPF
JIANSUF: ;減速子程序
ACALL DELAY1
CJNE R1,#08H,L7
JMP L8
L7: INC R1
L8: JMP LOOPF
TAB1:DB 02H,06H,04H,0CH
DB 08H,09H,01H,03H
END