📄 pixel_on.asm
字号:
;;**************************************
;; PIXEL_ON, LCD program
;;**************************************
prepixelx equ 30h
prepixely equ 31h
predata equ 32h
PROG SEGMENT CODE
public _PIXEL_ON
;;STACK SEGMENT IDATA
;;RSEG STACK
;;DS 10H ; 16 Bytes Stack
CSEG AT 0
USING 0 ; Register-Bank 0
;;Execution starts at address 0 on power-up.
;;SHOW_DATA(uint8 x,uint8 y)
;;R7=x, R5=y
RSEG PROG
_PIXEL_ON:
MOV A,R7 ;;X
ANL A,#80H
JNZ LOOP2
MOV A,R7
ANL A,#40H
JNZ LOOP1
LOOP0:
MOV A,R7
ADD A,#40H
MOV R7,A
MOV R0,A
CALL OUTI0 ;; set Y address
MOV B,#08H
MOV A,R5
DIV AB
ADD A,#0B8H
MOV R0,A
mov r6,a
MOV R2,B
CALL OUTI0 ;; set page(X) address
MOV A,R2
JNZ DIAN00
INC A
JMP DIAN01
DIAN00:
MOV A,#01H
LOOP00:
RL A
DJNZ R2 , LOOP00
DIAN01:
MOV R2,A
mov a,prepixelx
xrl A,R7
jnz DIAN02
mov a,prepixely
xrl a,r6
jnz DIAN02
mov a,predata
ORL A,R2
mov r2,a
DIAN02:
mov a,r2
mov predata,a
MOV R0,A
CALL OUTD0
mov prepixelx,r7
mov prepixely,r6
RET
;;**************************************
LOOP1:
MOV A,R7
anl a,#3FH
ADD A,#40H
MOV R7,A
MOV R0,A
CALL OUTI1 ;; set Y address
MOV B,#08H
MOV A,R5
DIV AB
ADD A,#0B8H
MOV R0,A
mov r6,a
MOV R2,B
CALL OUTI1 ;; set page(X) address
MOV A,R2
JNZ DIAN10
INC A
JMP DIAN11
DIAN10:
MOV A,#01H
LOOP10:
RL A
DJNZ R2 , LOOP10
DIAN11:
MOV R2,A
mov a,prepixelx
xrl A,R7
jnz DIAN12
mov a,prepixely
xrl a,r6
jnz DIAN12
mov a,predata
ORL A,R2
mov r2,a
DIAN12:
mov a,r2
mov predata,a
MOV R0,A
CALL OUTD1
mov prepixelx,r7
mov prepixely,r6
RET
;;**************************************
LOOP2:
MOV A,R7
anl a,#3FH
ADD A,#40H
MOV R7,A
MOV R0,A
CALL OUTI2 ;; set Y address
MOV B,#08H
MOV A,R5
DIV AB
ADD A,#0B8H
MOV R0,A
mov r6,a
MOV R2,B
CALL OUTI2 ;; set page(X) address
MOV A,R2
JNZ DIAN20
INC A
JMP DIAN21
DIAN20:
MOV A,#01H
LOOP20:
RL A
DJNZ R2 , LOOP20
DIAN21:
MOV R2,A
mov a,prepixelx
xrl A,R7
jnz DIAN22
mov a,prepixely
xrl a,r6
jnz DIAN22
mov a,predata
ORL A,R2
mov r2,a
DIAN22:
mov a,r2
mov predata,a
MOV R0,A
CALL OUTD2
mov prepixelx,r7
mov prepixely,r6
RET
OUTI0:
MOV DPTR,#6FF1H ;;WRITE DDRAM ADDRESS
MOV A,#010H ;;E=1, RW=0, DI=0, CS2=0, CS1=0
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#03H
MOVX @DPTR,A
RET
OUTD0:
MOV DPTR,#6FF1H ;;WRITE DISPLAY DATA
MOV A,#014H ;;E=1, RW=0, DI=1, CS2=0, CS1=0
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#04H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#07H
MOVX @DPTR,A
RET
OUTI1:
MOV DPTR,#6FF1H ;;WRITE DDRAM ADDRESS
MOV A,#012H ;;E=1, RW=0, DI=0, CS2=1, CS1=0
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#03H
MOVX @DPTR,A
RET
OUTD1:
MOV DPTR,#6FF1H ;;WRITE DISPLAY DATA
MOV A,#016H ;;E=1, RW=0, DI=1, CS2=1, CS1=0
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#04H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#07H
MOVX @DPTR,A
RET
OUTI2:
MOV DPTR,#6FF1H ;;WRITE DDRAM ADDRESS
MOV A,#011H ;;E=1, RW=0, DI=0, CS2=0, CS1=1
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#03H
MOVX @DPTR,A
RET
OUTD2:
MOV DPTR,#6FF1H ;;WRITE DISPLAY DATA
MOV A,#015H ;;E=1, RW=0, DI=1, CS2=0, CS1=1
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#04H
MOVX @DPTR,A
MOV DPTR,#6FF1H
MOV A,#07H
MOVX @DPTR,A
RET
ReadData:
MOV DPTR,#6FF3H ;;SET 8255 PA READ
MOV A,#99H
MOVX @DPTR,A
MOV DPTR,#6FF1H ;;WRITE DDRAM ADDRESS
MOV A,R3 ;; E=0,
MOVX @DPTR,A
MOV A,R3 ;;E=1, RW=1, DI=1, CS2, CS1
ORL A,#10H
MOVX @DPTR,A
MOV A,R3
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#6FF3H ;;SET 8255 PA WRITE
MOV A,#89H
MOVX @DPTR,A
RET
ReadBusy:
MOV DPTR,#6FF3H ;;SET 8255 PA READ
MOV A,#99H
MOVX @DPTR,A
MOV DPTR,#6FF1H ;;WRITE DDRAM ADDRESS
MOV A,#18H ;;E=1, RW=1, DI=0
MOVX @DPTR,A
MOV DPTR,#6FF0H
MOVX A,@DPTR
MOV R4,A
MOV DPTR,#6FF3H ;;SET 8255 PA WRITE
MOV A,#89H
MOVX @DPTR,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -