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

📄 电机控制.asm

📁 proteus实例集锦
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        MOV     35H,#0FH    ;33H为(n)偏移量
        MOV     R2,#4       ;显示数字的字数
        ACALL   DISP2       ;调用半角字符显示
        RET
DIS1:   MOV     34H,#1AH    ;33H为"("字偏移量
        MOV     37H,#1CH    ;33H为")"字偏移量
        MOV     R2,#6
        ACALL   DISP1
        RET
;========================================
;字符显示子程序
DISP1:  MOV     A,@R0       ;送偏高位偏移量
        MOV     DPTR,#TAB   ;置表头地址
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表高位
        ACALL   WRD         ;写入第一字节数据
        MOV     A,@R0       ;送偏高位偏移量
        ADD     A,#1        ;加1得到低位偏移量
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表低位
        ACALL   WRD         ;写入第二字节数据
        INC     R0          ;取下一个字符地址
        DJNZ    R2,DISP1    ;判断是否显示满
        MOV     R0,#32H     ;重赋显示单元起始地址
        RET
;=================================
;半宽字符显示子程序
DISP2:  MOV     A,@R0       ;送偏偏移量
        MOV     DPTR,#TAB   ;置表头地址
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表高位
        ACALL   WRD         ;写入第一字节数据
        INC     R0          ;取下一个字符地址
        DJNZ    R2,DISP2    ;判断是否显示满
        MOV     R0,#32H     ;重赋显示单元起始地址
        RET
;==================================
;写指令子程序
WRI:    PUSH    ACC
        CLR     RS
        SETB    RW

WRI1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRI1
        CLR     RW
        MOV     P0,COM
        SETB    E
        CLR     E
        POP     ACC
        RET
;==================================
;写数据子程序
WRD:    PUSH    ACC
        CLR     RS
        SETB    RW
WRD1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRD1
        SETB    RS
        CLR     RW
        MOV     P0,DAT
        SETB    E
        CLR     E
        POP     ACC
        RET
;==================================
WAIT:    MOV KEYBUF,#0    ;初始键号设位0,也可以为任意值
;键盘扫描子程序
         MOV P1,#0FFH        ;P1口送高电平
         CLR P1.0            ;第一行清零
         MOV A,P1            ;读P1口
         ANL A,#0F0H         ;低位屏蔽
         XRL A,#0F0H         ;判断低位是否有低电平 ,即判断是否有按键按下
         JZ NOKEY1           ;地位有低电平继续扫描,否者跳到第而行去扫描
         LCALL DELY10ms      ;延时10ms去抖在进行判断是否有按键按下
         MOV A,P1            ;继续读P1口
         ANL A,#0F0H         ;判断低位是否有低电平
         CJNE A,#0E0H,NK1    ;如果扫描数据不为0E0H就转到NK1
         MOV KEYBUF,#0       ;否者判断为0号键
         AJMP DK             ;转DK1查表程序
NK1:     CJNE A,#0D0H,NK2    ;如果扫描数据不为0D0H就转到NK2
         MOV KEYBUF,#1       ;否者判断为1号键
         AJMP DK             ;转DK2查表程序
NK2:     CJNE A,#0B0H,NK3    ;如果扫描数据不为0B0H就转到NK3
         MOV KEYBUF,#2       ;否者判断为2号键
         AJMP DK             ;转DK3查表程序
NK3:     CJNE A,#70H,NK4     ;如果扫描数据不为70H就转到NK4
         AJMP QI_OR_TING
NK4:     NOP

NOKEY1:  MOV P1,#0FFH        ;和上面相同
         CLR P1.1
         MOV A,P1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY2
         LCALL DELY10MS
         MOV A,p1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY2
         MOV A,P1
         ANL A,#0F0H
         CJNE A,#0E0H,NK5
         MOV KEYBUF,#3
         AJMP DK
NK5:     CJNE A,#0D0H,NK6
         MOV KEYBUF,#4
         AJMP DK
NK6:     CJNE A,#0B0H,NK7
         MOV KEYBUF,#5
         AJMP DK
NK7:     CJNE A,#70H,NK8
         MOV KEYBUF,#6       ;否者判断为3号键
         AJMP DK             ;转DK4查表程序
NK8:     NOP

