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

📄 e2prom.asm

📁 24c08读写,通过按键写入数据,LCD0802显示
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        SCL     EQU     P1.3
        SDA     EQU     P1.4
        RS      EQU     P1.5
        RW      EQU     P1.6
        E       EQU     P1.7
        ;--------------------
        MODE	      EQU     30H
        SUB_MODE      EQU     31H
        KEY_BUF       EQU     32H
        KEY_STATE     EQU     33H
        DATA_BUF0     EQU     34H
        DATA_BUF1     EQU     35H
        DATA_BUF2     EQU     36H
        DATA_BUF3     EQU     37H
        DATA_BUF4     EQU     38H
        DATA_BUF5     EQU     39H
        DATA_BUF6     EQU     3AH
        DATA_BUF7     EQU     3BH
        DATA_BUF8     EQU     3CH
        COUNT         EQU     3DH
        DISP_FLAG     BIT     00
        START_MODE    EQU     0
        READ_MODE     EQU     1
        WRITE_MODE    EQU     2
        EXIT_MODE     EQU     3

        RNONE_SUBMODE       EQU     0    ;  READ MODE
        RADD_SUBMODE        EQU     1
        RDATA_SUBMODE       EQU     2
        ;--------------------
        WNONE_SUBMODE       EQU     0   ;  WRITE MODE
        WADD_SUBMODE        EQU     1
        WDATA_SUBMODE       EQU     2
        ;--------------------
        ORG     0000H
        LJMP    INIT
        ORG     0030H
INIT:
        MOV     MODE,#START_MODE
        MOV     SUB_MODE,#0
        MOV     COUNT,#0
        MOV     KEY_STATE,#0FFH
        SETB    DISP_FLAG
        MOV     P2,#00000001B ;清屏
        LCALL   DISP_WRCWD
        MOV     P2,#00111000B ;8位2行5x7点阵
        LCALL   DISP_WRCWD
        MOV     P2,#00001100B ;显示器开
        LCALL   DISP_WRCWD

;-----------------------------
MAIN_LOOP:
        LCALL   KEY
        LCALL   DISPLAY
	LCALL   DELAY_1MS
        LJMP    MAIN_LOOP
;==========================================================
KEY:
        MOV     P3,#0FH
        NOP
        MOV     A,P3
        CPL     A
        ANL     A,#0FH
        JNZ     KEY_CON10

        SETB    P1.1
        SETB    P1.2
        JNB     P1.1,KEY_CON10
        JNB     P1.2,KEY_CON10
        ;-------------------------
        SETB    C
        MOV     A,KEY_STATE
        RLC     A
        MOV     KEY_STATE,A
KEY_RET:
        RET
        ;-------------------------
KEY_CON10:
        CLR     C
        MOV     A,KEY_STATE
        RLC     A
        MOV     KEY_STATE,A
        JNZ     KEY_RET
        JNB     P1.1,KEY_OKJMP
        JNB     P1.2,KEY_DOWNJMP
;---------------------------------
        SETB    DISP_FLAG
        ;---------------------
        MOV     P3,#11101111B
        NOP
        MOV     A,P3

        JNB     ACC.0,KEY_11
        JNB     ACC.1,KEY_12
        JNB     ACC.2,KEY_13
        JNB     ACC.3,KEY_14
        ;---------------------
        MOV     P3,#11011111B
        NOP
        MOV     A,P3

        JNB     ACC.0,KEY_21
        JNB     ACC.1,KEY_22
        JNB     ACC.2,KEY_23
        JNB     ACC.3,KEY_24
        ;---------------------
        MOV     P3,#10111111B
        NOP
        MOV     A,P3

        JNB     ACC.0,KEY_31
        JNB     ACC.1,KEY_32
        JNB     ACC.2,KEY_33
        JNB     ACC.3,KEY_34
        ;---------------------
        MOV     P3,#01111111B
        NOP
        MOV     A,P3

        JNB     ACC.0,KEY_41
        JNB     ACC.1,KEY_42
        JNB     ACC.2,KEY_43
        JNB     ACC.3,KEY_44
        RET
KEY_OKJMP:
        SETB    DISP_FLAG
        LJMP    KEY_OK
KEY_DOWNJMP:
        SETB    DISP_FLAG
        LJMP    KEY_DOWN
;==================================
KEY_11:               ;"0"
        MOV     KEY_BUF,#0
        LJMP    KEY_0_F
KEY_12:               ;"1"
        MOV     KEY_BUF,#1
        LJMP    KEY_0_F
KEY_13:               ;"2"
        MOV     KEY_BUF,#2
        LJMP    KEY_0_F
KEY_14:               ;"3"
        MOV     KEY_BUF,#3
        LJMP    KEY_0_F
KEY_21:               ;"4"
        MOV     KEY_BUF,#4
        LJMP    KEY_0_F
KEY_22:               ;"5"
        MOV     KEY_BUF,#5
        LJMP    KEY_0_F
KEY_23:               ;"6"
        MOV     KEY_BUF,#6
        LJMP    KEY_0_F
KEY_24:               ;"7"
        MOV     KEY_BUF,#7
        LJMP    KEY_0_F
KEY_31:               ;"8"
        MOV     KEY_BUF,#8
        LJMP    KEY_0_F
KEY_32:               ;"9"
        MOV     KEY_BUF,#9
        LJMP    KEY_0_F
KEY_33:               ;"A"
        MOV     KEY_BUF,#0AH
        LJMP    KEY_0_F
KEY_34:               ;"B"
        MOV     KEY_BUF,#0BH
        LJMP    KEY_0_F
KEY_41:               ;"C"
        MOV     KEY_BUF,#0CH
        LJMP    KEY_0_F
KEY_42:               ;"D"
        MOV     KEY_BUF,#0DH
        LJMP    KEY_0_F
KEY_43:               ;"E"
        MOV     KEY_BUF,#0EH
        LJMP    KEY_0_F
KEY_44:               ;"F"
        MOV     KEY_BUF,#0FH
        LJMP    KEY_0_F
        RET
;------------------------------------------------
KEY_0_F:
KEY_WAIT1:
        MOV	P3,#0F0H
        MOV	A,P3
	CJNE	A,#0F0H,KEY_WAIT1		;等待按键释放
        MOV     A,MODE
        CJNE    A,#START_MODE,KEY_0_F_READ
        RET
KEY_0_F_READ:
        CJNE    A,#READ_MODE,KEY_0_F_WRITE
        MOV     A,SUB_MODE
        CJNE    A,#RNONE_SUBMODE,KEY_0_F_READ_ADD
        RET
KEY_0_F_READ_ADD:
        CJNE    A,#RADD_SUBMODE,KEY_0_F_RET
        MOV     A,COUNT
        CJNE    A,#0,KEY_0_F_READ_ADD1
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF0,A
        INC     COUNT
        RET
KEY_0_F_READ_ADD1:
        CJNE    A,#1,KEY_0_F_RET
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF0
        MOV     DATA_BUF0,A
        INC     COUNT
        RET
KEY_0_F_RET:
        INC     COUNT
        CLR     DISP_FLAG
        RET
        ;------------------
KEY_0_F_WRITE:
        CJNE    A,#WRITE_MODE,KEY_0_F_RET
        MOV     A,SUB_MODE
        CJNE    A,#WNONE_SUBMODE,KEY_0_F_WRITE_ADD
        RET
KEY_0_F_WRITE_ADD:
        CJNE    A,#WADD_SUBMODE,KEY_0_F_WDATA
        MOV     A,COUNT
        CJNE    A,#0,KEY_0_F_WRITE_ADD1
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF0,A
        INC     COUNT
        RET
KEY_0_F_WRITE_ADD1:
        CJNE    A,#1,KEY_0_F_RET
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF0
        MOV     DATA_BUF0,A
        INC     COUNT
        RET
        ;-----------
KEY_0_F_WDATA:
        MOV     A,COUNT
        CJNE    A,#0,KEY_0_F_WDATA1
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF1,A
        INC     COUNT
        RET
KEY_0_F_WDATA1:
        CJNE    A,#1,KEY_0_F_WDATA2
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF1
        MOV     DATA_BUF1,A
        INC     COUNT
        RET
KEY_0_F_WDATA2:
        CJNE    A,#2,KEY_0_F_WDATA3
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF2,A
        INC     COUNT
        RET
KEY_0_F_WDATA3:
        CJNE    A,#3,KEY_0_F_WDATA4
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF2
        MOV     DATA_BUF2,A
        INC     COUNT
        RET
KEY_0_F_WDATA4:
        CJNE    A,#4,KEY_0_F_WDATA5
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF3,A
        INC     COUNT
        RET
KEY_0_F_WDATA5:
        CJNE    A,#5,KEY_0_F_WDATA6
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF3
        MOV     DATA_BUF3,A
        INC     COUNT
        RET
KEY_0_F_WDATA6:
        CJNE    A,#6,KEY_0_F_WDATA7
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF4,A
        INC     COUNT
        RET
KEY_0_F_WDATA7:
        CJNE    A,#7,KEY_0_F_WDATA8
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF4
        MOV     DATA_BUF4,A
        INC     COUNT
        RET
KEY_0_F_WDATA8:
        MOV     A,COUNT
        CJNE    A,#8,KEY_0_F_WDATA9
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF5,A
        INC     COUNT
        RET
KEY_0_F_WDATA9:
        CJNE    A,#9,KEY_0_F_WDATA10
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF5
        MOV     DATA_BUF5,A
        INC     COUNT
        RET
KEY_0_F_WDATA10:
        CJNE    A,#10,KEY_0_F_WDATA11
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF6,A
        INC     COUNT
        RET
