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

📄 ci910cpu.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
	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
	setb	TempBit3					;use background color
DisplayGetYProcess:
	mov	a,PublicVariable3
	anl	a,#03h
	mov	PublicVariable3,a				;library type
	mov	b,#6
	cjne	a,#Lib16_16,Library5_7udg
	mov	b,#8
	ajmp	DisplayAddress2Get
Library5_7udg:
	cjne	a,#Lib5_7,DisplayAddress2Get
	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
	ajmp	DisplayCalAddress
DisplayNoCenter:
	mov	a,b
	add	a,b
	add	a,r5						;get Y2
DisplayCalAddress:
	push	PublicVariable1
;---------
	dec	a						;test 2003.01.20
;---------
	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
;========================================================================;
ColorGroundTab:
	DB	000h,000h					;white
	DB	000h,0ffh					;light gray
	DB	0ffh,000h					;dark grak
	DB	0ffh,0ffh					;black
;========================================================================;
;void StringDisplay(uchar X,uchar Y,uchar xdata *Spointer);
;-------------------------------;
;Description:   Display string on LCD
;	  IN:	R7==X
;		R5==Y
;		R2==Spointer(MSB)
;		R3==Spointer(LSB)
;		PublicVariable1==Length
;		PublicVariable2==DispMode
;		PublicVariable3==LibSelect
;	 OUT:	No
;	 USE:	A,B,DPTR,R0,R1,R2,R3,R4,R5,R6,R7,(A,B,R0,R3,R4)
;-------------------------------;
_StringDisplayPro:
	lcall	EnterModifyReadMode				;LCD enter modify-read mode
	push	DataPointer1
	push	DataPointer2
	push	DataPointer3
	push	BufferLength
	mov	a,PublicVariable3
	clr	psw.5						;CPU library flag
	jnb	acc.2,DisplayGenAddress
	setb	psw.5						;FLASH library flag
DisplayGenAddress:
	anl	a,#03h
	cjne	a,#Lib16_16,LibraryIni12_12
	mov	b,#16						;16*16 dots arrary
	ajmp	StringPointerIni
LibraryIni12_12:
	cjne	a,#Lib12_12,LibraryIni6_12
	mov	b,#12						;12*12 dots arrary
	ajmp	StringPointerIni
LibraryIni6_12:
	mov	b,#6						;6*12 dots arrary
StringPointerIni:
	mov	a,sp
	inc	a
	mov	DataPointer1,a					;temp pointer1
	add	a,b
	mov	DataPointer2,a					;temp pointer2
	add	a,b
	mov	DataPointer3,a					;temp pointer3
	add	a,b
	mov	sp,a						;define arrary
	mov	r4,b
	mov	BufferLength,b

	push	TempBitVariable
	push	AddressRegL
	push	AddressRegH
	push	CharInterval
	push	PageReg1
	push	PageReg2
	push	HideReg1
	push	HideReg2
	push	LengthX
	push	DispPageCopy
	push	HideReg1Copy
	push	DeltaYCopy
	push	ColumnNum
	push	BackgroundColor1
	push	BackgroundColor2

	mov	AR1,r3
	lcall	DisplayConfig
	mov	AR4,r2						;R2,R1==external SRAM buffer address
	mov	a,PageReg2
	clr	c
	subb	a,PageReg1
	clr	TempBit2					;no line3 flag
	cjne	a,#2,LIne3Judg
LIne3Judg:
	jc	StringGetYcounter
	setb	TempBit2					;line3 exist flag
StringGetYcounter:
	inc	a
	mov	DeltaYCopy,a					;copy △Y DeltaYCopy=Y2/8-Y1/8+1
StringDislayLoopX:						;X loop
	mov	HideReg1,HideReg1Copy				;restore Hide control register 1
	mov	PageReg1,DispPageCopy				;restore page address
	mov	PageReg2,DeltaYCopy				;restore DeltaY
	clr	TempBit1
StringDislayLoopY:						;display Y loop
	mov	a,PageReg2
	cjne	a,#1,DisplayNoEndLine				;end line ?
	mov	HideReg1,HideReg2				;restore Hide control register 2
	mov	r0,DataPointer2
	jnb	TempBit2,DisplayNoEndLine
	mov	r0,DataPointer3
	ajmp	DisplayNoEndLine
