步进电机控制程序如下:
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