KEY_0_F_WDATA11:
        CJNE    A,#11,KEY_0_F_WDATA12
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF6
        MOV     DATA_BUF6,A
        INC     COUNT
        RET
KEY_0_F_WDATA12:
        CJNE    A,#12,KEY_0_F_WDATA13
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF7,A
        INC     COUNT
        RET
KEY_0_F_WDATA13:
        CJNE    A,#13,KEY_0_F_WDATA14
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF7
        MOV     DATA_BUF7,A
        INC     COUNT
        RET
KEY_0_F_WDATA14:
        CJNE    A,#14,KEY_0_F_WDATA15
        MOV     A,KEY_BUF
        RL      A
        RL      A
        RL      A
        RL      A
        MOV     DATA_BUF8,A
        INC     COUNT
        RET
KEY_0_F_WDATA15:
        CJNE    A,#15,KEY_0_F_RET1
        MOV     A,KEY_BUF
        ADD     A,DATA_BUF8
        MOV     DATA_BUF8,A
        INC     COUNT
KEY_0_F_RET1:

        INC     COUNT
        RET
;------------------------------------------------
KEY_OK:
KEY_WAIT2:
        SETB    P1.1
        JNB	P1.1,KEY_WAIT2		;等待按键释放
        MOV     A,MODE
        CJNE    A,#START_MODE,KEY_0K_READ
        MOV     MODE,#READ_MODE
        MOV     SUB_MODE,#RNONE_SUBMODE
        RET
KEY_0K_READ:
        CJNE    A,#READ_MODE,KEY_OK_WRITE
        MOV     A,SUB_MODE
        CJNE    A,#RNONE_SUBMODE,KEY_0K_READ_ADD
        MOV     SUB_MODE,#RADD_SUBMODE
        RET
KEY_0K_READ_ADD:
        CJNE    A,#RADD_SUBMODE,KEY_0K_READ_DATA
        MOV     A,COUNT
        CLR     C
        SUBB    A,#02H
        JC     KEY_OK_RET
        LCALL   I2C_START     ;写数据到EEPROM
        MOV     A,#0A0H       ;发送器件地址
        LCALL   I2C_WRBYT
        MOV     A,DATA_BUF0   ;发送字节地址
        LCALL   I2C_WRBYT
        LCALL   I2C_START
        MOV     A,#0A1H       ;发送器件地址
        LCALL   I2C_WRBYT
        MOV     R0,#DATA_BUF0
READ_I2C_DAT:
	LCALL   I2C_RDBYT     ;读数据
        MOV     @R0,A
        INC     R0
        LCALL   I2C_MACK
	CJNE    R0,#3CH,READ_I2C_DAT
        LCALL   I2C_MNACK
        LCALL   I2C_STOP
        MOV     SUB_MODE,#RDATA_SUBMODE
        MOV     COUNT,#0
        RET
KEY_0K_READ_DATA:
        MOV      SUB_MODE,#RNONE_SUBMODE
        RET
KEY_OK_RET:
        CLR     DISP_FLAG
        RET
        ;------------------
KEY_OK_WRITE:
        CJNE    A,#WRITE_MODE,KEY_OK_EXIT
        MOV     A,SUB_MODE
        CJNE    A,#WNONE_SUBMODE,KEY_0K_WRITE_ADD
        MOV     SUB_MODE,#WADD_SUBMODE
        RET
KEY_0K_WRITE_ADD:
        CJNE    A,#WADD_SUBMODE,KEY_0K_WRITE_DATA
        MOV     A,COUNT
        CLR     C
        SUBB    A,#02H
        JC      KEY_OK_RET
        MOV     SUB_MODE,#WDATA_SUBMODE
        MOV     COUNT,#0
        RET
KEY_0K_WRITE_DATA:
        CJNE    A,#WDATA_SUBMODE,KEY_OK_EXIT
        MOV     A,COUNT
        CLR     C
        SUBB    A,#0FH
        JC      KEY_OK_RET
        LCALL   I2C_START
        MOV     A,#0A0H       ;发送器件地址
        LCALL   I2C_WRBYT
        MOV     A,DATA_BUF0   ;发送字节地址
        LCALL   I2C_WRBYT
        MOV     R0,#DATA_BUF1
WRITE_I2C_DAT:
        MOV     A,@R0           ;发送数据
        LCALL   I2C_WRBYT
        INC     R0
        CJNE    R0,#3DH,WRITE_I2C_DAT
        LCALL   I2C_STOP
        MOV     COUNT,#0
        MOV     SUB_MODE,#WNONE_SUBMODE
        RET
        ;------------------
KEY_OK_EXIT:
        MOV     MODE,#START_MODE
        RET
;------------------------------------------------
KEY_DOWN:
KEY_WAIT3:

⌨️ 快捷键说明

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