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

📄 keym.asm

📁 单片机设计的行列键盘扫描子程序一点点拉没有了
💻 ASM
📖 第 1 页 / 共 3 页
字号:
     mov common,a
     xrl a,pin_row
     LCALL DOG ;喂狗30
     jz s_pr
      mov pin_row,common
s_pr: ret
WIEGND:mov r0,#58h
        mov r1,#60h
        mov a,PIN_LENGTH
        cjne a,#4,wiegnd1
        mov @r1,#0
        inc r1
        mov @r1,#0
       sjmp wiegnd2
wiegnd1:mov a,@r0
        mov @r1,a
        inc R0
        inc R1
        mov a,@r0
        mov @r1,a
wiegnd2:push 07h
        mov r7,#4
        lcall dog
wiegnd3:inc R0
        inc R1
        mov a,@r0
        mov @r1,a
        djnz r7,wiegnd3
        lcall change_str
        lcall output_32
        ret
change_str:mov r0,#60h
      mov r1,#50h
      mov a,@r0
      mov r7,#6
      LCALL DOG ;喂狗22
change_shu:mov b,#16
      div ab
      mov @r1,a
      mov a,b
      mov chushu,a
      mov b,#10
      mul ab
      inc r0
      inc r1
      add a,@r0
      djnz r7,change_shu
      mov r7,#6
      mov r1,#50h
      mov r0,#60h
      LCALL DOG ;喂狗21
change_shu1:mov a,@r1
      mov @r0,a
      inc r0
      inc r1
      djnz r7,change_shu1
      mov a,add_shu
      inc a
      cjne a,#1,change_shu2
      mov 4ah,chushu
      jmp change_end
change_shu2:cjne a,#2,change_shu3
            mov 4bh,chushu
            jmp change_end
change_shu3:cjne a,#3,change_shu4
            mov 4ch,chushu
            jmp change_end
change_shu4:cjne a,#4,change_shu5
            mov 4dh,chushu
            jmp change_end
change_shu5:cjne a,#5,change_shu6
            mov 4eh,chushu
            jmp change_end
change_shu6:cjne a,#6,change_shu7
           mov 4fh,chushu
change_end:LCALL DOG ;喂狗20
           mov add_shu,a
           jmp change_str
change_shu7:mov r7,#3
            mov r1,#4ah
            mov r0,#60h
            LCALL DOG ;喂狗19
change_over:mov a,@r1
            anl a,#0fh
            mov CHUSHU,a
            inc r1
            mov a,@r1
            swap a
            anl a,#0F0h
            ORL a,CHUSHU
            mov @r0,a
            inc r0
            inc r1
            djnz r7,change_over
             mov @r0,#0
            ret
output_32:push 07h
          push 06h
          mov r7,#4
          mov r6,#8
          mov r0,#60h
         ; lcall dog
out_put1:LCALL DOG ;喂狗18
         mov a,@r0
         inc r0
out_put2:rlc a
         jc out_put3
         clr wie_a0
         lcall twie1
         setb wie_a0
         lcall twie2
         jmp out_put4
out_put3:clr wie_a1
         lcall twie1
         setb wie_a1
         lcall twie2
out_put4:djnz r6,out_put2
         mov r6,#8
         mov a,@r0
         inc r0
         djnz r7,out_put2
         lcall twie2
         pop 06h
         pop 07h
         ret
twie1:push 05h
      mov r5,#26h
      LCALL DOG ;喂狗17
      djnz r5,$
      pop 05h
      ret
twie2:push 04h
      push 05h
      mov r5,#0
      mov r4,#04h
twie2a:LCALL DOG ;喂狗16
       djnz r5,$
       djnz r4,twie2a
       pop 05h
       pop 04h
       ret
I2C_WRITE: ACALL I2C_START
      ACALL OUT
      MOV R6,wr_digit
      LCALL DOG ;喂狗15
WR_LP:MOV A, @R0
      ACALL OUT
      INC R0
      DJNZ R6, WR_LP
      AJMP I2C_STOP
I2C_READ: ACALL I2C_START
      ACALL OUT
      MOV R6, #8
      MOV A, #0A1H; #RDCMD
      ACALL OUTS
BRDLP:MOV R7, #8
     SETB I2C_SDA
