📄 lcd.asm
字号:
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 + -