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

📄 发送.asm

📁 基于两个单片机串行通信的电子密码锁资料
💻 ASM
字号:
       ORG   00H
       MOV   SP,#70H        ;设置堆栈
       MOV   SCON,#50H      ;UART工作在MODE1
       MOV   TMOD,#20H      ;TIMER1工作在MODE2
       MOV   TH1,#0F3H      ;波特率为2400
       SETB  TR1            ;启动TIMER1
START: MOV   R4,#06H        ;清除显示器地址30H~35H
       MOV   R0,#30H
CLEAR: MOV   @R0,#00H
       INC   R0
       DJNZ  R4,CLEAR
L1:    MOV   R3,#0F7H       ;扫描初值(P13=0)
       MOV   R1,#00H        ;取码指针
L2:    MOV   A,R3           ;开始扫描
       MOV   P1,A           ;将扫描值输出至P1
       MOV   A,P1           ;读入P1值,判断是否有键按下?
       MOV   R4,A           ;存入R4,以判断是否放开
       SETB  C              ;C =1
       MOV   R5,#03H        ;扫描P15~P17
L3:    RLC   A              ;将按键值左移一位
       JNC   KEYIN          ;判断C =0?有键按下则=0,跳至KEYIN
       INC   R1             ;C=1则表示无键按下,将取码指针值加1
       DJNZ  R5,L3          ;3列扫描完毕了?
       CALL  DISP           ;调用显示子程序
       MOV   A,R3           ;扫描值载入
       SETB  C              ;C=1
       RRC   A              ;扫描下一行(P13~P10)
       MOV   R3,A           ;存入扫描寄存器
       MOV   R3,A
       JC    L2             ;C =1?是则P10尚未扫描到
       JMP   L1             ;C =0则4行已扫描完毕
KEYIN: MOV   R7,#60         ;消除抖动
D2:    MOV   R6,#248
       DJNZ  R6,$
       DJNZ  R7,D2
D3:    MOV   A,P1           ;读入P1值
       XRL   A,R4           ;与上次读入值作比较
       JZ    D3             ;ACC=0则相等,表示按钮未放
       MOV   A,R1           ;按钮已放开,取码指针载入累加器
       MOV   DPTR,#TABLE    ;数据指针指到TABLE
       MOVC  A,@A+DPTR      ;至TABLE取码
       MOV   R7,A           ;取到的数据码暂存入R7
       XRL   A,#0AH         ;是否按“* ”
       JZ    COMP           ;是则跳至COMP
       MOV   A,R7           ;不是,则再检测
       XRL   A,#0BH         ;是否按“#”
       
       JZ    START          ;是则跳至START清除
       MOV   A,R7           ;不是,则为数字键
       MOV   SBUF,A         ;将按键值发送给8751-R
WAIT:  JBC   TI,L4          ;发送完毕否?如发送完毕TI=1
       JMP   WAIT
L4:    XCH   A,30H          ;现按键值存入(30H)
       XCH   A,31H          ;旧(30H)值存入(31H)
       XCH   A,32H          ;旧(31H)值存入(32H)
       XCH   A,33H          ;旧(32H)值存入(33H)
       XCH   A,34H          ;旧(33H)值存入(34H)
       XCH   A,35H          ;旧(34H)值存入(35H)
       CALL  DISP           ;调用显示子程序
       JMP   L1
COMP:  MOV   A,R7           ;发送开门码(0AH)给8751-R
       MOV   SBUF,A
WAIT1: JBC   TI,START       ;发送完毕否?如发送完毕TI=1
       JMP   WAIT1
DISP:  MOV   A,35H          ;D6数据值加上74138扫描值
       ADD   A,#50H         ;显示D6
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       MOV   A,34H          ;D5数据值加上74138扫描值
       ADD   A,#40H         ;显示D5
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       MOV   A,33H          ;D4数据值加上74138扫描值
       ADD   A,#30H         ;显示D4
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       MOV   A,32H          ;D3数据值加上74138扫描值
       ADD   A,#20H         ;显示D3
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       MOV   A,31H          ;D2数据值加上74138扫描值
       ADD   A,#10H         ;显示D2
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       MOV   A,30H          ;D1数据值加上74138扫描值
       ADD   A,#00H         ;显示D1
       MOV   P0,A           ;扫描延时
       CALL  DELAY
       RET
DELAY: MOV   R7,#06
D1:    MOV   R6,#248
       DJNZ  R6,$
       DJNZ  R7,D1
       RET
;MAIN:  LCALL FIRST
 ;      ACALL D50S
  ;     ACALL ISDCLR
;FIRST: LCALL ISDCLR
 ;      MOV   R4,#00H
  ;     LCALL SPEAKER
   ;    RET
;SPEAKER:MOV  DPTR,#0A0H
 ;       MOV  A,R4
  ;      ORL  A,#080H
   ;     MOVX @DPTR,A
    ;    ACALL D50S
     ;   ANL   A,#3FH
      ;  MOVX  @DPTR,A
       ; RET
;ISDCLR: MOV    DPTR,#0A0H
 ;       ORL    A,#40H
  ;      MOVX   @DPTR,A
   ;     LCALL  D50S
;D50S:   MOV    R6,#100
;SD:     MOV    R7,#248
 ;       DJNZ   R7,$
  ;      DJNZ   R6,SD
   ;     RET
;D4S:    MOV    R5,#8
;DE1:    ACALL  D50S
 ;       DJNZ   R5,DE1
  ;      RET

TABLE: DB    01H,02H,03H    ;键盘码
       DB    04H,05H,06H
       DB    07H,08H,09H
       DB    0AH,00H,0BH
       END

⌨️ 快捷键说明

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