INLP:CLR  I2C_SCL
     ACALL DELAY6
     SETB  I2C_SCL
     NOP
     MOV C, I2C_SDA
     RLC A
     DJNZ R7, INLP
     CLR I2C_SCL
     MOV @R0, A
     INC R0
     DJNZ R6, ACKLP
I2C_STOP:CLR I2C_SDA
       ACALL DELAY5
       SETB I2C_SCL
       ACALL DELAY5
       SETB I2C_SDA
DELAY6:NOP
DELAY5:NOP
       RET
I2C_START:
      MOV A, #0A0H; #WTCMD
      ACALL OUTS
      MOV A, R6
      RET
ACKLP:CLR I2C_SDA
      SETB I2C_SCL
      ACALL DELAY5
      CLR I2C_SCL
      AJMP BRDLP
OUTS: SETB I2C_SDA
      SETB I2C_SCL
      ACALL DELAY5
      CLR I2C_SDA
      ACALL DELAY5
      CLR I2C_SCL
OUT: LCALL DOG ;喂狗14
      SETB C
      MOV R7, #9
OTLP: RLC A
      NOP
      MOV I2C_SDA, C
      NOP
      NOP
      SETB I2C_SCL
      ACALL DELAY5
      CLR  I2C_SCL
      DJNZ R7, OTLP
      RET
light_blink:jnb red_blink,light_blink1
             cpl red
             ret
light_blink1:jnb green_blink,light_blink2
             cpl green
             ret
light_blink2:jnb orange_blink,light_blink3
             cpl green
             cpl red
light_blink3:ret
key_scan:mov r2,#60;defer                 ;r6r3r4r5r7
delay3:  mov r5,#55
delay2:mov r6,#250
delay1:lcall key_on;;;;;;;;;;;
       LCALL DOG ;喂狗10;;;;;;;;;
        jnb b_j,no_sn;;;;;;;;;;;;;
       jnb dr_sn,no_sn;;;;;;;;;
       ;setb relay
no_sn2:jnb relay,no_sn
       mov cs,#2             ;oj9898l;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       mov cd,#25h
       mov dc,#5
       mov pl,#232
       call str_bell
       jb dr_sn,no_sn2
       mov r6,#1
       clr red
     setb green
     clr green_blink
     setb red_blink
     clr orange_blink
     clr a
     jb test_menu ,testqq
       lcall del_10ms
       jmp start_setset
       testqq:jmp test
  no_sn:jb press,out_press;;;;;;;;;;
key1_scan:jnz key_scan1;;;;;;;;;;;;;;
          jnb slow_orange,key_rr;;;;;;;;;;;
          jnb slow_orange2,key_rr
          djnz r6,delay1
          djnz r5,delay2
          lcall light_blink
   key_rr:jnb come_back,key_scan11;;;;;;;;
          djnz r2,delay3
          clr come_back;;;;;;;;;;;;;
          jnb test_menu,main_menu
          lcall buzzer
          lcall buzzer
          clr bell
          clr b_j
          jmp test
main_menu:jnb menu,op_menu
  lcall buzzer
          lcall buzzer
          clr bell
          jmp set_up13
op_menu:jnb set_menu,set_menu1
        jmp start_set
set_menu1:jmp waitp;;;;;;;;;;;;;;;
out_press:jb press_open,key1_scan
           lcall del_10ms
          jb press_open,key1_scan
           lcall buzzer
           clr bell
           clr press
           jmp open_door
key_scan11:jmp key_scan
key_scan1:lcall del_10ms
lcall del_10ms
lcall del_10ms
         lcall keY_on
         LCALL DOG ;喂狗11
         jz keY_scan11
          lcall key_P
         anl a,#0ffh
         LCALL DOG ;喂狗12
         jz key_scan11
         lcall key_code
         jb close_bell,key_0f
         lcall buzzer
 key_0f:push acc
key_off:lcall key_on
        LCALL DOG ;喂狗13
        jnz key_off
        pop acc
        CLR BELL
key_end:ret
key_on:clr p2.6
       clr p2.5
       clr p2.4
       clr p2.3
       mov a,p2
       orl a,#0f8h
       cpl a
       ret
