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

📄 ci910flash.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:

	mov	a,sp
	clr	c
	subb	a,#13						;buffer lenght
	mov	sp,a						;restore stack pointer
	pop	DataPointer2
	pop	DataPointer1
	ret
;========================================================================;
DisplayAddCal1:
	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						;zdhy 用于避免Y=0和Y=8时造成少一个点的错误
	cjne	a,#128,CalJudgY21
CalJudgY21:
	jc	CalY2NoAdjust1					;>128?
	mov	a,#127
CalY2NoAdjust1:
	mov	dptr,#LCD_LineTable2
	mov	b,#8
	div	ab
	mov	PageReg2,a					;Y2/8
	mov	a,b
	movc	a,@a+dptr
	mov	HideReg2,a
	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
CalY2NoAdjust:
	mov	b,#8
	div	ab
	mov	PageReg2,a					;Y2/8
	mov	a,b
	movc	a,@a+dptr
	cpl	a
	mov	HideReg2,a
	ret
;========================================================================;
EnterModifyReadMode:
	mov	dptr,#LCD_CommandPort
	mov	a,#0e0h
	movx	@dptr,a						;set modify-read mode
	mov	dptr,#LCD_DataPort
	ret
;========================================================================;
ResetModifyReadMode:
	mov	dptr,#LCD_CommandPort
	mov	a,#0eeh
	movx	@dptr,a						;reset modify-read mode
	ret
;========================================================================;
DisplayConfig:
	mov	AddressRegL,#00h
	mov	AddressRegH,#00h				;external library address
	mov	a,PublicVariable2
	jnb	acc.2,NormalDispaly
	xrl	PublicVariable2,#03h				;reversal display color
NormalDispaly:
	swap	a
	anl	a,#0fh
	mov	CharInterval,a					;dispaly character interval
	mov	a,PublicVariable2
	anl	a,#03h
	clr	c
	rlc	a						;*2
	mov	b,a
	mov	dptr,#ColorGroundTab
	movc	a,@a+dptr
	mov	r3,a						;foregroud color1
	mov	a,b
	inc	a
	movc	a,@a+dptr
	mov	PublicVariable2,a				;foregroud color2
	cjne	r7,#0ffh,DisplayGetY				;r7==0xff x display center
	mov	a,r4						;r4==column number of one character
	add	a,CharInterval
	mov	b,a
	mov	a,PublicVariable1				;PublicVariable1==length
	mul	ab
	clr	c
	subb	a,CharInterval
	clr	c
	rrc	a						;(128-x)/2
	mov	b,a
	mov	a,#64
	clr	c
	subb	a,b						;64-x/2
	mov	r7,a
DisplayGetY:
	mov	a,PublicVariable3
	swap	a
	anl	a,#03h
	clr	c
	rlc	a						;*2
	mov	b,a
	mov	dptr,#ColorGroundTab
	movc	a,@a+dptr
	mov	BackgroundColor1,a				;get background color1
	mov	a,b
	inc	a
	movc	a,@a+dptr
	mov	BackgroundColor2,a				;get background color2
	clr	TempBit3					;no use background color
	mov	a,PublicVariable3
	jnb	acc.6,DisplayGetYProcess
	setb	TempBit3					;use background color
DisplayGetYProcess:
	mov	b,#4
DisplayAddress2Get:
	cjne	r5,#0ffh,DisplayNoCenter
	mov	a,#64						;Y==(128-Y)/2
	clr	c
	subb	a,b
	mov	r5,a						;get Y1
	add	a,b
	add	a,b						;get Y2
	ljmp	DisplayCalAddress
DisplayNoCenter:
	mov	a,b
	add	a,b
	add	a,r5						;get Y2
DisplayCalAddress:
	push	PublicVariable1
	dec	a						;for inc 1 in DisplayAddCal zdhx
	mov	PublicVariable1,a				;PublicVariable1==Y2
	lcall	DisplayAddCal
	pop	PublicVariable1
	mov	HideReg1Copy,HideReg1				;copy HideReg1
	mov	a,PageReg1
	add	a,#0b0h
	mov	DispPageCopy,a					;copy page address
	ret
;========================================================================;
SetLCDAddress:
	mov	dptr,#LCD_CommandPort
	mov	a,PageReg1
	anl	a,#0fh
	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
;========================================================================;
;Description:   write display data to LCD
;	  In:	R0
;	 Out:	No
;	 Use:	A,B,R0,R2,R3,R4,DPTR
;-------------------------------;
WriteDisplayData:
	push	AR4
	push	BackgroundColor1
	push	BackgroundColor2
	mov	r2,LengthX					;r2==ColumnNum/2
	jb	TempBit3,WriteDisplayGetColor
	mov	HideReg1,#0ffh
WriteDisplayGetColor:
	mov	a,HideReg1
	cpl	a
	anl	BackgroundColor1,a
	anl	BackgroundColor2,a
WriteDisplayLoop:
	movx	a,@dptr						;dumy read
	movx	a,@dptr						;read in data 1
	anl	a,HideReg1
	orl	a,BackgroundColor1
	mov	r4,a
	mov	a,@r0
	mov	b,a
	anl	a,r3						;r3=foreground color 1
	xch	a,b
	cpl	a
	anl	a,r4
	orl	a,b
	movx	@dptr,a						;write new data1
	movx	a,@dptr						;dumy read
	movx	a,@dptr						;read in data 2
	anl	a,HideReg1
	orl	a,BackgroundColor2
	mov	r4,a
	mov	a,@r0
	mov	b,a
	anl	a,PublicVariable2				;BackgroundColor2=foreground color2
	xch	a,b
	cpl	a
	anl	a,r4
	orl	a,b
	movx	@dptr,a						;write new data2
	inc	r0
	djnz	r2,WriteDisplayLoop
	pop	BackgroundColor2
	pop	BackgroundColor1
	pop	AR4
	ret
;========================================================================;
;void BMPDisplay(uchar X,uchar Y,ucharx *PPointer);
;-------------------------------;
;Description:   Display BMP on LCD,The BMP file compose format (Width+Height+DATA)
;	  IN:	R7==X
;		R5==Y
;		R2==PPointer(MSB)
;		R3==PPointer(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R2,R3,R4,R5,R5,R7,DPTR,(A,B,R0,R1,R2,R4,R6,DPTR)
;-------------------------------;
_BMPDisplay:
	mov	AR1,r3
	lcall	EnterModifyReadMode				;LCD enter modify-read mode
	push	DataPointer1
	push	DataPointer2
	mov	a,sp
	inc	a
	mov	DataPointer1,a					;buffer 1
	add	a,#16
	mov	DataPointer2,a					;buffer 2
	add	a,#16
	mov	sp,a

	push	AddressRegL
	push	AddressRegH
	push	CharInterval
	push	PageReg1
	push	PageReg2
	push	HideReg1
	push	HideReg2
	push	LengthX
	push	HideReg1Copy
	push	DispPageCopy

	lcall	StoreBmpHead					;store width and height of BMP
	push	acc
	add	a,r5
	dec	a
	mov	PublicVariable1,a				;PublicVariable1==Y2
	lcall	DisplayAddCal

	pop	acc
	add	a,#7
	mov	b,#8
	div	ab
	mov	b,a

	mov	a,PageReg2
	clr	c
	subb	a,PageReg1					;Y2/8-Y1/8+1
	inc	a
	mov	PageReg2,a					;Y loop counter

	setb	psw.5
	cjne	a,b,GetPageAdd
	clr	psw.5
GetPageAdd:

	mov	a,PageReg1
	add	a,#0b0h
	mov	PageReg1,a					;page
	mov	a,LengthX
	mov	b,#16
	div	ab
	inc	a
	mov	LengthX,a					;LengthX==width/16
	mov	PublicVariable2,b				;PublicVariable2==(X2-X1)%16
	
	mov	DispPageCopy,PageReg1				;copy page
	mov	HideReg1Copy,HideReg1
	mov	CharInterval,PageReg2				;copy Y loop counter
	mov	a,HideReg1
	inc	a
	mov	r6,a						;shift control register
_BMPDisplayX_Loop:
	mov	r5,#0						;for display control(line1(0),line2--linen(1),lineEnd(2))
	mov	PageReg1,DispPageCopy				;restore page
	mov	HideReg1,HideReg1Copy				;restore HideReg1
	mov	PageReg2,CharInterval				;restore Y loop counter
	mov	r4,#16
	mov	a,LengthX
	cjne	a,#1,_BMPDisplayY_Loop
	mov	r4,PublicVariable2
	cjne	r4,#00h,_BMPDisplayY_Loop
	ljmp	_BMP_DisplayExit
_BMPDisplayY_Loop:
	lcall	SetLCDAddress					;set display address
	mov	a,PageReg2
	cjne	a,#1,_BMP_NoEnd
	mov	HideReg1,HideReg2
	mov	r5,#2
	mov	a,CharInterval
	cjne	a,#1,_BMP_NoEnd
	mov	r5,#1
_BMP_NoEnd:
	lcall	BMP_Read
	lcall	BMP_Write
	
	mov	r5,#1
	inc	PageReg1					;page increment
	mov	HideReg1,#00h
	djnz	PageReg2,_BMPDisplayY_Loop
	mov	a,r4
	clr	c
	rrc	a
	mov	r4,a
	mov	a,r7
	add	a,r4
	mov	r7,a
	djnz	LengthX,_BMPDisplayX_Loop
_BMP_DisplayExit:
	lcall	ResetModifyReadMode

	pop	DispPageCopy
	pop	HideReg1Copy
	pop	LengthX
	pop	HideReg2
	pop	HideReg1
	pop	PageReg2
	pop	PageReg1
	pop	CharInterval
	pop	AddressRegH
	pop	AddressRegL

	mov	a,sp
	clr	c
	subb	a,#32
	dec	a
	mov	sp,a
	pop	DataPointer2
	pop	DataPointer1
	ret
;========================================================================;
;void SaveWindow(uchar X1,uchar Y1,ucharx *BufferPointer);
;-------------------------------;
;Description:   Read specified area on LCD into internal RAM
;	  IN:	R2==BufferPointer(MSB)
;		R3==BufferPointer(LSB)
;		R7==X1
;		R5==Y1
;		PublicVariable1==X2
;		PublicVariable2==Y2
;	  OUT:	No
;	  USE:	A,B,R1,R2,R3,R4,R5,R7,DPTR
;-------------------------------;
_SaveWindow:
	push	DataPointer1
	mov	a,sp
	inc	a
	mov	DataPointer1,a
	add	a,#32
	mov	sp,a
	mov	a,PublicVariable1
	cjne	a,#128,SaveWindowX2Judg
SaveWindowX2Judg:
	jc	SaveWindowX2OK
	mov	PublicVariable1,#127
SaveWindowX2OK:
	push	PageReg1
	push	PageReg2
	push	HideReg1
	push	HideReg2
	push	LengthX

	mov	dph,r2
	mov	dpl,r3
	mov	a,r7
	movx	@dptr,a						;write X1
	inc	dptr
	mov	a,r5
	movx	@dptr,a						;write Y1
	inc	dptr
	mov	a,PublicVariable1
	movx	@dptr,a						;write X2
	inc	dptr
	mov	a,PublicVariable2
	movx	@dptr,a						;write Y2
	inc	dptr
	mov	r2,dph
	mov	r3,dpl
	lcall	GenerateCounter
	lcall	DisplayAddCal1					;zdhy
	lcall	Calculate

	jnb	psw.5,SaveJudg
	mov	a,HideReg2
	orl	a,HideReg1
	cpl	a						;in same page
	mov	HideReg1,a
	ajmp	_ReadWindowNoEnd
SaveJudg:

	mov	a,PageReg2
	cjne	a,#16,SaveWindowYJudg
SaveWindowYJudg:
	jc	SaveWindowYOK
	mov	PageReg2,#16
SaveWindowYOK:
	xrl	HideReg1,#0ffh					;hide control
	xrl	HideReg2,#0ffh
_ReadWindowLoopY:
	mov	a,PageReg2
	cjne	a,#1,_ReadWindowNoEnd
	mov	HideReg1,HideReg2				;end line
_ReadWindowNoEnd:
	mov	r4,LengthX
	lcall	SetLCDAddress					;set display address
	movx	a,@dptr						;dumy read,warning!! "must read previous"
_ReadWindowLoopX:
	mov	dptr,#LCD_DataPort
	mov	r1,DataPointer1					;temp buffer
	mov	r5,#32
	cjne	r4,#1,_ReadWindowProIni
	cjne	r5,#00h,_ReadWindowCon
	ljmp	_WriteWindowExit
_ReadWindowCon:
	mov	r5,PublicVariable2
_ReadWindowProIni:
	push	AR5
_ReadWindowPro:
	movx	a,@dptr						;read in data
	mov	@r1,a
	inc	r1
	djnz	r5,_ReadWindowPro
	mov	r1,DataPointer1					;temp buffer
	pop	AR5
	mov	dph,r2
	mov	dpl,r3
_WriteWindowData:
	mov	a,@r1
	anl	a,HideReg1
	movx	@dptr,a
	inc	r1
	inc	dptr
	djnz	r5,_WriteWindowData
	mov	r2,dph
	mov	r3,dpl
	djnz	r4,_ReadWindowLoopX
	inc	PageReg1
	mov	HideReg1,#0ffh
	djnz	PageReg2,_ReadWindowLoopY
_WriteWindowExit:
	pop	LengthX
	pop	HideReg2
	pop	HideReg1
	pop	PageReg2
	pop	PageReg1
	mov	a,sp
	clr	c
	subb	a,#33
	mov	sp,a
	pop	DataPointer1
	ret
;========================================================================;
;void  RestoreWindow(uchar *BufferPointer);
;-------------------------------;
;Description:   Restore RAM content onto LCD
;	  IN:	R6==BufferPointer(MSB)
;		R7==BufferPointer(LSB)
;	 OUT:	No
;	 USE:	A,B,R1,R2,R3,R4,R5,R7,DPTR
;-------------------------------;
_RestoreWindow:
	mov	AR2,r6						;copy pointer
	mov	AR3,r7
	push	DataPointer1
	mov	a,sp
	inc	a
	mov	DataPointer1,a					;temp buffer
	add	a,#32
	mov	sp,a

	push	PageReg1
	push	PageReg2
	push	HideReg1
	push	HideReg2
	push	LengthX

	lcall	EnterModifyReadMode				;LCD enter modify-read mode
	mov	dpl,r3
	mov	dph,r2
	movx	a,@dptr
	mov	r7,a						;X1
	inc	dptr
	movx	a,@dptr
	mov	r5,a						;Y1
	inc	dptr
	movx	a,@dptr
	mov	PublicVariable1,a				;X2
	inc	dptr
	movx	a,@dptr
	mov	PublicVariable2,a				;Y2
	inc	dptr
	mov	r3,dpl
	mov	r2,dph
	lcall	GenerateCounter
	lcall	DisplayAddCal1					;zdhy
	lcall	Calculate

	jnb	psw.5,_RestoreWindowLoopY
	mov	a,HideReg2
	orl	a,HideReg1
	cpl	a						;in same page
	mov	HideReg1,a
	ajmp	_RestoreWindowNoEnd

_RestoreWindowLoopY:
	mov	a,PageReg2
	cjne	a,#1,_RestoreWindowNoEnd
	mov	HideReg1,HideReg2
_RestoreWindowNoEnd:
	lcall	SetLCDAddress					;set display address
	mov	r4,LengthX
_RestoreWindowLoopX:
	mov	r1,DataPointer1					;temp buffer
	mov	r5,#32
	cjne	r4,#1,_RestoreReadIni
	mov	r5,PublicVariable2
_RestoreReadIni:
	push	AR5
	mov	dpl,r3
	mov	dph,r2
_RestoreReadLoop:
	movx	a,@dptr
	mov	@r1,a
	inc	r1
	inc	dptr
	djnz	r5,_RestoreReadLoop
	mov	r3,dpl
	mov	r2,dph
	pop	AR5
	mov	dptr,#LCD_DataPort
	mov	r1,DataPointer1					;temp buffer
_RestoreLcdLoop:
	movx	a,@dptr						;dumy read
	movx	a,@dptr
	anl	a,HideReg1
	orl	a,@r1
	movx	@dptr,a
	inc	r1
	djnz	r5,_RestoreLcdLoop
	djnz	r4,_RestoreWindowLoopX
	inc	PageReg1
	mov	HideReg1,#0
	djnz	PageReg2,_RestoreWindowLoopY

	pop	LengthX
	pop	HideReg2
	pop	HideReg1
	pop	PageReg2
	pop	PageReg1

	lcall	ResetModifyReadMode
	mov	a,sp
	clr	c
	subb	a,#33
	mov	sp,a
	pop	DataPointer1
	ret
;========================================================================;
Calculate:
	mov	a,PageReg2
	clr	c
	subb	a,PageReg1
	clr	psw.5						;in same page flag
	jnz	NoInSamePage
	setb	psw.5						;psw.5==1,in same page
NoInSamePage:
	inc	a
	mov	PageReg2,a					;Y loop counter
	mov	a,PageReg1
	add	a,#0b0h
	mov	PageReg1,a					;page address
	ret
;========================================================================;
GenerateCounter:
	mov	a,PublicVariable1				;X2
	push	acc
	inc	a
	clr	c
	subb	a,r7
	mov	PublicVariable1,PublicVariable2			;PublicVariable1==Y2
	mov	b,#16
	cjne	a,#128,JudgX2Val
JudgX2Val:
	jc	GenerX2Ok
	mov	a,#127
GenerX2Ok:
	div	ab
	inc	a
	cjne	a,#16,DeltaXOKJudg
DeltaXOKJudg:
	jc	DeltaXOK
	mov	a,#16
DeltaXOK:
	mov	LengthX,a					;LengthX==(X2-X1+1)/16+1
	pop	acc
	clr	c
	subb	a,r7
	mov	b,#16
	div	ab
	mov	a,b
	clr	c
	inc	a
	rlc	a
	mov	PublicVariable2,a				;PublicVariable2==((X2-X1+1)%16)*2
	ret
;========================================================================;
LCD_PixelTable:
	DB	0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh
LCD_LineTable1:
	DB	00h,01h,03h,07h,0fh,1fh,3fh,7fh,0ffh
LCD_LineTable2:
	DB	0feh,0fch,0f8h,0f0h,0e0h,0c0h,080h,000h
;========================================================================;
ColorGroundTab:
	DB	000h,000h					;white
	DB	000h,0ffh					;light gray
	DB	0ffh,000h					;dark grak
	DB	0ffh,0ffh					;black


	end

⌨️ 快捷键说明

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