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

📄 24c02程序.asm

📁 EEPROM的驱动程序
💻 ASM
字号:
       ORG    0000H
       AJMP   MAIN
       ORG    0100H
MAIN:  MOV    40H,#70H	       ;键列扫描码,分别从第一列到第四列
       MOV    41H,#0B0H
       MOV    42H,#0D0H
       MOV    43H,#0E0H

       MOV    44H,#71H         ;0的键值码
       MOV    45H,#0B1H
       MOV    46H,#0D1H
       MOV    47H,#0E1H
       MOV    48H,#72H
       MOV    49H,#0B2H
       MOV    4AH,#0D2H
       MOV    4BH,#0E2H
       MOV    4CH,#74H
       MOV    4DH,#0B4H
       MOV    4EH,#0D4H
       MOV    4FH,#0E4H
       MOV    50H,#78H
       MOV    51H,#0B8H
       MOV    52H,#0D8H
       MOV    53H,#0E8H
       MOV    60H,#00H           ;存入键码

       MOV    R0,#61H
LOK0:  MOV    A,#0               ;显示缓冲区清0
       MOV    @R0,A
       INC    R0
       CJNE   R0,#65H,LOK0

       MOV    DPTR,#7F00H
       MOV    A,#43H             ;定义PA,PB口为输出,PC口为输入
       MOVX   @DPTR,A

LOK1:  LCALL  DISP
       LCALL  SAO_MIAO           ;调用键盘扫描程序
       CJNE   A,#0EH,LOOP0
       LCALL  T24C02_EEPW
       AJMP   LOK1
LOOP0: CJNE   A,#0FH,LOK1
       LCALL  T24C02_EEPR
       AJMP   LOK1

DISP:
       MOV    R0,#64H           ;显示数码存放在74H~77H(BCD形式)
       MOV    R4,#7FH           ;把显示位码取到R4
LOK2:
       MOV    A,@R0
       MOV    R2,A              ;把显示数码取到R2

       ACALL  DISP_A_BIT
       ACALL  DELAY

       MOV    A,R4
       RR     A                 ;下一位码
       MOV    R4,A

       DEC    R0                ;下一显示数码
       CJNE   R0,#60H,LOK2
       RET



DISP_A_BIT:
       MOV    DPTR,#TABLE
       MOV    A,R2
       MOVC   A,@A+DPTR         ;取段码:TABLE+x

       MOV    DPTR,#7F01H       ;从PA口输出码值
       MOVX   @DPTR,A
       MOV    DPTR,#7F02H       ;从PB口输出位码
       MOV    A,R4
       MOVX   @DPTR,A
       RET

DELAY: MOV    R6,#2
LOK3:  MOV    R7,#0FFH
       DJNZ   R7,$
       DJNZ   R6,LOK3
       RET                      ;延迟(2us*255+2us)*2=1Ms


TABLE:
       DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
       DB  80H,90H,88H,83H,0C6H,0A1H,86H,8EH,8CH


SAO_MIAO:
       ACALL  UP_DOWN
       JNZ    LOK4
TIP1:  ACALL  DISP
       AJMP   SAO_MIAO
LOK4:  ACALL  DISP
       ACALL  DISP
       ACALL  UP_DOWN
       JNZ    LOK5
       AJMP   TIP1
LOK5:  MOV    R0,#40H             ;设R0为键扫描码入口地址
LOK6:  MOV    DPTR,#7F02H         ;从PB口输出扫描码
       MOV    A,@R0
       MOVX   @DPTR,A
       MOV    DPTR,#7F03H         ;从PC口输入行的状态
       MOVX   A,@DPTR
       CPL    A
       ANL    A,#0FH
       JZ     RIGHT_MOVE
       ADD    A,@R0
       MOV    60H,A

       MOV    R3,#00H             ;键值置初值
       MOV    R1,#44H             ;键码首地址送R1,查键值
CMP:   CLR    C
       MOV    A,60H
       SUBB   A,@R1
       JNZ    LOK7
LOK8:  LCALL  DISP
       LCALL  UP_DOWN
       JNZ    LOK8
       MOV    A,R3
       MOV    64H,63H
       MOV    63H,62H
       MOV    62H,61H
       MOV    61H,A
       RET

LOK7:  INC    R3
       INC    R1
       AJMP   CMP

RIGHT_MOVE:
       INC    R0                ;修改列扫描码
       CJNE   R0,#44H,LOK6
       AJMP   SAO_MIAO

