📄 ci910cpu.asm.svn-base
字号:
movx a,@dptr ;dumy read
movx a,@dptr
anl a,HideReg1
orl a,@r0
movx @dptr,a
inc r0
djnz r4,BMP_WriteLoop
pop AR4
ret
;========================================================================;
StoreBmpHeadPro:
push ControlStatus ;zdhx
anl ControlStatus,#FlashPage0
anl ControlStatus,#_Bit_PageCS
orl ControlStatus,#BMP_Address
lcall ChangeStatusPro ;enable the page of BMP
mov dph,r2
mov dpl,r1
movx a,@dptr
clr c
rlc a ;*2
mov LengthX,a ;LengthX==Width
inc dptr
movx a,@dptr ;read in height
inc dptr
mov AddressRegH,dph
mov AddressRegL,dpl
pop ControlStatus ;zdhx
lcall ChangeStatusPro ;enable the page 0 and RAM
ret
;========================================================================;
;void DrawLine(uchar X1,uchar Y1,uchar X2);
;-------------------------------;
;Description: Draw line on LCD
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; PublicVariable2==DispMode
; OUT: No
; USE: A,R3,R5,R7
;-------------------------------;
_DrawLinePro:
lcall EnterModifyReadMode ;LCD enter modify-read mode
push PageReg1
push PageReg2
push HideReg1
push HideReg2
mov a,r7
cjne a,#128,LineDispX2Judg
LineDispX2Judg:
jc LineDisplayX2OK
mov r7,#127
LineDisplayX2OK:
mov a,PublicVariable2
jnb acc.2,DrawReverse
xrl a,#03h
DrawReverse:
anl a,#03h ;display color
mov PublicVariable2,a
clr psw.5
mov a,r7
mov b,r3
cjne a,b,JudgX
setb psw.5
ajmp DrawLineJudgY
JudgX:
jc DrawLineJudgY
xch a,r3
xch a,r7 ;X1<X2
xch a,r3
ajmp _DrawLineProcess
DrawLineJudgY:
mov a,r5
cjne a,PublicVariable1,JudgY
JudgY:
jc _DrawLineProcess
xch a,PublicVariable1
xch a,r5 ;Y1<Y2
xch a,PublicVariable1
_DrawLineProcess:
jb psw.5,_DrawY
lcall _Draw_X_Line
ajmp _DrawLineExit
_DrawY:
lcall _Draw_Y_Line
_DrawLineExit:
pop HideReg2
pop HideReg1
pop PageReg2
pop PageReg1
lcall ResetModifyReadMode ;LCD exit modify-read mode
ret
;========================================================================;
;Description: Draw horizontal line on LCD
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; PublicVariable2==DispMode
; OUT: No
; USE: A,R2,R3,(A,R2,R3,R4,R5,R6,R7,DPTR)
;-------------------------------;
_Draw_X_Line:
lcall DrawCalculate
clr c
mov a,r3
subb a,r7
inc a
mov r2,a ;length==X2-X1+1
mov r3,PublicVariable2 ;display color
Draw_X_LineLoop:
lcall _DrawPixelRead
inc r7 ;X increment
djnz r2,Draw_X_LineLoop
ret
;========================================================================;
;Description: Draw vertical line on LCD
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; PublicVariable2==DispMode
; OUT: No
; USE: A,B,R3,R5,R6
;-------------------------------;
_Draw_Y_Line:
push PageReg1
push PageReg2
push HideReg1
push HideReg2
lcall DisplayAddCal
mov a,PageReg2
clr c
subb a,PageReg1
clr psw.5 ;in same page flag
jnz _Draw_Y_LineCal
setb psw.5 ;psw.5==1,in same page
_Draw_Y_LineCal:
lcall Calculate
mov r3,PublicVariable2 ;display color
lcall EnterModifyReadMode ;LCD enter modify-read mode
_Draw_Y_LineLoop:
lcall SetLCDAddress
mov b,HideReg1
xrl b,#0ffh
jnb psw.5,_Draw_Y
mov a,HideReg2
cpl a
anl a,b
mov b,a
mov a,HideReg1
orl a,HideReg2
mov HideReg1,a
ajmp _Draw_Data
_Draw_Y:
mov a,PageReg2
cjne a,#1,_Draw_Data
mov HideReg1,HideReg2 ;end line
mov b,HideReg1
xrl b,#0ffh
_Draw_Data:
movx a,@dptr ;dumy read
movx a,@dptr ;read in data1
movx @dptr,a ;for incerement LCD DDRAM address
anl a,HideReg1
mov r5,a
movx a,@dptr ;dumy read
movx a,@dptr ;read in data1
anl a,HideReg1
mov r6,a
lcall DispalySetX_Address
mov HideReg1,#00h
inc PageReg1 ;page increment
djnz PageReg2,_Draw_Y_LineLoop
lcall ResetModifyReadMode
pop HideReg2
pop HideReg1
pop PageReg2
pop PageReg1
ret
;========================================================================;
;void DrawRectangle(uchar X1,uchar Y1,uchar X2);
;-------------------------------;
;Description: Draw a rectangle on LCD
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; PublicVariable2==DispMode
; OUT: No
; USE: A,R3,R5,R7,(A,R2,R3,R4,R5,R7)
;-------------------------------;
_DrawRectanglePro:
push X1
push Y1
push X2
push Y2
push psw
mov X1,r7
mov Y1,r5
mov X2,r3
mov Y2,PublicVariable1 ;backup
push PublicVariable2
mov a,PublicVariable2
swap a
anl a,#0fh
mov PublicVariable2,a
lcall _ClearWindowPro ;clear rectangle
pop PublicVariable2
mov r7,X1 ;x1
mov r5,Y1 ;y1
mov r3,X2 ;x2
mov PublicVariable1,Y1 ;y2
lcall _DrawLinePro ;x1y1---x2y1
mov r7,X1 ;x1
mov r5,Y1 ;y1
mov r3,X1 ;x2
mov PublicVariable1,Y2 ;y2
lcall _DrawLinePro ;x1y1---x1y2
mov r7,X1 ;x1
mov r5,Y2 ;y1
mov r3,X2 ;x2
mov PublicVariable1,Y2 ;y2
lcall _DrawLinePro ;x1y2---x2y2
mov r7,X2 ;x1
mov r5,Y1 ;y1
mov r3,X2 ;x2
mov PublicVariable1,Y2 ;y2
lcall _DrawLinePro ;x2y1---x2y2
pop psw
pop Y2
pop X2
pop Y1
pop X1
ret
;========================================================================;
;void ReverseRectangle(uchar X1,uchar Y1,uchar X2);
;-------------------------------;
;Description: Reverse displayed rectangle
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; OUT: No
; USE: A,B,R3,R7,DPTR,
;-------------------------------;
_ReverseRectanglePro:
lcall EnterModifyReadMode ;LCD enter modify-read mode
push PageReg1
push PageReg2
push HideReg1
push HideReg2
mov a,r3
cjne a,#128,ReverseX2Judg
ReverseX2Judg:
jc ReverseX2OK
mov r3,#127
ReverseX2OK:
dec PublicVariable1 ;zdhy for inc 1 in DisplayAddCal
lcall DisplayAddCal
xrl HideReg1,#0ffh
xrl HideReg2,#0ffh
mov a,PageReg2
clr c
subb a,PageReg1
inc a
mov PageReg2,a
clr psw.5
cjne a,#1,ReverseCalcPage
setb psw.5 ;psw.5==1,in same page
ReverseCalcPage:
mov a,PageReg1
add a,#0b0h
mov PageReg1,a ;page
mov a,r3
clr c
subb a,r7
clr c
rlc a
mov r3,a ;length==(X2-X1)*2
ReverseRectangleLoop:
jnb psw.5,PageReverseNoSamePage
mov a,HideReg1
anl a,HideReg2
mov HideReg1,a
ljmp PageReverse
PageReverseNoSamePage:
mov a,PageReg2
cjne a,#1,PageReverse
mov HideReg1,HideReg2
PageReverse:
lcall SetLCDAddress ;set display address
mov b,r3
ReverseLine:
movx a,@dptr
movx a,@dptr ;dump read
xrl a,HideReg1
movx @dptr,a
djnz b,ReverseLine
inc PageReg1 ;incresment page address
mov HideReg1,#0ffh
djnz PageReg2,ReverseRectangleLoop
pop HideReg2
pop HideReg1
pop PageReg2
pop PageReg1
lcall ResetModifyReadMode
ret
;========================================================================;
DrawCalculate:
mov a,r5 ;Y
mov b,#8
div ab
add a,#0b0h ;page address
mov PageReg1,a ;page=Y/8+0xb0
mov dptr,#LCD_PixelTable
mov a,b
movc a,@a+dptr
mov r4,a ;pixel attribute
cpl a
mov b,a
lcall SetLCDAddress
ret
;========================================================================;
;void DrawPixel(uchar X,uchar Y,uchar DispMode);
;-------------------------------;
;Description: Draw pixel on LCD
; IN: R7==X
; R5==Y
; R3==DispMode
; OUT: No
; USE: A,B,DPTR,R1,R3,R4,R5,R6,R7
;-------------------------------;
_DrawPixelPro:
mov r1,PageReg1
lcall DrawCalculate
PixelReverse:
mov a,r3
jnb acc.2,_DrawPixelIni
xrl a,#03h
_DrawPixelIni:
anl a,#03h ;reverse display
mov r3,a
_DrawPixelRead:
lcall EnterModifyReadMode ;LCD enter modify-read mode
movx a,@dptr ;dumy read
movx a,@dptr
movx @dptr,a ;for DDRAM address increment
anl a,r4 ;hide other bit
mov r5,a
movx a,@dptr ;dumy read
movx a,@dptr
anl a,r4 ;hide other bit
mov r6,a
lcall DispalySetX_Address
lcall ResetModifyReadMode
mov PageReg1,r1
ret
;========================================================================;
DispalySetX_Address:
mov dptr,#LCD_CommandPort
lcall SetLCD_X_Address ;rewrite display address
cjne r3,#ColorWhite,PixelLightGray
ljmp DrawPixelPro
PixelLightGray:
cjne r3,#ColorLightGray,PixelDarkGray
mov a,b
orl AR6,a ;light gray
ljmp DrawPixelPro
PixelDarkGray:
cjne r3,#ColorDarkGray,PixelDark
mov a,b
orl AR5,a
ljmp DrawPixelPro ;dark gray
PixelDark:
mov a,b
orl AR5,a
orl AR6,a
DrawPixelPro:
mov a,r5
movx @dptr,a ;write display data1
mov a,r6
movx @dptr,a ;write display data2
ret
;========================================================================;
;void ClearWindow(uchar X1,uchar Y1,uchar X2);
;-------------------------------;
;Description: Clear a rectangle on LCD with specified color
; IN: R7==X1
; R5==Y1
; R3==X2
; PublicVariable1==Y2
; PublicVariable2==Color
; OUT: No
; USE: A,B,R1,R2,R3,R4,R5,R6,R7,DPTR
;-------------------------------;
_ClearWindowPro:
push PageReg1
push PageReg2
push HideReg1
push HideReg2
mov a,r3
cjne a,#128,ClearX2Judg
ClearX2Judg:
jc ClearX2OK
mov r3,#127
ClearX2OK:
lcall EnterModifyReadMode
push LengthX
mov a,r3 ;X2
clr c
subb a,r7 ;X1
inc a
mov LengthX,a ;length=X2-X1
lcall DisplayAddCal
mov a,PageReg2
clr c
subb a,PageReg1
mov PageReg2,a ;PageReg2=(Y2+1)/8-Y1/8+1
clr psw.5
jnz WindowCalcPage
setb psw.5 ;in same page flag
WindowCalcPage:
mov a,PageReg1
add a,#0b0h
mov PageReg1,a ;PageReg1=Y1/8+0xb0
inc PageReg2
push psw ;save flag F0
mov a,PublicVariable2
mov PublicVariable1,#00h ;data 1
mov PublicVariable2,#00h ;data 2
clr psw.5 ;no fill window flag
jnb acc.2,WindowClearProcess
setb psw.5 ;fill window flag
anl a,#03h
cjne a,#ColorWhite,ClearLightGray
ljmp WindowClearProcess
ClearLightGray:
jnb psw.5,WindowClearProcess ;window fill judg psw.5=0 no fill
cjne a,#ColorLightGray,ClearDarkGray
mov PublicVariable2,#0ffh ;data 2
ljmp WindowClearProcess
ClearDarkGray:
cjne a,#ColorDarkGray,ClearDark
mov PublicVariable1,#0ffh ;data 1
ljmp WindowClearProcess
ClearDark:
mov PublicVariable1,#0ffh
mov PublicVariable2,#0ffh ;data 2
WindowClearProcess: ;clear loop
pop psw
jnb psw.5,WindowClearProcessLoop ;psw.5=1 in same page
mov a,HideReg1
orl a,HideReg2 ;in same page
mov HideReg1,a
ljmp WindowClear2
WindowClearProcessLoop:
mov a,PageReg2 ;Y loop counter judg
cjne a,#1,WindowClear2 ;no same page
mov HideReg1,HideReg2
WindowClear2:
lcall SetLCDAddress
push PageReg1
push PageReg2
mov a,HideReg1
cpl a
push acc
anl a,PublicVariable1
mov PageReg1,a ;data 1 hide process
pop acc
anl a,PublicVariable2
mov PageReg2,a ;data 2 hide process
mov r1,LengthX
clr psw.5
mov a,HideReg1
jnz WindowClearXLoop
setb psw.5
WindowClearXLoop:
clr a
jb psw.5,WindowClearWrite1
movx a,@dptr ;dumy read
movx a,@dptr
anl a,HideReg1 ;process data1
WindowClearWrite1:
orl a,PageReg1
movx @dptr,a
clr a
jb psw.5,WindowClearWrite2
movx a,@dptr ;dumy read
movx a,@dptr
anl a,HideReg1 ;process data2
WindowClearWrite2:
orl a,PageReg2
movx @dptr,a
djnz r1,WindowClearXLoop
pop PageReg2
pop PageReg1
inc PageReg1
mov HideReg1,#00h
djnz PageReg2,WindowClearProcessLoop
pop LengthX
lcall ResetModifyReadMode
pop HideReg2
pop HideReg1
pop PageReg2
pop PageReg1
ret
;========================================================================;
SetLCDAddress:
mov dptr,#LCD_CommandPort
mov a,PageReg1
anl a,#0fh ;page(0--15)
orl a,#0b0h
movx @dptr,a ;write page address
SetLCD_X_Address:
mov a,r7 ;X1
anl a,#0fh
movx @dptr,a ;write column address LSB
mov a,r7
anl a,#070h
swap a
orl a,#10h
movx @dptr,a ;write column address MSB
mov dptr,#LCD_DataPort
ret
;========================================================================;
DisplayAddCal:
mov dptr,#LCD_LineTable1
mov a,r5 ;Y1
mov b,#8
div ab
mov PageReg1,a ;Y1/8
mov a,b
movc a,@a+dptr
mov HideReg1,a
mov a,PublicVariable1 ;Y2
inc a ;zdhx for Y2==0 and Y2==8 error
cjne a,#128,CalJudgY2
CalJudgY2:
jc CalY2NoAdjust ;>128?
mov a,#127
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -