电路说明:
1. 键盘接P0口
2. 启动电路接P2口的P2.0~P2.3
3. 显示电路接P1口
程序清单:
ORG 0000H
START: MOV 30H,#00H ; 清除键盘显示器RAM地址30H~32H
MOV 31H,#00H
MOV 32H,#00H
MOV P1,#00H ; 显示00
MOV P2,#0FFH ; 步进马达停止运转
SETB P3.0 ; P3.0 LED熄,表示正转
MOV 21H,#05H ; 正转至TABLE3 取码指针初值
L1: ACALL KEY ; 调用键盘扫描子程序
MOV 20H,A ; 键码值暂存入20H
XRL A,#0AH ; 是否按"*"
JZ SET0 ; 是则启动步进电机
MOV A,20H ; 取码值载入ACC
XRL A,#0BH ; 是否按"#"
JZ START ; 是则步进马达停止动转
MOV A,20H ; 取码值勤载入20H
XRL A,#0CH ; 是否按"A"
JZ CCW ; 是则设定正反
MOV A,20H ; 取码值暂存入场20H
XCH A,30H ; 现按键值存入(30H)地址
XCH A,31H ; 旧(30H)地址的值存入(31H)地址
MOV A,31H ; 将(30H)\(31H)合并为两位数
SWAP A ; 31H)为十位数
ORL A,30H ; 加(30H)个位数
MOV 32H,A ; 存入(32H)地址
MOV P1,A ; 输出至P1显示
JMP L1
;******************* 正返转设定程序 ***********************
CCW: CPL P3.0 ; 将p3.0反相,正反转换
JB P3.0,FOR ; 检测P3.0=1?1为正转,0为反转
REV: MOV 21H,#00H ; 反转至TABLE3 的取码指针初值存入(21H)
JMP L1 ; 返回,继续进行键盘扫描
FOR: MOV 21H,#05H ; 正转至TABLE3的取码指针初值存入(21H)
JMP L1 ; 返回,继续进行键盘扫描
;************** 步进电机转动驱动控制程序 ******************
SET0: MOV A,32H ; 载入显示器值
CJNE A,#00H,SETX ; 是否为00?是则表示未设定转数
JMP L1 ; 继续进行键盘扫描
SETX: MOV R3,#20 ; 一转为20步
SET1: MOV R0,21H ; 载入取码指针值
SET2: MOV A,R0原文请找QQ324,9114
MOV DPTR,#TABLE3 ; 至TABLE3取码
MOVC A,@A+DPTR
JZ SET1 ; 是否取到"0"?
MOV P2,A ; 输出至P2运转
LCALL DELAY ; 延时时间决定转速
INC R0 毕业论文http://www.youerw.com/ ; 取下一步
DJNZ R3,SET2 ; 20步完?
MOV A,30H ; 是,则载入显示的个位数
CJNE A,#00H,B1 ; 个位数是否为00?
MOV A,31H ; 个位数为0,则载入十位数
CJNE A,#00H,B2 ; 十位数是否为0?
JMP START ; 十位个位都为0,则停止运转,返回
B1: DEC 30H ; 个位数不为0,则个位数减1
JMP B3
B2: MOV 30H,#09H ; 个位数为0,十位数不为0,则个位数为9
DEC 31H ; 十位数减1
JMP B3
B3: MOV A,31H ; 将十位数与个位数合并送32H,1988