key_p1:clr p2.3
       setb p2.4
       setb p2.5
       setb p2.6
       mov a,p2
       ORL A,#0F8H
       cjne a,#0feh,key_p2
       mov a,#11h
       lcall buzzer
key_p2: ret
KEY_P:clr p2.4
      setb p2.5
      setb p2.6
      setb p2.3
      mov a,p2
      ORL A,#0F8H
      MOV R3,A
      MOV R4,#0FDH
      CPL A
      JZ  NEXT_LINE
      JMP KEY_C
NEXT_LINE:clr p2.5
      setb p2.4
      setb p2.6
      setb p2.3
      mov a,p2
      ORL A,#0F8H
      MOV R3,A
      MOV R4,#0FBH
      CPL A
      jZ  NEXT_LINE1
      JMP KEY_C
NEXT_LINE1:clr p2.6
        setb p2.5
        setb p2.4
        setb p2.3
        mov a,p2
        ORL A,#0F8H
        MOV R3,A
        MOV R4,#0F7H
        CPL A
        JZ  NEXT_LINE2
        JMP KEY_C
NEXT_LINE2:clr p2.3
        setb p2.5
        setb p2.6
        setb p2.4
        lcall del_10ms
        lcall del_10ms
        lcall del_10ms
        mov a,p2
        ORL A,#0F8H
        MOV R3,A
        MOV R4,#0FEH
        CPL A
        JZ  NO_KEY
      cjne a,#5,key_c1
      clr red
       clr green
       mov a,#15h
       ret                ;;;;;;;;;;
key_c1:lcall del_10ms
lcall del_10MS
LCALL DEL_10MS
        clr p2.3
        setb p2.5
        setb p2.6
        setb p2.4
        mov a,p2
        ORL A,#0F8H
        MOV R3,A
        MOV R4,#0FEH
        CPL A
        JZ  NO_KEY
       cjne a,#5,key_c
       clr red
       clr green
       mov a,#15h
       ret
NO_KEY:MOV A,#0
        RET
KEY_C:MOV R7,#0
      MOV R6,#0
      MOV R5,#3
      MOV A,R3
AGAIN1:JNB ACC.0,OUT1
      INC R7
      RR A
      DJNZ R5,AGAIN1
OUT1:INC R7
     MOV R5,#8
     MOV A,R4
AGAIN2:JNB ACC.0,OUT2
       INC R6
       RR A
       DJNZ R5,AGAIN2
OUT2:INC R6
     MOV A,R6
     SWAP A
     ADD A,R7
     RET
KEY_CODE:CJNE A,#12H,KEY_1ON
         MOV A,#0
        RET
KEY_1ON:CJNE A,#43H,KEY_2ON
        MOV A,#1
        RET
KEY_2ON:CJNE A,#42H,KEY_3ON
        MOV A,#2
        RET
KEY_3ON:CJNE A,#41H,KEY_4ON
        MOV A,#3
        RET
KEY_4ON:CJNE A,#33H,KEY_5ON
        MOV A,#4
        RET
KEY_5ON:CJNE A,#32H,KEY_6ON
        MOV A,#5
        RET
KEY_6ON:CJNE A,#31H,KEY_7ON
        MOV A,#6
        RET
KEY_7ON:CJNE A,#23H,KEY_8ON
        MOV A,#7
        RET
KEY_8ON:CJNE A,#22H,KEY_9ON
        MOV A,#8
        RET
KEY_9ON:CJNE A,#21H,KEY_10ON
        MOV A,#9
KEY_10ON:RET
KEY_13SCAN:LCALL KEY_ON
           LCALL DOG ;喂狗7
           JZ KEY_13SCAN1
           LCALL DEL_10MS
           LCALL KEY_ON
           LCALL DOG ;喂狗8
           JZ KEY_13SCAN1
           LCALL KEY_13P
           ANL A,#0FFH
           JZ KEY_13SCAN1
           LCALL BUZZER
KEY_13SCAN1:PUSH ACC
KEY_OFF2:LCALL KEY_ON
         LCALL DOG ;喂狗9
         JNZ KEY_OFF2
         POP ACC
         clr bell
         RET
KEY_13P:CLR P2.6
        SETB P2.5
        SETB P2.4
        SETB P2.3
        MOV A,P2
        anl a,#07h
        CJNE A,#2,NO_KEY1
        RET