StringWriteDataJump:
	ljmp	StringWriteData
DisplayNoEndLine:
	jb	TempBit1,StringWriteDataJump			;TempBit1==reread library flag
	mov	ColumnNum,#24					;12*12 dots in flash
	jb	psw.5,DisplayProcess				;psw.5=0,CPU library,psw.5=1,FLASH library select
	mov	a,PublicVariable3				;PublicVariable3==library type
LibrarySel12_12:
	cjne	a,#Lib12_12,LibrarySel16_16
	mov	dptr,#Library12_12				;pointe to 12*12
	mov	LengthX,#12					;column number
	mov	ColumnNum,#24					;12*12 dots
	ajmp	CPU_LibraryChar
LibrarySel16_16:
	mov	dptr,#Library16_16				;pointe to 16*16
	mov	LengthX,#16					;column number
	mov	ColumnNum,#32					;16*16 dots
	ajmp	CPU_LibraryChar
DisplayProcess:
	mov	dpl,r1
	mov	dph,r4
	movx	a,@dptr
	cjne	a,#CharacterType,ASIICJudg			;@dptr<0xa1?
ASIICJudg:
	jnc	FlashASIICJudg
DisplaySetAddress:						;ASIIC code
	mov	LengthX,#6					;library in FLASH 6*12 character
	mov	ColumnNum,#12
	mov	r6,#7						;page 7 in flash
	clr	c
	subb	a,#20h
	mov	b,ColumnNum
	mul	ab
	add	a,#LOW(Char6_12Add)
	mov	dpl,a						;to find ASIIC code address in library(FLASH)
	mov	a,b
	addc	a,#HIGH(Char6_12Add)				;address==0x9670
	mov	dph,a
	ajmp	StringReadData
CPU_LibraryChar:
	push	dph
	push	dpl
	mov	dpl,r1
	mov	dph,r4
	movx	a,@dptr
	pop	dpl
	pop	dph
	cjne	a,#CPU_CharType,CPU_WordJudg			;@dptr>0x81 ?
CPU_WordJudg:
	jc	CPU_ChineseWord
	clr	c
	subb	a,#80h
	mov	dptr,#Library6_12				;pointe to 6*12
	mov	LengthX,#6					;column number
	mov	ColumnNum,#12					;6*12 dots
CPU_ChineseWord:
	mov	b,ColumnNum					;chinese word in CPU
	mul	ab
	add	a,dpl
	mov	dpl,a						;to find ASIIC code address in library
	mov	a,b
	addc	a,dph
	mov	dph,a
	ajmp	StringReadData
FlashASIICJudg:
	cjne	a,#CharacterType1,CharacterSelect		;0xa1<=@dptr<0xa3 ? || @dptr>=0xb0 ?
CharacterSelect:
	jc	CharacterReadIn					;if ASIIC then jump to CharacterReadIn
	add	a,#0f4h
CharacterReadIn:						;chinese word read
	mov	dpl,r1
	mov	dph,r4
	inc	dptr
	mov	r1,dpl
	mov	r4,dph
	add	a,#5fh						;qu=@dptr-0xa0-1
	mov	b,#94
	mul	ab						;94*(qu-1)
	mov	dph,b						;get qu
	mov	b,a
	push	dpl
	push	dph
	mov	dpl,r1
	mov	dph,r4
	movx	a,@dptr
	pop	dph
	pop	dpl
	add	a,#5fh						;wei=@r1-0xa0-1
	add	a,b
	mov	dpl,a						;get wei
	mov	a,dph
	addc	a,#0
	mov	dph,a
	mov	a,PublicVariable3
	cjne	a,#Lib12_12,Library16_16Set
	mov	b,#24						;(94*(qu-1)+(wei-1))*24,12*12 select
	mov	LengthX,#12
	ajmp	DisplayGetAddress
Library16_16Set:
	mov	b,#32						;(94*(qu-1)+(wei-1))*32,16*16 select
	mov	LengthX,#16
