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

📄 lcd.asm

📁 串口通信及液晶显示
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        ACALL PKEYRIGHT
        SJMP PKEYEND
PKEYNEXT4:
        JB KEYLEFT,PKEYNEXT5
        ACALL PKEYLEFT
        SJMP PKEYEND
PKEYNEXT5:
        JB KEYDOWN,PKEYNEXT6
        ACALL PKEYDOWN
        SJMP PKEYEND
PKEYNEXT6:
        JB KEYENTER,NOKEY
        ACALL PKEYENTER
        SJMP PKEYEND
NOKEY:
        CLR KDOWN1
        CLR KDOWN2
        CLR KDONE
        SJMP MAINLOOP
PKEYEND:
        SETB KDONE
        SJMP MAINLOOP


PKEYUP:
        MOV BIZ,#BIZ_UP
        MOV ITEM,#ITEM_GOODSCODE
        MOV START,#0F8H
        MOV COM,#01H
        ACALL WRITE
        MOV COM,#80H
        MOV DPTR,#MSG1
        ACALL HZDISP
        ACALL CLEAREDIT
        MOV EBUFH,#30H
        MOV EPOS,#01H
        ACALL DISPEDIT
        RET

PKEYDOWN:
        MOV BIZ,#BIZ_DOWN
        MOV ITEM,#ITEM_GOODSCODE
        MOV START,#0F8H
        MOV COM,#01H
        ACALL WRITE
        MOV COM,#80H
        MOV DPTR,#MSG1
        ACALL HZDISP
        ACALL CLEAREDIT
        MOV EBUFH,#30H
        MOV EPOS,#01H
        ACALL DISPEDIT
        RET

PKEYRIGHT:
        MOV A,EPOS
        CJNE A,#0EH,PKEYRIGHT2  ;最多输入15个字符
        SJMP PKEYRIGHT3
PKEYRIGHT2:
        MOV A,#EBUFH
        ADD A,EPOS
        MOV R0,A
        MOV R1,A
        DEC R1
        MOV R3,EPOS
PKEYRIGHT1:
        MOV A,@R1
        MOV @R0,A
        DEC R1
        DEC R0
        DJNZ R3,PKEYRIGHT1
        INC EPOS
        MOV R1,#EBUFH
        MOV @R1,#30H
        ACALL DISPEDIT
PKEYRIGHT3:
        RET

PKEYLEFT:
        MOV A,EPOS
        CJNE A,#01H,PKEYLEFT2
        SJMP PKEYLEFT4
PKEYLEFT2:
        MOV R0,#EBUFH
        MOV R1,#EBUFH
        INC R1
        DEC EPOS
        MOV R3,EPOS
PKEYLEFT1:
        MOV A,@R1
        MOV @R0,A
        INC R1
        INC R0
        DJNZ R3,PKEYLEFT1
        MOV @R0,#20H
        ACALL DISPEDIT
PKEYLEFT4:
        RET

PKEYENTER:
        MOV A,BIZ
        CJNE A,#BIZ_UP,PKEYENTER_1
        ACALL PBIZ_UP
        SJMP PKEYENTER_END
PKEYENTER_1:
        SJMP PKEYENTER_END
PKEYENTER_END:
        RET

PBIZ_UP:
        MOV A,ITEM
        CJNE A,#ITEM_GOODSCODE,PBIZ_UP_1
        MOV R0,#EBUFH
        MOV R2,EPOS
        MOV R1,#BUF2   ;将输入的商品编码存在BUF2内,首字节为长度
        MOV A,EPOS
        MOV @R1,A
        INC R1
        ACALL COPYBYTES
        MOV R5,EPOS
        MOV R0,#BUF2
        INC R0
        MOV R6,#CMD_GETGOODSNAME
        ACALL MAKE_SEND_PACKET
        SETB SNDFLAG
        ACALL CLEARDISP
        MOV COM,#80H
        MOV DPTR,#MSG2
        ACALL DISPC
        ACALL CLEAREDIT
        MOV EBUFH,#30H
        MOV EPOS,#01H
        ACALL DISPLAST
        MOV ITEM,#ITEM_GOODSQTY
        SJMP PBIZ_UP_END