NOKEY2:  MOV P1,#0FFH
         CLR P1.2
         MOV A,P1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY3
         LCALL DELY10MS
         MOV A,P1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY3
         MOV A,P1
         ANL A,#0F0H
         CJNE A,#0E0H,NK9
         MOV KEYBUF,#7
         AJMP DK
NK9:     CJNE A,#0D0H,NK10
         MOV KEYBUF,#8
         AJMP DK
NK10:    CJNE A,#0B0H,NK11
         MOV KEYBUF,#9
         AJMP DK
NK11:    CJNE A,#70H,NK12
         AJMP SHE_DING
NK12:    NOP

NOKEY3:  MOV P1,#0FFH
         CLR P1.3
         MOV A,P1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY4
         LCALL DELY10MS
         MOV A,P1
         ANL A,#0F0H
         XRL A,#0F0H
         JZ NOKEY4
         MOV A,P1
         ANL A,#0F0H
         CJNE A,#0E0H,NK13
         AJMP JIA_SU
NK13:    CJNE A,#0D0H,NK14
         AJMP JIAN_SU
NK14:    CJNE A,#0B0H,NK15
         AJMP ZHENG_OR_FAN
NK15:    CJNE A,#70H,NK16
         AJMP QING_CHU
NK16:    NOP

;=======================================================
;查表求键值程序
DK:      MOV A,KEYBUF         ;查表程序 查对应的键号数据
         MOV DPTR,#TABLE      ;把表头地址放入DPTR
         MOVC A,@A+DPTR       ;A里面存放的为键号,利用A和表头地址找到对应的键号数据
         DJNZ R1,DK1
         MOV R1,#1
         AJMP DKA
DK1:     MOV 4BH,4CH
         MOV 4CH,4DH
         MOV 4DH,4EH
         MOV 4EH,4FH
         MOV 4FH,A
         MOV DPTR,#SD_KAI
         MOV A,SDJ
         JMP @A+DPTR
DKA:     MOV A,P1             ;读P1口
         ANL A,#0F0H          ;屏蔽高四位
         XRL A,#0F0H          ;地位是有低电平
         JNZ DKA              ;如果有低电平继续读P1口,否者向下执行,查找第二行
NOKEY4:  RET

SD_KAI:  AJMP DKA
         AJMP SDK

SDK:     MOV     COM,#92H    ;DD RAM 地址-----10010010,即第二行显示第三个字的地址
         ACALL   WRI
         MOV     32H,#0AH    ;32H为(:)偏移量
         MOV     33H,4BH
         MOV     34H,4CH
         MOV     35H,4DH
         MOV     36H,4EH
         MOV     37H,4FH
         MOV     R2,#6
         ACALL   DISP2
         AJMP    DKA
;===================================
;功能按键功能设定
;启动和停止键:按奇次为启动,按偶次为停止
QI_OR_TING:
         CLR P2.2            ;开电源
         INC R3
         MOV A,R3
         CJNE A,#2,DONG      ;判断按键奇偶次
         MOV R3,#0
         SETB P2.2           ;关电源
TING:    MOV LEN,#0
         MOV BI_JIAO,#0      ;关设定比较和显示
         MOV     COM,#90H    ;DD RAM 地址-----10010000,即第二行显示单元起始地址
         ACALL   WRI
         MOV     32H,#30H    ;32H为"关"字偏移量
         MOV     33H,#32H    ;33H为"闭"字偏移量
         ACALL   DIS
         MOV     COM,#9BH    ;DD RAM 地址-----10011011,即第四行显示第四个字的地址
         ACALL   WRI
         MOV     32H,#28H    ;32H为"停"字偏移量
         MOV     33H,#2AH    ;33H为"止"字偏移量
         MOV     R2,#2
         ACALL   DISP1
         AJMP    DKA
DONG:    MOV     LEN,#15     ;置高电平比例初值
         MOV     COM,#9BH    ;DD RAM 地址-----10011011,即第四行显示第四个字的地址
         ACALL   WRI
         MOV     32H,#2CH    ;32H为"运"字偏移量
         MOV     33H,#2EH    ;33H为"行"字偏移量
         MOV     R2,#2
         ACALL   DISP1
         AJMP    DKA
