1、反转单步走则类似。这个模块作为键盘主程序的子程序使用,使用键盘的第三行为功能键,操作步进电机的正反转,数字键送入NUM的值则控制电机的步数。功能键说明:“+”控制步进电机正向转NUM步“-“控制步进电机反向转NUM步“,”控制步进电机正向单步走“.”控制步进电机反向单步走正向走NUM步的程序流程图:(反向走NUM步的省略)正向单步走程序流程图:(反向单步的省略)四、源程序代码:CODE SEGMENT ASSUME CS:CODE,DS:CODESTART: MOV CH,00h ;键值左移4位存CH用,先初始化MOV CL,00h ;控制步进电机单步走用作标志 MOV DX,203H ;置8
2、255A控制口地址 MOV AL,90H ;A口输入,C口输出 OUT DX,ALLOOP1: MOV DX,202H ;8255A的C口 MOV AH,00000110B MOV AL,00000110B ;键盘第一行 OUT DX,AL MOV DX,200h ;8255A的A口 IN AL,DX ;获取列码 CMP AL,0FFH JNE LOOP2 ;有键按下列码全1无键按下扫描第二行 MOV AH,00000101B MOV AL,00000101B MOV DX,200h IN AL,DX CMP AL,0FFH JNE LOOP2第三行 MOV AH,00000011B MOV
3、AL,00000011B JMP LOOP1LOOP2: CALL Delay ;消除抖动 JE LOOP1 MOV BL,0FEH ;确定有键按下则求列值 MOV BH,0 ;BH存键值LOOP3: CMP AL,BL ;扫描列值 JE ONE CMP BH,7 ;所有列码都扫描完 JE LOOP1 ;重新检测按键 INC BH ROL BL,1 ;列码循环左移一位 JMP LOOP3ONE: CMP AH,00000110B ;第一行按键 JE ONE2 CMP AH,00000101B ;第二行按键 JE TWO2 CMP AH,00000011B ;第三行功能键 JE THREE2 C
4、ALL JUMP JMP wait1ONE2: CALL First ;调用第一行处理程序TWO2: CALL Second ;调用第二行处理程序THREE2:CALL Third ;调用第三行处理程序wait1:wait2: CMP AL,0FFh JNE wait2 ;等待按键 ORG 200HNUM DB ? ;存步进电机步数First PROC NEAR 开控制口 MOV AL,90h ;A口输入,C口输出 CMP CH,0 ;第一次执行按键 JZ CH0 ; ADD BH,CH ;显示八位,CH0: MOV DX,201H ;B口 MOV AL,BH ;键值送AL OUT DX,AL
5、 ;在二极管上显示BH即输入的键值 MOV DX,208H ;打开D/A控制直流电机转速 MOV NUM,AL ;步进电机转的步数 MOV CL,4 SAL BH,CL; BH值左移四位 MOV CH,BH ;BH值送CH MOV CL,0 ;CL清零,不影响步进电机单步走 RETFirst ENDPSecond PROC NEAR ADD BH,8h ;扫描第二行 MOV DX,203H MOV AL,90h JZ CH1 ADD BH,CHCH1:8255A的B口输出 MOV AL,BH输出键盘的值 MOV DX,208H步进电机步数 SAL BH,CL ;左移4位 MOV CH,BH M
6、OV CL,0Second ENDPThird PROC NEAR ADD BH,10H ;扫描第三行设置方式控制字 MOV AL,90H 二极管显示为全0; MOV AL,00h ; CMP BH,13H ;比较键值13H为”+” JZ DONE2正转 CMP BH,12H ;12H为”-” JZ DONE3反转 CMP BH,11H ;11H为”,” JZ DONE4正向一步一步转 CMP BH,10H ;10H 为”.” JZ DONE5 ;反向一步一步转Third ENDPDONE2: CALL PROGRAM1DONE3:CALL PROGRAM2DONE4:CALL PROGRAM
7、3DONE5:CALL PROGRAM4 Delay PROC NEAR ; 键盘 延时子程序 PUSH CX MOV CX,1800HNEXT: DEC CX JNE NEXT POP CXDelay ENDP Delay2 PROC NEAR ;电机 延时子程序 MOV CX,5000HNEXT2: JNE NEXT2Delay2 ENDPJUMP PROC NEAR JUMP ENDPPROGRAM1 PROC NEAR ;正向连续转 MOV DX,203H MOV AL,90H MOV DX,202H; C口 MOV CL,NUM ;电机步数ZHENG: MOV AL,10H ;正向给
8、A相通电 CALL Delay2 DEC CL ;计算已进步数 JZ DONE1 ;步数已完成,返回 MOV AL,20H ;输出第二拍模型给B相通电 CALL Delay2 ;延迟; DEC CL JZ DONE1 MOV AL,40H ;输出第三拍模型给C相通电 MOV AL,80H ;输出第四拍给D相通电回到原点 JNZ ZHENG ;ABCDA循环通电PROGRAM1 ENDPDONE1:JMP LOOP1PROGRAM2 PROC NEAR ;反向连续转C口设置转的步数FAN:反向转动给A通电给D通电给C通电给B通电 JNZ FAN ;ADCBA通电PROGRAM2 ENDPPROG
9、RAM3 PROC NEAR ;正向单步走 CMP CL,00H ;第一次按,给A通电转一步 JZ AA1; CMP CL,01H ;CL=1,B通电 JZ BB1 CMP CL,02H ;CL=2,C通电 JZ CC1 CMP CL,03H ;CL=3,D通电 JZ DD1 JMP LOOP1 ;检测键盘AA1: MOV AL,10H INC CL ;自动加一,CL为01H JNZ DONEBB1: MOV AL,20H INC CLCC1: MOV AL,40H JNZ DONE DD1: MOV AL,80H MOV CL,00HJZ DONE JMP LOOP1 PROGRAM3 EN
10、DPPROGRAM4 PROC NEAR ;反向单步走 MOV DX,202HMOV CL,0 CL=0,A通电 JZ AA2CL=1,D通电 JZ DD2CL=2,C 通电 JZ CC2CL=3,B 通电 JZ BB2AA2:DD2:CC2:BB2: MOV CL,00H ;CL重新置0PROGRAM4 ENDPDONE:扫描键盘CODE ENDSEND START 五、设计的问题及难点1在实现直流电机控制速度的时候也遇到了不少问题,起先连怎么把数据送入DAC0832转换处理都不知道,后来到图书馆查阅点资料才理解了。在这里把旧键值送高4位,新键值送低4位花了不少时间,后面实现了才发现这有点容易了。2刚开始在实现键盘扫描功能时遇到比较多的问题,如怎么根据行码和列码来判断到底是哪个键被按下,以及键值该如何处理,数字键和功能键又怎么区分等等,在询问同学和老师的过程中了解到了实现的一些方法。3实现步进电机单步走的时候不知如何控制什么时候给哪相通电,后面想到用一个寄存器才标志该给哪个相通电,实现了单步走的功能。六设计的不足:控制直流电机的时候,按下数字键,速度不应该马上变化,可以设置一个功能键,实现先按下数字键先显示在B口,不直接送入DAC0832,等检测到按下那个功能键后才送进去,改变电机速度。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1