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

📄 ci910cpu.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
	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 + -