📄 ci910cpu.asm.svn-base
字号:
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 + -