⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 控制步进电机角度(单步正确全速有问题).asm

📁 关于proteus的仿真实例
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 ;设定
        QU_JIANZHI EQU 30H
        RS      EQU   P2.4
        RW      EQU   P2.5
        E       EQU   P2.6
        PSB     EQU   P2.7
        RST     EQU   P3.7
        COM     EQU   20H
        DAT     EQU   21H
;********************************************
        ORG 0000H
        AJMP MAIN
        ORG 0100H
 MAIN:  MOV  SP,#60H
        CLR     PSB
        LCALL   DELAY
        SETB    PSB                ;将PSB置1,通信方式为8位数据并口
        LCALL   DELAY
        MOV     COM,#30H           ;功能设置---8BIT控制界面,基本指令集
        ACALL   WRI           ;调用写指令子程序
        LCALL   DELAY              ;延迟39uS
        MOV     COM,#0CH           ;显示打开,光标关,反白显示关
        ACALL WRI         ;调用写指令子程序
        LCALL   DELAY              ;延迟39uS
        MOV  COM,#01H           ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI                ;调用写指令子程序
        LCALL   DELAY              ;延迟39uS
        MOV     COM,#06H           ;DDRAM的地址计数器(AC)加1
        ACALL   WRI           ;调用写指令子程序
        LCALL   DELAY              ;延迟39uS
        LJMP JIAN_ZI_CHU
;===============显示========================
;****************************************************
DISPLAY0:
        MOV     R2,#1    ;DDRAM地址记数器设为最大值      第一个 “角“的显示
        MOV     R1,#0C7H
        MOV     COM,#80H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP0:  MOV     DAT,#0BDH
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP0
       ;LCALL   DELAY1        ;1S延时子程序
DISPLAY1:
        MOV     R2,#1    ;DDRAM地址记数器设为最大值      第二个”度“显示
        MOV     R1,#0C8H
        MOV     COM,#81H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP1:  MOV     DAT,#0B6H
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP1
        ;LCALL   DELAY1       ;1S延时子程序
DISPLAY2:                                             ;  冒号显示
        MOV     R2,#1       ;DDRAM地址记数器设为最大值
        MOV     R1,#3AH
        MOV     COM,#82H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP2:  MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP2
        ;LCALL   DELAY1         ;1S延时子程序
DISPLAY3:                                             ;度单位符号的显示
        MOV     R2,#1    ;DDRAM地址记数器设为最大值
        MOV     R1,#0a4H
        MOV     COM,#86H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP3:  MOV     DAT,#0a1H
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP3
       ; LCALL   DELAY1       ;1S延时子程序

DISPLAY4:
        MOV     R2,#1      ;DDRAM地址记数器设为最大值    百位上的显示数字
        MOV     R1,50H
        MOV     50H,#00H
        MOV     COM,#83H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP4:  MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP4
        ;LCALL   DELAY1       ;1S延时子程序
DISPLAY5:
        MOV     R2,#1        ;DDRAM地址记数器设为最大值   十位上的显示数字
        MOV     R1,51H
        MOV     51H,#00H
        MOV     COM,#84H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP5:  MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP5
        ;LCALL   DELAY1       ;1S延时子程序
DISPLAY6:
        MOV     R2,#1       ;DDRAM地址记数器设为最大值     个位上的显示数字
        MOV     R1,52H
        MOV     52H,#00H
        MOV     COM,#85H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP6:  MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP6
        ;LCALL   DELAY1        ;1S延时子程序
DISPLAY7:
        MOV     R2,#1    ;DDRAM地址记数器设为最大值      第二行第一个”转“显示
        MOV     R1,#0AAH
        MOV     COM,#90H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP7:  MOV     DAT,#0D7H
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP7
        ;LCALL   DELAY1        ;1S延时子程序
DISPLAY8:                                             ;   第二行第一个”向“显示
        MOV     R2,#1    ;DDRAM地址记数器设为最大值
        MOV     R1,#0F2H
        MOV     COM,#91H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP8:  MOV     DAT,#0CFH
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP8
        ;LCALL   DELAY1        ;1S延时子程序
DISPLAY9:
        MOV     R2,#1       ;DDRAM地址记数器设为最大值      冒号的显示
        MOV     R1,#3AH
        MOV     COM,#92H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP9:  MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP9
       ; LCALL   DELAY1         ;1S延时子程序
Z_HAI_F: MOV A,31H
         MOV 31H,#00H
         CJNE A,#11,DISPLAY10