NO_KEY1:MOV A,#0
        RET
del_MS:MOV R4,time
LOOP31:LCALL DOG ;喂狗6
       MOV R3,#250  ;2ms
LOOP21:NOP
       NOP
       nop
       nop
       nop
       nop
       DJNZ R3,LOOP21
       DJNZ R4,LOOP31
       RET
str_bell:mov r4,cs
         clr red
         clr green
str_bell2:mov r5,dc
     dlv1:mov r6,cd
dlv2:cpl bell
     lcall delay_bell
     djnz r6,dlv2
     jnb dr_sn,no_door
     cpl red
     cpl green
no_door:djnz r5,dlv1
     mov r5,dc
dlv3:mov r6,#12
dlv4:clr bell
    lcall delay_bell
    lcall delay_bell2
    djnz r6,dlv4
    jnb dr_sn,no_door1
    cpl red
    cpl green
no_door1:djnz r5,dlv3
    djnz r4,str_bell2
    clr bell
    ret
delay_bell:mov r7,pl
           LCALL DOG ;喂狗4
       lla:nop
           nop
           djnz r7,lla
           ret
delay_bell2:mov r7,#80
          LCALL DOG ;喂狗5
     llb:djnz r7,llb
         ret
display_error: clr red
        clr green
        mov time,#250
        lcall del_ms
        setb red
        setb bell
        lcall del_ms
        clr bell
        lcall del_ms
        setb bell
        lcall del_ms
        clr red
        clr bell
        lcall del_ms
         ret
display_right:clr red
        clr green
        mov time,#250
        lcall del_ms
        setb GREEN
        setb bell
        lcall del_ms
        lcall del_ms
        clr GREEN
        clr bell
        lcall del_ms
        ret
delay_time:mov r3,time3
      del4:mov r4,#250
      del5:LCALL DOG ;喂狗2
           mov r5,#250
      del6:jnb door_sensor,del_end1
           clr ex0
           jnb door_sensor2,del_end4
           jb dr_sn,del_end2
           clr door_sensor2
           jmp del_end
  del_end4:jnb dr_sn,del_end2
           setb door_sensor2
  del_end1:lcall delay6
  del_end2:lcall delay6
 del_end3:djnz r5,del6
           djnz r4,del5
           djnz r3,del4
   del_end:clr door_sensor
           ret
delay_time1:mov r3,time2
      del41:mov r4,#240
      del51:LCALL DOG ;喂狗2
            mov r5,#250
      del61:jnb dr_sn,del_end11
            mov cs,#2
            mov cd,#15  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            mov dc,#3
            mov pl,#232
            call str_bell
del_end11:jnb press,del_end31
            jb press_open,del_end31
            lcall del_10ms
            jb press_open,del_end31
            jmp open_door
 del_end31:lcall key_on
           jz del_end41

           lcall key_p1
           push acc
  key_stop:lcall key_on
           jnz key_stop
            pop acc
            clr bell
            cjne a,#11h,del_end41
            setb sck_bell
            nop
            nop
       jnb sck_bell,have_bell31
       setb sck_bell
       lcall del_10ms
       lcall del_10ms
       clr sck_bell
       mov r5,#1
       jmp del_end41
have_bell31:mov cs,#3
            mov dc,#35
            mov cd,#50
            mov pl,#152
            call str_bell
            mov r5,#1
 del_end41:djnz r5,del61
           djnz r4,del51
           djnz r3,del41
   del_endd:ret
del_10MS:push 04h
         push 03h
        jnb ri_right,ri_wranG; 接受信息
        JNB RI_RIGHT2,RI_WRANG
        clr ri_right
        CLR RI_RIGHT2
        ;setb fuwei
        jmp main1
ri_wrang:MOV R4,#5
LOOP11:LCALL DOG ;喂狗1
       MOV R3,#0F9H
LOOP12:NOP
       NOP
       DJNZ R3,LOOP12
       DJNZ R4,LOOP11
       pop 03h
       pop 04h
       RET
BUZZER:setb bell
    mov time,#10
    lcall del_ms
    RET
dog:mov 0a6h,#01eh;喂狗
    mov 0a6h,#0e1h
        ret
        end

⌨️ 快捷键说明

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