附件:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP Speed_Up
ORG 0013H
LJMP Speed_Down
ORG 0100H
MAIN:
;打开外部中断IT0/IT1
SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
;扫描键盘,无键按下显示0,并继续扫描
MAKEY:
MOV DPTR,#TAB
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
MOV P3,#0FFH
MOV A,P3
CPL A
JZ MAKEY
LCALL D10MS
JZ MAKEY
;当有键按下时,启动步行电机转动
Speed EQU 20H
Num EQU 21H
MOV Speed,#60 ;Speed初始化,Speed控制延时的时间,即脉冲的频率
MOV Num,#1 ;Num初始化,Num存放数码管显示的转速数值
JNB ACC.4,TO_TWO ;默认设置为正向转动,转速为1,当有反向键按下,按反向转动
;------------------------ 1号程序:控制步行电机正转--------------------------------
TO_ONE:
MOV R7,#4
MOV A,#01H
MOV P3,#0FFH
LP1:
MOV P1,A
LCALL DELAY
LCALL DISPLAY
RL A ; 正向输入脉冲信号
DJNZ R7,LP1
JNB P3.4,TO_TWO ; 有反向键按下,跳转到2号程序
LJMP TO_ONE
;------------------------2号程序:控制步行电机反转---------------------------------- TO_TWO:
MOV R7,#4
MOV A,#08H
MOV P3,#0FFH
LP2:
MOV P1,A
LCALL DELAY
LCALL DISPLAY
RR A ; 反向输入脉冲信号
DJNZ R7,LP2
JNB P3.5,TO_ONE ;有正向键按下,跳转到1号程序
LJMP TO_TWO
;----------------------------中断服务程序----------------------------------------------- Speed_Up: ; 外部中断IT0,控制加速
PUSH ACC
LCALL D10MS
MOV A,Speed
CJNE A,#12,L1 ; 最大速度时,速度不再增加
LJMP L2
L1: ; 速度加1(减小脉冲周期)
SUBB A,#12
MOV Speed,A
INC Num
L2: POP ACC
RETI
Speed_Down: ;外部中断IT1,控制减速
PUSH ACC
LCALL D10MS
MOV A,Speed
CJNE A,#60,L3 ;最小速度时,速度不再减小
LJMP L4
L3: ;速度减1(增大脉冲周期)
ADD A,#12
MOV Speed,A
DEC Num
L4: POP ACC
RETI
;----------------------------------延时、显示子程序--------------------------------------------- DISPLAY: ;显示子程序,显示步行电机的转速
PUSH ACC
MOV A,Num
MOVC A,@A+DPTR
MOV P0,A
POP ACC
RET
DELAY: ;延时子程序,用于产生脉冲信号,并可通过改变延时来改变脉冲的频率PUSH ACC
MOV R6,Speed
d1:
MOV R5,#100
DJNZ R5,$
DJNZ R6,d1
POP ACC
RET
D10MS: ;延时10ms,软件去抖动
MOV R4,#10
D1MS:
MOV R3,#249
DL: NOP
NOP
DJNZ R3,DL
DJNZ R4,D1MS
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;速度显示:0~5
END。