PBIZ_UP_1:
        CJNE A,#ITEM_GOODSQTY,PBIZ_UP_2
        ACALL CLEARDISP
        MOV R0,#BUF1
        MOV A,@R0
        MOV R5,A
        INC R0
        MOV COM,#80H
        ACALL DISPD
        MOV DPTR,#MSG3
        MOV COM,#90H
        ACALL DISPC
        MOV A,#EBUFH
        ADD A,EPOS
        DEC A
        MOV R0,A
        MOV R1,#BUF3
        MOV R5,EPOS
        MOV @R1,EPOS
        INC R1
PBIZ_UP_1_1:
        MOV A,@R0
        MOV @R1,A
        DEC R0
        INC R1
        DJNZ R5,PBIZ_UP_1_1
        MOV R0,#BUF3
        INC R0
        MOV R5,EPOS
        MOV COM,#95H
        ACALL DISPD
        MOV ITEM,#ITEM_CONFIRM
        SJMP PBIZ_UP_END
PBIZ_UP_2:
        MOV R0,#SENDBUF
        MOV @R0,#00H
        INC R0
        MOV R1,#BUF2
        MOV A,@R1
        MOV R1,#BUF3
        ADD A,@R1
        ADD A,#03H
        MOV R5,A
        INC R5  
        MOV @R0,A
        INC R0
        MOV @R0,#CMD_UPGOODS
        INC R0
        MOV A,R0
        MOV R1,A
        MOV R0,#BUF2
        MOV A,@R0
        MOV R2,A
        INC R0
        ACALL COPYBYTES
        MOV @R1,#20H
        INC R1
        MOV R0,#BUF3
        MOV A,@R0
        MOV R2,A
        INC R0
        ACALL COPYBYTES
        MOV R0,#SENDBUF
        MOV A,#00H
P_BIZ_UP_3:
        XRL A,@R0
        INC R0
        DJNZ R5,P_BIZ_UP_3
        MOV @R0,A
        SETB SNDFLAG
        ACALL CLEARDISP
        MOV BIZ,#BIZ_NONE
        MOV ITEM,#ITEM_NONE
PBIZ_UP_END:
        RET

MAKE_SEND_PACKET:   ;生成发送包,输入参数R0:发送内容缓冲区 R5:缓冲区字节数 R6:发送命令
        MOV R1,#SENDBUF
        MOV @R1,#00H
        MOV A,R5
        ADD A,#02H  ;长度包含命令与校验码
        INC R1
        MOV @R1,A
        INC R1
        MOV A,R6
        MOV @R1,A
        INC R1
        CJNE R5,#00H,MAKE_SEND_PACKET_1
        SJMP MAKE_SEND_PACKET_2
MAKE_SEND_PACKET_1:  ;复制缓冲区内容到发送区
        MOV A,R5
        MOV R7,A
MAKE_SEND_PACKET_3:
        MOV A,@R0
        MOV @R1,A
        INC R0
        INC R1
        DJNZ R7,MAKE_SEND_PACKET_3
MAKE_SEND_PACKET_2:
        MOV R1,#SENDBUF
        MOV A,R5
        ADD A,#03H ;参与生成校验码的字节数,网络号,长度,命令
        MOV R7,A
        MOV A,#00H
MAKE_SEND_PACKET_4:
        XRL A,@R1
        INC R1
        DJNZ R7,MAKE_SEND_PACKET_4
        MOV @R1,A
        RET

COPYBYTES:     ;从R0复制R2个字节到R1
        CJNE R2,#00H,COPYBYTES_1
        SJMP COPYBYTES_END
COPYBYTES_1:
        MOV A,@R0
        MOV @R1,A
        INC R0
        INC R1
        DJNZ R2,COPYBYTES
COPYBYTES_END:
;        MOV @R1,#00H
        RET

CLEARDISP:                 ;清屏
        MOV START,#0F8H
        MOV COM,#01H
        ACALL WRITE
        RET

CLEARLINE:                 ;清一行
        MOV START,#0F8H
;        MOV COM,#90H
        ACALL WRITE
        MOV R7,#15
        MOV START,#0FAH
CLEARLINE_1:
        MOV COM,#20H
        ACALL WRITE
        DJNZ R7,CLEARLINE_1
        RET

DISPC: ;从程序空间显示,从DPTR取值,直到0为至,从COM设置的光标处显示
        MOV START,#0F8H
        ACALL WRITE
        MOV START,#0FAH