DisplayGetAddress:
	push	b
	mov	a,dph
	mul	ab
	mov	r6,b
	mov	dph,a
	pop	b
	mov	a,dpl
	mul	ab
	mov	dpl,a
	mov	a,b
	add	a,dph
	mov	dph,a
	mov	a,r6
	addc	a,#5
	mov	r6,a						;page

	mov	a,dpl
	add	a,AddressRegL
	mov	dpl,a
	mov	a,dph
	addc	a,AddressRegH
	mov	dph,a
StringReadData:
	lcall	ReadLibrary
StringWriteData:
	lcall	SetLCDAddress					;set display address
	lcall	WriteDisplayData
	mov	HideReg1,#0
	inc	PageReg1					;page increment
	djnz	PageReg2,StringYLoopJump			;Y loop
	mov	a,LengthX					;LengthX==column number
	add	a,CharInterval					;x increment to display next word
	add	a,r7
	mov	r7,a
	mov	dpl,r1
	mov	dph,r4
	inc	dptr
	mov	r1,dpl
	mov	r4,dph
	djnz	PublicVariable1,StringXLoopJump			;X loop
	ajmp	DisplayExit
StringYLoopJump:
	mov	r0,DataPointer2
	ljmp	StringDislayLoopY
StringXLoopJump:
	ljmp	StringDislayLoopX
DisplayExit:
	lcall	ResetModifyReadMode

	pop	BackgroundColor2
	pop	BackgroundColor1
	pop	ColumnNum
	pop	DeltaYCopy
	pop	HideReg1Copy
	pop	DispPageCopy
	pop	LengthX
	pop	HideReg2
	pop	HideReg1
	pop	PageReg2
	pop	PageReg1
	pop	CharInterval
	pop	AddressRegH
	pop	AddressRegL
	pop	TempBitVariable
	
	mov	p2,#ReleasePeripheral				;for save power
	mov	a,BufferLength
	mov	b,#3						;subb 3 buffer length
	mul	ab
	mov	b,a
	mov	a,sp
	clr	c
	subb	a,b
	dec	a
	mov	sp,a						;restore stack pointer
	pop	BufferLength
	pop	DataPointer3
	pop	DataPointer2
	pop	DataPointer1
	ret
;========================================================================;
;Description:   Read one word from library to internal memory(include 6*12,12*12,16*16 dots)
;	  In:	R0,DPTR
;	 Out:	1st(DataPointer1),2sd(DataPointer2),3th(DataPointer3)
;	 Use:	A,R0,DPTR
;-------------------------------;
ReadLibrary:
	push	AR1
	jnb	psw.5,ReadLibraryIni				;psw.5=0,CPU library,psw.5=1,FLASH library select
	push	ControlStatus					;zdhx
	anl	ControlStatus,#0f0h
	mov	a,r6
	rl	a
	orl	ControlStatus,a					;select page
	lcall	ChangeStatusPro
ReadLibraryIni:
	mov	r5,LengthX					;LengthX==ColumnNum/2
	mov	r0,DataPointer1					;specify data pointer 1
	mov	r1,DataPointer2					;specify data pointer 2
	mov	a,HideReg1
	inc	a
	mov	r2,a						;shift arbirary
	clr	TempBit4
ReadLibraryLoop1:
	jb	psw.5,ReadExternalData1
	clr	a
	movc	a,@a+dptr
	ajmp	GetData1
ReadExternalData1:
	movx	a,@dptr
GetData1:
	mov	b,r2
	mul	ab
	mov	@r0,a						;read in 1 word LSB
	mov	@r1,b
	inc	r0
	inc	r1
	inc	dptr
	mov	a,dph
	jnz	ReadLibraryPageAd
	mov	a,dpl
	jnz	ReadLibraryPageAd
	jb	tempbit4,ReadLibraryPageAd
	inc	r6
	mov	a,r6
	rl	a
	anl	a,#0eh
	anl	ControlStatus,#0f0h
	orl	ControlStatus,a					;page increment
	lcall	ChangeStatusPro
	setb	tempbit4
ReadLibraryPageAd:
	djnz	r5,ReadLibraryLoop1
	mov	r0,DataPointer2					;specify data pointer 2
	mov	r1,DataPointer3					;restore data pointer 3
	mov	r5,LengthX					;LengthX==ColumnNum/2
ReadLibraryLoop2:
	jb	psw.5,ReadExternalData2
	clr	a
	movc	a,@a+dptr
	ajmp	GetData2
ReadExternalData2:
	movx	a,@dptr
GetData2:
	mov	b,r2
	mul	ab
	orl	a,@r0						;read in 1 word LSB
	mov	@r0,a
	mov	@r1,b
	inc	r0
	inc	r1
	inc	dptr
	djnz	r5,ReadLibraryLoop2
	jnb	psw.5,ReadLibraryExit				;psw.5=0,CPU library,psw.5=1,FLASH library select
	pop	ControlStatus					;zdhx
	lcall	ChangeStatusPro
ReadLibraryExit:
	pop	AR1
	mov	r0,DataPointer1					;specify data pointer 1
	setb	TempBit1					;library read flag
	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
;========================================================================;
;USE:	A,B,R0,R5,DPTR
;-------------------------------;
ReadLibrary5_7Pro:
	push	AR1
	push	AR2
	push	ControlStatus					;zdhx
	anl	ControlStatus,#_Bit_PageCS			;enable FLASH
	orl	ControlStatus,#0eh				;chip enable page 7
	lcall	ChangeStatusPro
	mov	r0,DataPointer1					;specify data pointer 1
	mov	r1,DataPointer2					;specify data pointer 2
	mov	a,HideReg1
	inc	a
	mov	r2,a						;shift arbirary
Read5_7LibraryLoop:
	movx	a,@dptr
	mov	b,r2
	mul	ab
	mov	@r0,a						;read in 1 word LSB
	mov	@r1,b
	inc	r0
	inc	r1
	inc	dptr
	djnz	r5,Read5_7LibraryLoop
	pop	ControlStatus					;zdhx
	lcall	ChangeStatusPro					;chip enable LCD
	mov	r0,DataPointer1					;specify data pointer 1
	setb	TempBit1					;library read flag
	pop	AR2
	pop	AR1
	ret
;========================================================================;
BMP_ReadLineN:
	movx	a,@dptr
	mov	b,r6
	mul	ab
	orl	a,@r1
	mov	@r0,a
	mov	@r1,b
	inc	r0
	inc	r1
	inc	dptr
	djnz	r4,BMP_ReadLineN
	ret
;========================================================================;
BMP_ReadLine1:
	movx	a,@dptr
	mov	b,r6
	mul	ab
	mov	@r0,a
	mov	@r1,b
	inc	r0
	inc	r1
	inc	dptr
	djnz	r4,BMP_ReadLine1
	ret
;========================================================================;
BMP_ReadPro:
	push	ControlStatus						;zdhx
	anl	ControlStatus,#FlashPage0
	anl	ControlStatus,#_Bit_PageCS
	orl	ControlStatus,#BMP_Address
	lcall	ChangeStatusPro						;enable the page of BMP
	push	AR4							;store counter
	mov	dpl,AddressRegL
	mov	dph,AddressRegH
	mov	r0,DataPointer1
	mov	r1,DataPointer2
	cjne	r5,#1,BMP_ReadJudgLine1
	lcall	BMP_ReadLineN
	ljmp	BMP_ReadExit
BMP_ReadJudgLine1:
	cjne	r5,#0,BMP_LineEndRead
	lcall	BMP_ReadLine1
	ljmp	BMP_ReadExit
BMP_LineEndRead:							;r5==2,end line
	jb	psw.5,BMP_NoRead
	lcall	BMP_ReadLineN
	ljmp	BMP_ReadExit
BMP_NoRead:
	mov	a,DataPointer2
	xch	a,DataPointer1
	mov	DataPointer2,a
BMP_ReadExit:
	mov	AddressRegH,dph
	mov	AddressRegL,dpl
	mov	dptr,#LCD_DataPort
	mov	r0,DataPointer1
	pop	AR4							;restore counter
	pop	ControlStatus
	lcall	ChangeStatusPro						;enable the page 0 and RAM
	ret
;========================================================================;
BMP_WritePro:
	push	AR4
BMP_WriteLoop:

⌨️ 快捷键说明

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