UP_DOWN:

       MOV    DPTR,#7F02H
       MOV    A,#00H           ;从PB口输出00H
       MOVX   @DPTR,A
       MOV    DPTR,#7F03H      ;从PC口输入
       MOVX   A,@DPTR
       CPL    A
       ANL    A,#0FH
       RET


  T24C02_EEPW:
          MOV      R0,#20H        ;从24C02的20H单元开始写入数据
          MOV      R1,#61H        ;内存单元首地址放入R1中       
  LOK9:   SETB     P1.1
          NOP
          NOP
          NOP
          SETB     P1.0
          NOP
          NOP
          NOP
          SETB     P1.1           ;P1.1=1,P1.0=0时,开启24C02
          NOP
          CLR      P1.0                     
  TIP2:   MOV      A,#0A0H        ;对24C02写操作
          ACALL    EEPW
          JB       ACC.0,TIP2
          NOP
          NOP
          NOP
  TIP3:   MOV      A,R0
          ACALL    EEPW
          JB       ACC.0,TIP3
          NOP
          NOP
          NOP
  TIP4:   MOV      A,@R1
          ACALL    EEPW
          JB       ACC.0,TIP4
          CLR      P1.1
          CLR      P1.0
          SETB     P1.1
          SETB     P1.0         
          ACALL    DEL10MS         
          RET

DEL10MS:
          MOV      6EH,#10
  LOK10:  LCALL    DISP
          DJNZ     6EH,LOK10
          RET


    EEPW:
          CLR      P1.1
          MOV      7BH,#08H
  LOK11:  MOV      7CH,#04H
          RLC      A
          MOV      P1.0,C
          SETB     P1.1
          DJNZ     7CH,$
          CLR      P1.1
          DJNZ     7BH,LOK11
          SETB     P1.0
          SETB     P1.1
          MOV      C,P1.0
          NOP
          CLR      P1.1
          RLC      A
          RET


  T24C02_EEPR:
          MOV      R0,#20H
          MOV      R1,#61H
          MOV      7EH,#4
  LOK12:  CLR      P1.1
          SETB     P1.0
          NOP
          NOP
          SETB     P1.1
          CLR      P1.0
  TIP5:   MOV      A,#0A0H
          ACALL    EEPW
          JB       ACC.0,TIP5
  TIP6:   MOV      A,R0
          ACALL    EEPW
          JB       ACC.0,TIP6
          CLR      P1.1
          SETB     P1.0
          NOP
          NOP
          SETB     P1.1
          CLR      P1.0
  TIP7:   MOV      A,#0A1H
          ACALL    EEPW
          JB       ACC.0,TIP7
          MOV      7DH,#08H
  LOK13:
          SETB     P1.0
          SETB     P1.1
          MOV      C,P1.0
          CLR      P1.1
          RLC      A
          DJNZ     7DH,LOK13
          MOV      @R1,A
          CLR      P1.0
          NOP
          SETB     P1.1
          SETB     P1.0
          INC      R1
          INC      R0
          DJNZ     7EH,LOK12
          MOV      R5,#4
          MOV      R0,#61H
  LOOP:   MOV      A,@R0
          DEC      A
          MOV      @R0,A
          INC      R0
          DJNZ     R5,LOOP
          RET
        
          SETB     P1.0
          SETB     P1.1
          MOV      R0,#21H        ;从24C02的20H单元开始写入数据
          MOV      R1,#62H        ;内存单元首地址放入R1中
  LOK91:  SETB     P1.1           ;P1.1=1,P1.0=0时,开启24C02
          CLR      P1.0
  TIP21:  MOV      A,#0A0H        ;对24C02写操作
          ACALL    EEPW
          JB       ACC.0,TIP21
  TIP31:  MOV      A,R0
          ACALL    EEPW
          JB       ACC.0,TIP31
  TIP41:  MOV      A,@R1
          ACALL    EEPW
          JB       ACC.0,TIP41
          CLR      P1.0
          NOP
          NOP
          SETB     P1.1
          NOP
          NOP
          SETB     P1.0
          ACALL    DEL10MS


          SETB     P1.0
          SETB     P1.1
          MOV      R0,#22H        ;从24C02的20H单元开始写入数据
          MOV      R1,#63H        ;内存单元首地址放入R1中

  LOK92:  SETB     P1.1           ;P1.1=1,P1.0=0时,开启24C02
          CLR      P1.0
  TIP22:   MOV      A,#0A0H        ;对24C02写操作
          ACALL    EEPW
          JB       ACC.0,TIP22
  TIP32:   MOV      A,R0
          ACALL    EEPW
          JB       ACC.0,TIP32
  TIP42:   MOV      A,@R1
          ACALL    EEPW
          JB       ACC.0,TIP42
          CLR      P1.0
          NOP
          NOP
          SETB     P1.1
          NOP
          NOP
          SETB     P1.0
          ACALL    DEL10MS


          SETB     P1.0
          SETB     P1.1
          MOV      R0,#23H        ;从24C02的20H单元开始写入数据
          MOV      R1,#64H        ;内存单元首地址放入R1中
  LOK93:   SETB     P1.1           ;P1.1=1,P1.0=0时,开启24C02
          CLR      P1.0
  TIP23:   MOV      A,#0A0H        ;对24C02写操作
          ACALL    EEPW
          JB       ACC.0,TIP23
  TIP33:   MOV      A,R0
          ACALL    EEPW
          JB       ACC.0,TIP33
  TIP43:   MOV      A,@R1
          ACALL    EEPW
          JB       ACC.0,TIP43
          CLR      P1.0
          NOP
          NOP
          SETB     P1.1
          NOP
          NOP
          SETB     P1.0
          ACALL    DEL10MS
          RET


⌨️ 快捷键说明

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