DISPC_1:
        MOV A,#00H
        MOVC A,@A+DPTR
        JZ DISPC_END
        MOV COM,A
        ACALL WRITE
        INC DPTR
        SJMP DISPC_1
DISPC_END:
        RET

DISPD:  ;从R0指定的地址处开始显示,从COM设置的光标处显示 ,R5存放显示字节数
        CJNE R5,#00H,DISPD_1
        SJMP DISPD_END
DISPD_1:
        MOV START,#0F8H
        ACALL WRITE
        MOV START,#0FAH
DISPD_2:
        MOV COM,@R0
        ACALL WRITE
        INC R0
        DJNZ R5,DISPD_2
DISPD_END:
        RET

CLEAREDIT:
        MOV R0,#15
        MOV R1,#EBUFT
CLEARBUF:
        MOV @R1,#20H
        DEC R1
        DJNZ R0,CLEARBUF
        RET

DISPEDIT:
        MOV START,#0F8H
        MOV COM,#90H
        ACALL WRITE
        MOV R0,#15
        MOV START,#0FAH
        MOV R1,#EBUFT
DISPEDIT1:
        MOV COM,@R1
        ACALL WRITE
        DEC R1
        DJNZ R0,DISPEDIT1
        RET

DISPLAST:
        MOV START,#0F8H
        MOV COM,#97H
        ACALL WRITE
        MOV START,#0FAH
        MOV COM,EBUFH
        ACALL WRITE
        RET

PKEYINC:
        MOV A,EBUFH
        INC ACC
        CJNE A,#3AH,PKEYINC1
        MOV A,#30H
PKEYINC1:
        MOV EBUFH,A
        ACALL DISPLAST
        RET

PKEYDEC:
        MOV A,EBUFH
        DEC A
        CJNE A,#2FH,PKEYDEC1
        MOV A,#39H
PKEYDEC1:
        MOV EBUFH,A
        ACALL DISPLAST
        RET

MSG1:  DB "请输入商品代码:"
       DB 0
MSG2:  DB "请输入上架数量:"
       DB 0
MSG3:  DB "上架数量:"
       DB 0

KEYDELAY:
        PUSH ACC
        MOV A,KDELAYL
        DEC A
        MOV KDELAYL,A
        JNZ KEYDELAY_1
        MOV A,KDELAYH
        JZ KEYDELAY_2
        DEC A
        MOV KDELAYH,A
        SJMP KEYDELAY_1
KEYDELAY_2:
        SETB KDOWN2
KEYDELAY_1:
        POP ACC
        RET

WRITE:
      MOV A,COM
      ANL A,#0F0H
      MOV HDATA,A
      MOV A,COM
      SWAP A
      ANL A,#0F0H
      MOV LDATA,A
      MOV A,START
      ACALL SENDBYTE
;      ACALL LCDDELAY
      MOV A,HDATA
      ACALL SENDBYTE
;      ACALL LCDDELAY
      MOV A,LDATA
      ACALL SENDBYTE
;      ACALL LCDDELAY
RET

SENDBYTE:
       MOV R7,#08H
LOOP1: RLC A
       MOV SID,C
       CLR SCLK
       MOV R6,#01H
HERE:  DJNZ R6,HERE
       SETB SCLK
       MOV R6,#01H
HERE1:  DJNZ R6,HERE1
       DJNZ R7,LOOP1
       MOV R7,#20H
       DJNZ R7,$
       RET

HZDISP:MOV R5,#16
       MOV START,#0F8H
       ACALL WRITE
       MOV START,#0FAH
LOOP2: MOV A,POS
;       ADD A,R0
;       MOV R0,A
;       MOVX A,@R0
       MOVC A,@A+DPTR
       DJNZ R5,NEXTDISP
       AJMP ENDDISP
NEXTDISP:
       CJNE A,#00H,DISPHZ2
       MOV COM,#20H
       ACALL WRITE
       AJMP LOOP2
DISPHZ2:
       MOV COM,A
       ACALL WRITE
       INC DPTR
;       INC R0
       AJMP LOOP2
ENDDISP:
       RET
LINE1: DB "日出江花红胜红"
       DB 0
LINE2: DB "春来江水绿如蓝"
       DB 0

MACNO: DB "10002"
       DB 0
SHELFNO: DB "A0100112345"
         DB 0
END

⌨️ 快捷键说明

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