;设定键:按奇次为开设定,按偶次为设定
SHE_DING:INC SDJPD        ;SDJPD为设定键奇偶判值断存储单元
         MOV A,SDJPD      ;SDJ为设定键是否调用功能子程序偏仪量存储单元
         CJNE A,#2,SD1    ;BI_JIAO设定时的是否比较调用子程序偏移量存储单元
         MOV SDJPD,#00H
         MOV SDJ,#0
         MOV BI_JIAO,#2
         MOV R1,#6
         AJMP DKA
SD1:     MOV SDJ,#2
         MOV BI_JIAO,#0
         MOV    COM,#90H    ;DD RAM 地址-----10010000,即第二行显示单元起始地址
         ACALL  WRI
         MOV    32H,#14H    ;32H为"设"字偏移量
         MOV    33H,#16H    ;33H为"定"字偏移量
         MOV    R2,#2
         ACALL  DISP1
         AJMP DKA
;加速键:按下时连续加
JIA_SU:  MOV A,LEN
         ADD A,#1
         CJNE A,#101,JIA_HUI1
         MOV LEN,#100
         AJMP NOKEY4
JIA_HUI1:MOV LEN,A
         AJMP NOKEY4
;减速键:按下时连续减
JIAN_SU: CLR C
         MOV A,LEN
         SUBB A,#1
         CJNE A,#0FFH,JIAN_HUI
         MOV LEN,#0
         AJMP NOKEY4
JIAN_HUI:MOV LEN,A
         AJMP NOKEY4
;正反转键:奇次正转,偶次反转
ZHENG_OR_FAN:
         CPL P2.0
         AJMP DKA
QING_CHU:MOV BI_JIAO,#0
         MOV SDJPD,#00H
         MOV     COM,#90H    ;DD RAM 地址-----10010000,即第二行显示单元起始地址
         ACALL   WRI
         MOV     32H,#30H    ;32H为"关"字偏移量
         MOV     33H,#32H    ;33H为"闭"字偏移量
         MOV     R2,#2
         ACALL   DISP1
         CLR A
         MOV 33H,A
         MOV 34H,A
         MOV 35H,A
         MOV 36H,A
         MOV 37H,A
         MOV 4BH,A
         MOV 4CH,A
         MOV 4DH,A
         MOV 4EH,A
         MOV 4FH,A
         MOV     COM,#92H    ;DD RAM 地址-----10010010,即第二行显示第三个字的地址
         ACALL   WRI
         MOV     32H,#0AH    ;32H为(:)偏移量
         MOV     R2,#6
         ACALL   DISP2
         MOV     R1,#6
         MOV BI_JIAO,#00H
         AJMP    DKA
;==================================
;延时子程序
DELAY:  MOV  R7,#0FFH
DELAY4: MOV  R6,#00FH
LOOP2:  DJNZ R6,LOOP2
        DJNZ R7,DELAY4
        RET

;键盘延时程序和查表表格
DELY10ms:MOV R6,#20       ;延时10毫秒
D2:      MOV R7,#248
         DJNZ R7,$
         DJNZ R6,D2
         RET

TABLE:   DB 07H, 04H, 01H  ;启/停 本表格是以键盘为参考  7   8   9   加速
         DB 08H, 05H, 02H, 00H  ;                       4   5   6   减速
         DB 09H, 06H, 03H   ;设定                       1   2   3   正反转
         DB;加速 减速 正反转 清除                     启/停 0  设定 清除
;==================================
;半宽字符码和字符码
TAB: DB  30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;(0,1,2,3,4,5,6,7,8,9)16*8半宽字符
     DB  3AH,20H,2FH,69H,6DH,6EH                 ;(:, ,/,i,m,n)16*8半宽字符
     DB  0D7H,0AAH, 0CBH,0D9H, 0C9H,0E8H, 0B6H,0A8H ;(转,速,设,定)
     DB  0CFH,0F2H, 0A1H,0B2H, 0A1H,0B3H, 0A1H,0A0H ;(向,( , ),  )
     DB  0D5H,0FDH, 0B7H,0B4H, 0D7h,0B4h, 0CCH,0ACH ;(正,反,状,态)
     DB  0CDH,0A3H, 0D6H,0B9H, 0D4h,0CBH, 0D0H,0D0H ;(停,止,运,行)
     DB  0B9H,0D8H, 0B1H,0D5H                       ;(关,闭)







⌨️ 快捷键说明

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