📄 ci910flash.asm.svn-base
字号:
name ci910Flash
?ci910Flash segment code
public ci910Flash
rseg ?ci910Flash
$include (../include/ci910cpudef.h)
public _DisplayString5_7
public _BMPDisplay
public _SaveWindow
public _RestoreWindow
public _XramBCD_ASIIC
public _BCD_ASIIC
public _ASIIC_BCD
public _Xram_ASIIC_BCD
public _BIN_BCD
public _BCD_BIN
public _XramBIN_BCD
public _XramBCD_BIN
public _BCD_Add
public _StringCompare
extrn code (StoreBmpHead)
extrn code (ReadLibrary5_7)
extrn code (BMP_Read)
extrn code (BMP_Write)
;========================================================================;
using 0 ;using bank0
;========================================================================;
ci910Flash:
;========================================================================;
;void XramBCD_ASIIC(uchar Length,ucharx *BCD_String,ucharx *ASIIC_String);
;-------------------------------;
;Description: transform string BCD to string ASIIC,The string in static RAM
; IN: R7==Length
; R4==BCD_String(MSB)
; R5==BCD_String(LSB)
; R2==ASIIC_String(MSB)
; R3==ASIIC_String(LSB)
; OUT: No
; USE: A,B,R0,R1,R7,(A)
;-------------------------------;
_XramBCD_ASIIC:
mov dpl,r5
mov dph,r4
movx a,@dptr
push acc
inc dptr
mov r4,dph
mov r5,dpl
swap a
lcall _BCD_ASIIC1Byte
mov dpl,r3
mov dph,r2
movx @dptr,a ;MSB
inc dptr
pop acc
lcall _BCD_ASIIC1Byte
movx @dptr,a ;MSB
inc dptr
mov r2,dph
mov r3,dpl
djnz r7,_XramBCD_ASIIC
ret
;========================================================================;
;void BCD_ASIIC(uchar Length,ucharx *BCD_String,ucharx *ASIIC_String);
;-------------------------------;
;Description: transform string BCD to string ASIIC.
; IN: R7==Length
; R4==BCD_String(MSB)
; R5==BCD_String(LSB)
; R2==ASIIC_String(MSB)
; R3==ASIIC_String(LSB)
; OUT: No
; USE: A,B,R0,R1,R7,(A)
;-------------------------------;
_BCD_ASIIC:
mov AR0,r3
mov AR1,r5
_BCD_ASIIC_Loop:
mov a,@r1
swap a
lcall _BCD_ASIIC1Byte
mov @r0,a ;MSB
inc r0
mov a,@r1
lcall _BCD_ASIIC1Byte
mov @r0,a ;LSB
inc r0
inc r1
djnz r7,_BCD_ASIIC_Loop
mov AR0,r3
mov AR1,r5
ret
;========================================================================;
;uchar XramBIN_BCD(uchar Length,ucharx *BIN_String,ucharx *BCD_String);
;-------------------------------;
;Description: converte BIN to BCD format,Data in external memory
; IN: R7==Length
; R4==BIN pointer(MSB)
; R5==BIN pointer(LSB)
; R2==BCD pointer(MSB)
; R3==BCD pointer(LSB)
; OUT: R7==BCD Length
; USE: A,B,R0,R2,R3,R5,R6,R7
;-------------------------------;
_XramBIN_BCD:
mov dpl,r5
mov dph,r4
mov a,sp
inc a
mov r0,a
mov r5,a
mov a,r7
mov b,#3 ;length*3
mul ab
add a,r0
mov sp,a
push AR2
push AR3 ;copy destination pointer
mov a,r0
add a,r7
mov r3,a ;dest
mov b,r7
_XramBINCopy:
movx a,@dptr
mov @r0,a
inc r0
inc dptr
djnz b,_XramBINCopy
push AR7
lcall _BIN_BCD
pop AR4 ;source data length
mov b,r7
mov r0,AR3
pop dpl ;restore destination pointer
pop dph
_XramBINResCpy:
mov a,@r0
movx @dptr,a
inc r0
inc dptr
djnz b,_XramBINResCpy
mov a,r4
mov b,#3 ;length*3
mul ab
inc a
mov b,a
mov a,sp
subb a,b
mov sp,a
ret
;========================================================================;
;uchar BIN_BCD(uchar Length,ucharx *BIN_String,ucharx *BCD_String);
;-------------------------------;
;Description: converte BIN to BCD format,Data in enternal memory
; IN: R7==Length
; R4==BIN pointer(MSB)
; R5==BIN pointer(LSB)
; R2==BCD pointer(MSB)
; R3==BCD pointer(LSB)
; OUT: R7==BCD Length
; USE: A,B,R0,R2,R3,R5,R6,R7
;-------------------------------;
_BIN_BCD:
mov AR0,r3 ;clear target area
mov AR6,r7 ;copy length
lcall Buffer_Clear
mov a,r7
mov b,#8
mul ab
mov r2,a ;bin lenght
bin_bcd13:
mov AR0,r5
mov b,r7
clr c
bin_bcd11:
mov a,@r0
rlc a
mov @r0,a
inc r0
djnz b,bin_bcd11
mov b,r6
mov AR0,r3
bin_bcd12:
mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz b,bin_bcd12
jnc bin_bcd131
mov @r0,#00h
inc r6
inc b
ljmp bin_bcd12
bin_bcd131:
djnz r2,bin_bcd13
mov AR7,r6
ret
;========================================================================;
;void XramBCD_BIN(uchar Length,ucharx *BCD_String,ucharx *BIN_String);
;-------------------------------;
;Description: converte BCD to BIN,Data in external memory
; IN: R7==Length
; R4==BCD pointer(MSB)
; R5==BCD pointer(LSB)
; R2==BIN pointer(MSB)
; R3==BIN pointer(LSB)
; OUT: No
; USE: A,B,R0,R1,R2,R3,R4,R5,R6,R7
;-------------------------------;
_XramBCD_BIN:
mov dpl,r5
mov dph,r4
mov a,sp
inc a
mov r0,a ;source buffer
mov r5,a
mov a,r7
mov b,#3
mul ab ;length*3
add a,r0
mov sp,a
push AR2
push AR3
clr c
subb a,r7
mov r3,a ;dest buffer
mov b,r7
_XramBCD_BINCpData:
movx a,@dptr
mov @r0,a
inc dptr
inc r0
djnz b,_XramBCD_BINCpData
push AR7
lcall _BCD_BIN
pop AR7
pop dpl
pop dph
mov b,r7
mov r0,AR3
_XramCopyResult:
mov a,@r0
movx @dptr,a
inc r0
inc dptr
djnz b,_XramCopyResult
mov a,r7
mov b,#3
mul ab ;length*3
inc a
mov b,a
mov a,sp
subb a,b ;sp=sp-1-length*3
mov sp,a
ret
;========================================================================;
;void BCD_BIN(uchar Length,ucharx *BCD_String,ucharx *BIN_String);
;-------------------------------;
;Description: converte BCD to BIN,Data in enternal memory
; IN: R7==Length
; R4==BCD pointer(MSB)
; R5==BCD pointer(LSB)
; R2==BIN pointer(MSB)
; R3==BIN pointer(LSB)
; OUT: No
; USE: A,B,R0,R1,R2,R3,R4,R5,R6,R7
;-------------------------------;
_BCD_BIN:
cjne r7,#1,ExchangeDataIni
ljmp NoExchange
ExchangeDataIni:
mov AR0,r5 ;BCD pointer
mov a,r5
add a,r7
dec a
mov r1,a ;exchange LSB and MSB
mov a,r7
clr c
rrc a ;length/2
mov r6,a
ExchangeDataLoop:
xch a,@r0
xch a,@r1
xch a,@r0
inc r0
dec r1
djnz r6,ExchangeDataLoop
NoExchange:
mov AR0,r3 ;clear BIN buffer
lcall Buffer_Clear
mov AR0,r5 ;BCD buffer pointer
mov AR4,r7 ;length
BCD_BIN_Calcul:
lcall Mul10
mov a,@r0
swap a
anl a,#0fh
lcall AddSum
lcall Mul10
mov a,@r0
anl a,#0fh
lcall AddSum
inc r0
djnz r4,BCD_BIN_Calcul
ret
;------------------------------------------------------------------------;
Mul10:
mov AR6,r7 ;length
mov AR1,r3 ;dest
mov r2,#00h
clr c
Mul10_Loop:
mov a,@r1
mov b,#10
push psw
mul ab
pop psw
addc a,r2
mov @r1,a
mov r2,b
inc r1
djnz r6,Mul10_Loop
ret
;------------------------------------------------------------------------;
AddSum:
mov AR1,r3 ;dest
mov b,r7 ;length
add a,@r1
mov @r1,a
djnz b,AddSumLoop
ljmp AddSumExit
AddSumLoop:
inc r1
mov a,@r1
addc a,#00h
mov @r1,a
djnz b,AddSumLoop
AddSumExit:
ret
;========================================================================;
;void BCD_Add(uchar Length,ucharx *SourceData1,ucharx *SourceData2);
;-------------------------------;
;Description: 多字节BCD码加法,输入数据都是先低后高
; IN: R7==Length
; R4==SourceData1(MSB)
; R5==SourceData1(LSB)
; R2==SourceData2(MSB)
; R3==SourceData2(LSB)
; OUT: 和在SourceData1指向的缓冲区中,最高位进位在CY中
; USE: A,B,R2,R3,R4,R5,DPTR
;-------------------------------;
_BCD_Add:
clr c
_BCD_AddLoop:
mov dpl,r3
mov dph,r2
movx a,@dptr
inc dptr
mov r2,dph
mov r3,dpl
mov b,a
mov dpl,r5
mov dph,r4
movx a,@dptr
addc a,b
da a
movx @dptr,a
inc dptr
mov r4,dph
mov r5,dpl
djnz r7,_BCD_AddLoop
ret
;========================================================================;
;uint Buffer_Clear(uchar TimeLimit);
;-------------------------------;
;Description: Buffer clear
; IN: R0==Buffer address
; A ==Length
; OUT: No
; USE: R0,A
;-------------------------------;
Buffer_Clear:
push AR7
Buffer_ClearLoop:
mov @r0,#00h
inc r0
djnz r7,Buffer_ClearLoop
pop AR7
ret
;========================================================================;
;void Xram_ASIIC_BCD(uchar Length,ucharx *ASIIC_String,ucharx *BCD_String);
;-------------------------------;
;Description: transform string ASIIC to string BCD in external memory
; IN: R7==Length
; R4==ASIIC_String(MSB)
; R5==ASIIC_String(LSB)
; R2==BCD_String(MSB)
; R3==BCD_String(LSB)
; OUT: No
; USE: A,B,R0,R1,R7,(A)
;-------------------------------;
_Xram_ASIIC_BCD:
mov dpl,r5
mov dph,r4 ;ASCII pointer
movx a,@dptr
lcall _ASIIC_BCD1Byte
swap a ;MSB
mov b,a
inc dptr
movx a,@dptr
lcall _ASIIC_BCD1Byte
orl a,b
inc dptr
mov r5,dpl
mov r4,dph
mov dpl,r3
mov dph,r2 ;BCD pointer
movx @dptr,a
inc dptr
mov r3,dpl
mov r2,dph ;BCD pointer
djnz r7,_Xram_ASIIC_BCD
ret
;========================================================================;
;void ASIIC_BCD(uchar Length,ucharx *ASIIC_String,ucharx *BCD_String);
;-------------------------------;
;Description: transform string ASIIC to string BCD
; IN: R7==Length
; R4==ASIIC_String(MSB)
; R5==ASIIC_String(LSB)
; R2==BCD_String(MSB)
; R3==BCD_String(LSB)
; OUT: No
; USE: A,B,R0,R1,R7,(A)
;-------------------------------;
_ASIIC_BCD:
mov AR0,r3
mov AR1,r5
_ASIIC_BCD_Loop:
mov a,@r1
lcall _ASIIC_BCD1Byte
swap a ;MSB
mov b,a
inc r1
mov a,@r1
lcall _ASIIC_BCD1Byte
orl a,b
mov @r0,a
inc r0
inc r1
djnz r3,_ASIIC_BCD_Loop
mov AR0,r3
mov AR1,r5
ret
;========================================================================;
;uchar ASIIC_BCD1Byte(uchar Number)
;-------------------------------;
;Description: transform ASIIC to BCD
; IN: A==ASIIC
; OUT: A==BCD
; USE: A
;-------------------------------;
_ASIIC_BCD1Byte:
cjne a,#'A',ChangChar1
ChangChar1:
jc ChangNumb1
anl a,#0dfh ;both upcase and lowcase are legal
subb a,#37h
ret
ChangNumb1:
anl a,#0fh ;-0x30
ret
;========================================================================;
;uchar StringCompare(uchar Length,ucharx *String1,ucharx *String2);
;-------------------------------;
;Description: String compare process
; IN: R7==Length
; R4==String1 Pointer(MSB)
; R5==String1 Pointer(LSB)
; R2==String2 Pointer(MSB)
; R3==String2 Pointer(LSB)
; OUT: R7==0 String1=String2
; R7==1 String1<String2
; R7==2 String1>String2
; USE: A,B,R0,R1,R7
;-------------------------------;
_StringCompare:
mov AR1,r5
mov AR0,r3
_StringCompareLoop:
mov a,@r0
mov b,a
mov a,@r1
inc r0
inc r1
cjne a,b,_IntStringCompare
djnz r7,_StringCompareLoop
ret
_IntStringCompare:
jc _IntString1Less
mov r7,#2
ret
_IntString1Less:
mov r7,#1
ret
;========================================================================;
;uchar BCD_ASIIC1Byte(uchar Number)
;-------------------------------;
;Description: transform BCD to ASIIC
; IN: A==BCD
; OUT: A==ASIIC
; USE: A
;-------------------------------;
_BCD_ASIIC1Byte:
anl a,#0fh
cjne a,#0ah,ChangChar
ChangChar:
jc ChangNumb
add a,#37h ;A--Z
ret
ChangNumb: ;0--9
add a,#30h
ret
;========================================================================;
;void DisplayString5_7(uchar X,uchar Y,ucharx *Spointer);
;-------------------------------;
;Description: Display 5*7 string on LCD
; IN: R7==X
; R5==Y
; R2==Spointer(MSB)
; R3==Spointer(LSB)
; PublicVariable1==Length
; PublicVariable2==DispMode
; PublicVariable3==BackGroundColor
; OUT: No
; USE:
;-------------------------------;
_DisplayString5_7:
mov AR1,r3
lcall EnterModifyReadMode ;LCD enter modify-read mode
push DataPointer1
push DataPointer2
mov a,sp
inc a
mov DataPointer1,a
add a,#6
mov DataPointer2,a
add a,#6
mov sp,a
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 r4,#6 ;r2==column number
lcall DisplayConfig
mov AddressRegL,#LOW(Char5_7Add)
mov AddressRegH,#HIGH(Char5_7Add) ;library 5*7 address in flash
mov a,PageReg2
clr c
subb a,PageReg1
inc a
mov DeltaYCopy,a ;copy △Y DeltaYCopy=Y2/8-Y1/8+1
Dislay5_7LoopX: ;X loop
mov HideReg1,HideReg1Copy ;restore Hide control register 1
mov PageReg1,DispPageCopy ;restore page address
mov PageReg2,DeltaYCopy ;restore DeltaY
clr TempBit1
String5_7LoopYIni:
mov r0,DataPointer2
String5_7LoopY: ;display Y loop
mov a,PageReg2
cjne a,#1,Display5_7NoEndLine ;end line ?
mov HideReg1,HideReg2 ;restore Hide control register 2
mov r0,DataPointer2
Display5_7NoEndLine:
jb TempBit1,String5_7WriteData ;TempBit1==reread library flag
mov dpl,r1
mov dph,r2
movx a,@dptr
inc dptr
mov r1,dpl
mov r2,dph
mov dpl,AddressRegL
mov dph,AddressRegH
clr c
subb a,#20h ;ASIIC code
mov b,#6
mul ab
add a,dpl
mov dpl,a ;to find ASIIC code address in library
mov a,b
addc a,dph
mov dph,a
mov r5,#6 ;LengthX==ColumnNum/2
lcall ReadLibrary5_7
String5_7WriteData:
lcall SetLCDAddress ;set display address
mov LengthX,#6
push AR2
lcall WriteDisplayData
pop AR2
Display5_7NextPage:
mov HideReg1,#0
inc PageReg1 ;page increment
djnz PageReg2,String5_7LoopYIni ;Y loop
mov a,LengthX ;LengthX==column number
add a,CharInterval ;x increment to display next word
add a,r7
mov r7,a
djnz PublicVariable1,Dislay5_7LoopX ;X loop
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -