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

📄 weigenshuchu.asm

📁 单片机用汇编编的韦根三十二韦根输出子程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
      orl a,initialize
      mov @r0,a      ;3
      inc r0
      mov @r0,pin_row   ;4
      inc r0
      mov a,pin_length
      swap a
      orl a,time2
      mov @r0,a         ;5
      inc r0
      mov a,bypass
      swap a
      orl a,permanent
      mov @r0,a         ;6
      inc r0
      mov a,remove
      swap a
      orl a,initialize
      mov @r0,a         ;7
      inc r0
      mov @r0,pin_row     ;8
      clr wp
      mov addr,#0f8h
      mov r6,addr
      mov r0,#50h
      mov wr_digit,#8
      lcall i2c_write
      lcall del_10ms
      lcall del_10ms
     ; setb wp
      jbc pin,wait_w1
      ;clr wp
       mov addr,#0
       mov addrs,#0
       mov addrw,#98h
       clr ji_ou
       clr jishu
       mov pin_row1,pin_row
       mov a,pin_row
wait_r:jbc jishu,wait_w1
        jz wait_w
        mov r6,addr
        mov r2,#3
        mov r0,#60h
        lcall i2c_read
        mov r1,#60h
        mov r0,#50h
        jnb ji_ou,ww
        mov r0,#53h
    ww: mov a,@r1
        swap a
        inc r1
        orl a,@r1
        mov @r0,a
        inc r0
        inc r1
        djnz r2,ww
        jb ji_ou,wait_bao
        setb ji_ou
wait_r1:inc addrs
        mov a,addrs
        mov b,#8
        mul ab
        mov addr,a
        dec pin_row1
        mov a,pin_row1
        jmp wait_r
wait_bao:clr ji_ou
         mov r0,#50h
         mov a,addrw
         add a,#8
         mov addrw,a
         mov r6,addrw
         mov wr_digit,#8
         lcall i2c_write
         lcall del_10ms
         lcall del_10ms
         lcall del_10ms
        ;dec pin_row1
        ;mov a,pin_row1
         jmp wait_r1
   wait_w:setb jishu
         jb ji_ou,wait_bao
  wait_w1:setb wp
           ret
start_in:mov r7,#4
         mov r2,#2
         mov r0,#50h
start_setup2:mov dptr,#tab
start_setup:clr a
          movc a,@a+dptr
          mov @r0,a
          inc r0
          inc dptr
          djnz r7,start_setup
          mov r7,#4
          djnz r2,start_setup2
          clr wp
          mov addr,#0f0h
          mov r0,#50h
          mov wr_digit,#8
          mov r6,addr
          lcall i2c_write
          lcall del_10ms
          lcall del_10ms
          setb wp
          ret
rd_rd:mov addr,#0f8h
      mov r0,#60h
      mov r6,addr
      lcall i2c_read
      mov r0,#60h
      clr a
      xchd a,@r0
      anl a,#0fh
      mov time2,a
      mov a,@R0
      swap a
      anl a,#0fh
      mov pin_length,a
      inc r0
      clr a
      xchd a,@r0
      anl a,#0fh
      mov permanent,a
      mov a,@R0
      swap a
      anl a,#0fh
      mov bypass,a
      inc r0
      clr a
      xchd a,@r0
      anl a,#0fh
      mov initialize,a
      mov a,@R0
      swap a
      anl a,#0fh
      mov remove,a
      inc r0
      mov pin_row,@r0 ;;;;;;;
      inc r0
      clr a
      xchd a,@r0
      anl a,#0fh
      mov common,a
      xrl a,time2
      jz t_t1
      mov time2,common
 t_t1:mov a,@R0
      swap a
      anl a,#0fh
      mov common,a
      xrl a,pin_length
      jz s_pin
      mov pin_length,common
s_pin:inc r0
      clr a
      xchd a,@r0
      anl a,#0fh
      mov common,a
      xrl a,permanent
      jz s_per
      mov permanent,common
s_per:mov a,@R0
      swap a
      anl a,#0fh
      mov common,a
      xrl a,bypass
      jz s_by
      mov bypass,common
s_by: inc r0
      clr a
      xchd a,@r0
      anl a,#0fh
      mov common,a
      xrl a,initialize
      jz s_ini
      mov initialize,common
s_ini:mov a,@R0
      swap a
      anl a,#0fh
      mov common,a
      xrl a,remove
      jz s_rem
      mov remove,common
s_rem:inc r0
      mov a,@R0
      mov common,a
      xrl a,pin_row
      jz s_pr
      mov pin_row,common