DISPLAY11:                  ;“正反”转的显示
        MOV     R2,#1    ;DDRAM地址记数器设为最大值
        MOV     R1,#0B4H ;FD   (反)
        MOV     COM,#93H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP11:  MOV     DAT,#0B7H  ;D5
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP11
       ;LJMP  DELAY
        LCALL   YUNSUAN
DISPLAY10:                  ;“正反”转的显示
        MOV     R2,#1    ;DDRAM地址记数器设为最大值
        MOV     R1,#0FdH ;b4   (正)
        MOV     COM,#93H      ;DD RAM 地址-----0000000
        ACALL   WRI
DISP10:  MOV     DAT,#0d5H  ;b7
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        DJNZ    R2,DISP10
       ;LJMP  DELAY
       LCALL   YUNSUAN
;*************************************************************************
JIAN_ZI_CHU:MOV     P1,#0FFH
        CLR     P2.0
        MOV 40H,#28H
        LCALL JIAN_ZI         ;主体程序,调用查键子程序
        LJMP MAIN    ;转MAIN循环
        NOP     ;软件陷阱
        NOP
        NOP
        LJMP MAIN
;*************************************
;*                                   *
;* 键盘工作子程序(4 * 4 阵列)      *
;* 出口为各键工作程序入口 P1口      *
;*************************************
JIAN_ZI:

     MOV P1,#0FFH;清P1口,初始化键低电平有效
     CLR P1.4;清P1.4口
     MOV A,P1;读P1口状态
     ANL A,#0FH;清高4位,保留低四位低电平有效
     XRL A,#0FH;异或相同则为0不同结果为1,为0则表示无键被按下(这一行)
     JZ NOKEY1;为0则转下一行键值处理
     LCALL DL10MS;有键按下则延时10ms再测一次抗干扰
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY1;是干扰则转下一行键值处理程序
     MOV A,P1
     ANL A,#0FH;保留低四?
KB1:
     CJNE A,#0EH,KB2;如果值为#0E则为P1.4与P1.0组合的键
     MOV QU_JIANZHI,#0;赋键值
     LJMP KEYWORK;转键处理
KB2: CJNE A,#0DH,KB3;如果值为#0D则为P1.4与P1.1组合的键
     MOV QU_JIANZHI,#1
     LJMP KEYWORK
KB3: CJNE A,#0BH,KB4;如果值为#0B则为P1.4与P1.2组合的
     MOV QU_JIANZHI,#2
     LJMP KEYWORK
KB4: CJNE A,#07H,KB5;如果值为#07则为P1.4与P1.3组合的
     MOV QU_JIANZHI,#3
     LJMP KEYWORK
KB5: NOP


NOKEY1:
     MOV P1,#0FFH
     CLR P1.5
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB6
     MOV QU_JIANZHI,#4
     LJMP KEYWORK
KB6: CJNE A,#0DH,KB7
     MOV QU_JIANZHI,#5
     LJMP KEYWORK
KB7: CJNE A,#0BH,KB8
     MOV QU_JIANZHI,#6
     LJMP KEYWORK
KB8: CJNE A,#07H,KB9
     MOV QU_JIANZHI,#7
     LJMP KEYWORK
KB9: NOP


NOKEY2:
     MOV P1,#0FFH
     CLR P1.6
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB10
     MOV QU_JIANZHI,#8
     LJMP KEYWORK
KB10: CJNE A,#0DH,KB11
     MOV QU_JIANZHI,#9
     LJMP KEYWORK
KB11: CJNE A,#0BH,KB12
     MOV QU_JIANZHI,#10 ;正
     MOV 31H,QU_JIANZHI
     LJMP WAITFREE
KB12:CJNE A,#07H,KB13
     MOV QU_JIANZHI,#11 ;反
     MOV 31H,QU_JIANZHI
     LJMP WAITFREE

KB13: NOP
NOKEY3:
     MOV P1,#0FFH
     CLR P1.7
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB14
     MOV QU_JIANZHI,#12   ;确定
     LJMP KEYWORK
KB14: CJNE A,#0DH,KB15
      MOV QU_JIANZHI,#13   ;
      LJMP ting
KB15: CJNE A,#0BH,KB16
      MOV QU_JIANZHI,#14   ;停止转动
      LJMP ting
KB16: CJNE A,#07H,KB17
      MOV QU_JIANZHI,#15   ;复位
      LJMP fu_wei

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -