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

📄 dc motor1.asm

📁 在Protues仿真利用PWN控制直流电机
💻 ASM
字号:
;4*4行列键盘及8位LED数码管程序,LED采用2片164译码,占用3个I/O口,键盘采用线扫描法。
;IT0用于控制脉冲频率;IT1用于控制占空比
;TH0,TL0:(65535-X)*2*10(-6)=T (12MHz) 默认为f=20Hz ,T=50ms ,TH0=0x9e,TL0=0x57
;共分了10个挡,由0~9十个数字键控制,默认占空比为10%,即高电平时间为50ms/10=5ms,TH1=0xf6,TL1=0x3b
LED EQU 30H   ;30H~37H为显存
KEY EQU 38H   ;KEY为键号
DANG EQU 39H    ;
R_NH EQU 3AH   ;
R_NL EQU 3BH
SPEED EQU 32H
R_E EQU 20H.0   ;
ORG 0000H
LJMP START
ORG 000BH
AJMP IT0R
ORG 001BH
AJMP IT1R


IT0R:
    CLR TR0
    MOV TH0,#9EH
    MOV TL0,#57H
    SETB P2.3
    SETB TR0
    SETB TR1
    RETI
IT1R:
    CLR TR1
    MOV TH1,R_NH
    MOV TL1,R_NL
    CLR P2.3
    RETI
START:                ; 程序初始化
     MOV SP,#60H
     CLR R_E
     CLR P2.0
     CLR P2.1
     CLR P2.3
     MOV R0,#LED       ;使8个LED处于全灭状态(无数据)
     MOV R1,#8
     MOV A,#0FFH
START1:
     MOV @R0,A
     INC R0
     DJNZ R1,START1
     MOV R_NH,#0F6H
     MOV R_NL,#3BH
     MOV TMOD,#11H
     MOV TH0,#9EH
     MOV TL0,#57H
     MOV TH1,#0F6H
     MOV TL1,#3BH
     MOV DANG,#1
     MOV 32H,#0
     MOV 33H,#0
     MOV 34H,#0
     MOV 35H,#0
     MOV 36H,#0
     SETB ET0
     SETB ET1
     SETB EA
MAIN:
     MOV P1,#0F0H      ;键盘初始化
     ACALL CHECK       ;检测是否有键按下
     JNZ WAIT_KEY      ;若有键,则进行去抖处理
     ACALL DISP         ;调用显示子程序
     SJMP MAIN
WAIT_KEY:
     ACALL DISP          ;去抖处理
     ACALL DELAY
     CLR A
     ACALL CHECK
     JNZ FINDKEY        ;若有键按下,则转入计算键号
     SJMP MAIN          ;

CHECK:
     MOV A,P1        ;按键检测
     CPL A
     ANL A,#0F0H
     SWAP A
     RET
FINDKEY:                ;计算键号
     MOV R0,#00H
     CLR C
 CR1:
     RRC A
     INC R0
     JNC CR1
     DEC R0         ;得出第几行
     MOV A,R0
     MOV B,#04
     MUL AB
     MOV R1,A            ;得出行号
     MOV P1,#0FEH        ;利用线扫描法求列号
     ACALL CHECK
     JNZ K1
     MOV P1,#0FDH
     ACALL CHECK
     JNZ K2
     MOV P1,#0FBH
     ACALL CHECK
     JNZ K3
     MOV P1,#0F7H
     ACALL CHECK
     JNZ K4
     AJMP MAIN
K1:
     MOV A,#00H         ;计算列号
     AJMP KEND
K2:
     MOV A,#01H
     AJMP KEND
K3:
     MOV A,#02H
     AJMP KEND
K4:
     MOV A,#03H
KEND:
     ADD A,R1
     MOV KEY,A  ;得出键号,放入KEY
     ACALL INIT_KEY
K15:                  ;根据键号转入对应的处理程序
     CJNE A,#15,K14
     AJMP FUN15
K14:
     CJNE A,#14,K13
     AJMP FUN14
K13:
     CJNE A,#13,K12
     AJMP FUN13
K12:
     CJNE A,#12,K11
     AJMP FUN12
K11:
     CJNE A,#11,K10
     AJMP FUN11
K10:
     CJNE A,#10,K09
     AJMP FUN10
K09:
     CJNE A,#9,K08
     AJMP FUN9
K08: ACALL KEY_NUM
     AJMP WAIT_KEY_UP
FUN15:
    NOP
    AJMP WAIT_KEY_UP
FUN14:
    NOP
    AJMP WAIT_KEY_UP
FUN13:
    DEC R_NL
    MOV A,R_NL
    CJNE A,#0FFH,A1
    DEC R_NH
 A1:MOV A,R_NH
    CJNE A,#0,A2
    MOV A,R_NL
    CJNE A,#0,A2
    CLR TR0
    CLR TR1
    CLR P2.3
    CLR R_E
 A2:ACALL GETSPEED
    AJMP WAIT_KEY_UP
FUN12:
    INC R_NL
    MOV A,R_NL
    CJNE A,#0,B1
    INC R_NH
 B1:MOV A,R_NH
    CJNE A,#9EH,B2
    MOV A,R_NL
    CJNE A,#57H,B2
    MOV R_NH,#9EH
    MOV R_NL,#57H
 B2:ACALL GETSPEED
    AJMP WAIT_KEY_UP

FUN11:
    NOP
    AJMP WAIT_KEY_UP
FUN10:
    JB R_E,C1
    SETB TR0
    SETB TR1
    SETB R_E
    MOV A,DANG
    CJNE A,#0AH,C2
    MOV DANG,#1
 C2:ACALL GETSPEED
    AJMP WAIT_KEY_UP
 C1:CLR R_E
    CLR TR1
    CLR TR0
    CLR P2.3
    MOV LED,#0FH
    MOV SPEED,#0
    MOV SPEED+1,#0
    MOV SPEED+2,#0
    MOV SPEED+3,#0
    MOV SPEED+4,#0
    AJMP WAIT_KEY_UP
FUN9:
    CLR TR1
    CLR TR0
    SETB R_E
    SETB P2.3
    MOV DANG,#0AH
    MOV SPEED,#0FH
    MOV SPEED+1,#0FH
    MOV SPEED+2,#0FH
    MOV SPEED+3,#0FH
    MOV SPEED+4,#0FH
    AJMP WAIT_KEY_UP
KEY_NUM:
    MOV A,KEY
    MOV DANG,A
    INC DANG
    PUSH A
    MOV DPTR,#SPEEDH
    MOVC A,@A+DPTR
    MOV R_NH,A
    POP A
    MOV DPTR,#SPEEDL
    MOVC A,@A+DPTR
    MOV R_NL,A
    ACALL GETSPEED
    AJMP WAIT_KEY_UP
INIT_KEY:

    RET

WAIT_KEY_UP:             ;等待键起
    ACALL DISP
    ACALL CHECK          ;不断调用DISP,直到键起
    JZ COMBACK
    SJMP WAIT_KEY_UP
COMBACK:AJMP MAIN

DISP1:
     MOV LED,#0FH
     AJMP  DIS
DISP:
     JNB R_E,DISP1
     MOV LED,DANG                      ;显示子程序
 DIS:MOV R1,#00H
     MOV R2,#08H
     MOV R5,#7FH
LOOP:MOV R0,#LED     ;动态显示LED
     MOV A,R0
     ADD A,R1
     MOV R0,A
     MOV A,@R0
     ACALL SENDDATA
     MOV A,R5
     RR A
     MOV R5,A
     INC R1
     ACALL DELAY
     DJNZ R2,LOOP
     CLR P2.2
     SETB P2.2
     RET



DELAY:MOV R6,#10H  ;延时
DELAY1:
      MOV R7,#1FH
      DJNZ R7,$
      DJNZ R6,DELAY1
      RET


SENDDATA:

         MOV DPTR,#LEDCODE
         MOVC A,@A+DPTR
         CJNE R1,#03,S1
         ORL A,#80H
      S1:MOV B,R5
SENDDATA1:
         MOV R3,#08
   SEND1:RRC A
         MOV P2.2,C
         PUSH A
         MOV A,B
         RRC A
         MOV P2.1,C
         MOV B,A
         POP A
         CPL P2.0
         CPL P2.0
         DJNZ R3,SEND1
         RET
GETSPEED:

        CLR C
        MOV R7,R_NL
        MOV R6,R_NH
        MOV A,#0FFH
        SUBB A,R6
        MOV R6,A
        MOV A,#0FFH
        SUBB A,R7
        MOV R7,A
        MOV B,#2
        MUL AB
        MOV R7,A
        MOV A,R6
        PUSH B
        MOV B,#2
        MUL AB
        POP B
        ADD A,B
        MOV R6,A

        CLR C
        MOV B,#16
        CLR A
        MOV R3,A
        MOV R4,A
        MOV R5,A
        MOV R2,#10H
HB3:
        MOV A,R7
        RLC A
        MOV R7,A
        MOV A,R6
        RLC A
        MOV R6,A
        MOV A,R5
        ADDC A,R5
        DA A
        MOV R5,A
        MOV A,R4
        ADDC A,R4
        DA A
        MOV R4,A
        MOV A,R3
        ADDC A,R3
        MOV R3,A
        DJNZ R2,HB3
        MOV A,R5
        ANL A,#0FH
        MOV SPEED+4,A
        MOV A,R5
        ANL A,#0F0H
        SWAP A
        MOV SPEED+3,A

        MOV A,R4
        ANL A,#0FH
        MOV SPEED+2,A
        MOV A,R4
        ANL A,#0F0H
        SWAP A
        MOV SPEED+1,A
        MOV SPEED,R3

        RET
LEDCODE:
        DB 3FH
        DB 06H,5BH,4FH
        DB 66H,6DH
        DB 7DH,07H,7FH,6FH,77H,7CH
        DB 39H,5EH,79H,71H
SPEEDH:
        DB 0F6H,0ECH,0E2H,0D8H,0CFH,0C5H,0BBH,0B1H,0A8H,9EH
SPEEDL:
        DB 3BH,77H,0B3H,0EFH,2BH,67H,0A3H,0DFH,1BH,57H

END

⌨️ 快捷键说明

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