s_pr: ret
change_str:mov r0,#58h
      mov r1,#50h
      mov a,@r0
      mov r7,#6
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,#58h
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
      mov add_shu,a
      jmp change_str
change_shu7:;jmp $
      mov r7,#3
      mov r1,#4ah
      mov r0,#58h
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,#58h
          ;lcall dog
out_put1: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:;lcall dog
         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
      djnz r5,$
      pop 05h
      ret
twie2:push 04h
      push 05h
      mov r5,#0
      mov r4,#04h
twie2a:djnz r5,$
      ;lcall dog
      djnz r4,twie2a
      pop 05h
      pop 04h
      ret
;=============================================
I2C_WRITE:  ;  WRITE 8 BYTES TO EEROM ; INPUT: A - A*8 = EEROM START ADDR
            ;                                  R0 - RAN START ADDR
            ;                            USE: C, A, R0, R6, R7

      ACALL I2C_START
      ACALL OUT
      MOV R6,wr_digit
WR_LP:MOV A, @R0
      ACALL OUT
      INC R0
      DJNZ R6, WR_LP
      AJMP I2C_STOP

;==========================================
I2C_READ:   ;  READ 8 BYTES FROM EEROM ; INPUT: A - A*8 = EEROM START ADDR
            ;                                   R0 - RAN START ADDR
            ;                            USE: C, A, R0, R6, R7

      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
      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
             ;clr green
             mov time,#175
             lcall del_ms
                 ret
light_blink1:jnb green_blink,light_blink2
                cpl green
                ;clr red
              mov time,#175
              lcall del_ms
              ret
light_blink2:jnb orange_blink,light_blink3
                cpl green
                cpl red
              mov time,#175
              lcall del_ms
              ret
light_blink3:jnb orange_flash,light_blink4
                cpl green
                cpl red
              mov time,#25
              lcall del_ms
              ret
light_blink4:jnb red_flash,light_blink5
                ;clr green
                cpl red
              mov time,#25
              lcall del_ms
              ret
light_blink5:jnb green_flash,light_blink6
                cpl green
                ;clr red
              mov time,#25
              lcall del_ms
light_blink6: ;LCALL DOG ;喂狗
                ret

key_scan:mov r6,#48
delay1:lcall light_blink
          lcall key_on
          jb press,out_press
key1_scan:jnz key_scan1
          jnb come_back,key_scan
          djnz r6,delay1
          clr come_back

           jmp waitp
 out_press:jb press_open,key1_scan
            lcall buzzer
            lcall buzzer
            clr bell
             jmp open_door
key_scan1:lcall del_10ms
         lcall keY_on
         jz keY_scan
          lcall key_P
         anl a,#0ffh
         jz key_scan
         lcall key_code
         jb close_bell,key_0f
        lcall buzzer
 key_0f: push acc
key_off:lcall key_on
         jnz key_off
         pop acc
         CLR BELL
         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_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
        mov a,p2
        ORL A,#0F8H
        MOV R3,A
        MOV R4,#0FEH
        CPL A
        JZ  NO_KEY
        JMP KEY_C
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
           JZ KEY_13SCAN1
           LCALL DEL_10MS
           LCALL KEY_ON
           JZ KEY_13SCAN1
           LCALL KEY_13P
           ANL A,#0FFH
           JZ KEY_13SCAN1
           LCALL BUZZER
 KEY_13SCAN1:PUSH ACC
 KEY_OFF2:LCALL KEY_ON
         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
        ; LCALL DOG ;喂狗
LOOP31:MOV R3,#250  ;2ms
LOOP21:NOP
      NOP
      nop
      nop
      nop
      nop
      DJNZ R3,LOOP21
      DJNZ R4,LOOP31
      RET
delay_time: mov r3,time1
      del4:mov r4,#240
         ;LCALL DOG ;喂狗
     del5:mov r5,#250
    del6:nop
         nop
         nop
         jbc door_sensor,del_end
         djnz r5,del6
         djnz r4,del5
          djnz r3,del4
           ;LCALL DOG ;喂狗
del_end: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
          ;LCALL DOG ;喂狗
    LOOP11:MOV R3,#0F9H
    LOOP12:NOP
         NOP
         DJNZ R3,LOOP12
         DJNZ R4,LOOP11
         pop 03h
         pop 04h
         RET
BUZZER:setb bell
    mov time,#25
    lcall del_ms
    RET
;dog:mov 0a6h,#01eh
    ;mov 0a6h,#0e1h
       ; ret
tab:db 01h,02h,03h,04h
end

⌨️ 快捷键说明

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