📄 lcdcharge.asm
字号:
B0BTS1 FC ;
JMP ErrorSet ;
RET ;
IsADC2Temp1: ;
B0MOV A,TEMPH ;
B0MOV TempADold,A ;
RET ;
;===================================================================
TakeBattery: ;
B0BTS1 ChargeF ;In charge status
RET ;
INCMS CntTestBT ;
B0BTS1 CntTestBT.7 ;
RET ;
B0BTS1 CntTestBT.4 ;100
JMP TakeBT00 ;PWM disable
MOV A,#00 ;
B0MOV CntTestBT,A ;
JMP PWMenable ;
TakeBT00:
MOV A,#03 ;
AND A,CntTestBT ;CntTestBT.1.0=0
B0BTS1 FZ ;
JMP TakeBT01 ;
MOV A,#4 ;
B0MOV WhichAD,A ;
JMP PWMDisable ;Close PWM
TakeBT01:
MOV A,#50H ;
SUB A,A0Value ;A0Value<50H
B0BTS1 FC ;
RET
NOP ;
ErrorSet:
B0BTS0 GoodF
RET
CALL PWMDisable ;
B0BCLR P1F ;
B0BCLR P2F ;
B0BCLR P3F
B0BCLR P4F ;
B0BCLR ChargeF ;
B0BCLR BatteryF ;
B0BSET ErrorF ;User take out battery in charge proess
CALL DispSum1
CALL LCDdisplay
MOV A,#05H ;60ms NG
B0MOV BuzTime,A ;
MOV A,#06H ;
B0MOV NotBuzTime,A ;
MOV A,#06H ;60ms NH
B0MOV BuzTime,A ;
MOV A,#0CH ;6 times sound
B0MOV BuzCnt,A ;
B0BSET BuzzerF ;
RET ;
;------------------------------------------------------------------
Scankey:B0MOV A,P0 ;
AND A,#03H ;
XOR A,#03H ;
B0BTS0 FZ ;
JMP Nokey ;
B0BTS0 PressF ;Hold press one key
RET ;
B0BSET PressF ;
B0BTS1 SW1 ;
JMP SW1Press ;
B0BTS1 SW2 ;Press SW2
JMP SW2Press ;
RET ;
Nokey: B0BCLR PressF ;
RET ;
;***************************************************************************
;Select charge or discharge battery ;
SW1Press:
B0BTS1 BatteryF ;If not put on battery ,SW1 select NH or NG
RET ;
EnOrdis:
CALL SelectA ;
MOV A,#20 ;
B0MOV Second60,A ;60mHA
CLR Timex1 ;
B0BCLR Full1minF ;
MOV A,#80H ;
XOR Flag,A ;
B0BTS1 ChargeF ;
JMP ToDisChar ;
EnCharge:
MOV A,#0FCH ;
AND LoopWhich,A ;
CLR ADindex ;
MOV A,#20 ;
B0MOV Wait500ms,A ;
CLR CntTime0 ;
CLR CntTime1 ;
MOV A,#22 ;
B0MOV CntTime2,A ;
MOV A,#99 ;
B0MOV PWMflag,A ;
CALL PWMenable ;
B0BSET ChargeF ;
CALL DispSum1 ;
CALL LCDdisplay ;
MOV A,#0 ;
B0MOV P1,A ;
InitSound:
MOV A,#0AH ;100ms NH
B0MOV BuzTime,A ;
MOV A,#06H ;
B0MOV NotBuzTime,A ;
MOV A,#06H ;60ms NH
B0MOV BuzTime0,A ;
MOV A,#07H ;
B0MOV BuzCnt,A ;
B0BSET BuzzerF ;
RET ;
ToDisChar:
MOV A,#00
B0MOV Cntmh00,A
B0MOV Cntmh01,A
B0MOV Cntmh10,A
B0MOV Cntmh11,A
B0MOV Cntmh20,A
B0MOV Cntmh21,A
B0MOV Cntmh30,A
B0MOV Cntmh31,A
B0MOV A1VAlue,A
B0MOV A2VAlue,A
B0MOV A3Value,A
B0MOV A4Value,A ;
B0MOV Sum3,A
B0MOV Sum4,A
B0MOV Sum5,A
B0MOV Sum6,A
MOV A,#0FH ;
B0MOV P1,A
MOV A,#0FH ;
B0MOV P1,A
B0BCLR P1F
B0BCLR P2F
B0BCLR P3F
B0BCLR P4F
CALL PWMDisable ;
B0BCLR ChargeF ;
B0BCLR BatteryF ;
B0BCLR DischF ;
CALL DispSum1
CALL LCDdisplay
ToDischar1:
MOV A,#6 ;
B0MOV BuzTime,A ;
MOV A,#01 ;60 ms one times sound
B0MOV BuzCnt,A ;Count buzzer sound time
B0BSET BuzzerF ;
RET ;
;------------------------------------------------------------------
SelectA:
MOV A,P5 ;
AND A,#07H ;
MOV TMP,A ;
MOV A,#03 ;011
XOR A,TMP ;
B0BTS0 FZ ;
JMP Select2 ;
MOV A,#05 ;101
XOR A,TMP ;
B0BTS0 FZ ;
JMP Select1 ;
Select0:
MOV A,#08H ;150mA
B0BTS1 LOWF ;
MOV A,#0EH
MOV Avalue,A ;
MOV A,#2 ;
B0MOV mHValue,A ;
RET
Select1:MOV A,#0BH ;250mA
B0BTS1 LOWF ;
MOV A,#19H
MOV Avalue,A ;
MOV A,#4 ;
B0MOV mHValue,A ;
RET ;
Select2:MOV A,#19H ;500mA
B0BTS1 LOWF ;
MOV A,#31H
MOV Avalue,A ;
MOV A,#8 ;
B0MOV mHValue,A ;
RET ;
;======================================================================
SW2Press:
; B0BTS1 BatteryF ;
; RET ;
B0BTS0 ChargeF ;
RET ;
; CALL SelectA ;
MOV A,#4H ;
XOR Flag1,A ;
B0MOV A,mHValue ;
B0BTS1 LOWF ;
ADD mHValue,A ;mAH
CALL DispSum1
CALL LCDdisplay
MOV A,#6 ;
B0MOV BuzTime,A ;
MOV A,#01 ;60 ms one times sound
B0MOV BuzCnt,A ;Count buzzer sound time
B0BSET BuzzerF ;
RET ;
;============================================================================
ForSound:
B0BTS1 BuzzerF ;
RET ;
B0BTS0 BuzCnt.0 ;BuzCnt.0=1 open BuzCnt.0=0 close
B0BSET Buz ;Open buzzer
B0BTS1 BuzCnt.0 ;
B0BCLR Buz ;Close buzzer
DECMS BuzTime ;Buzzer sound time
RET ;
DECMS BuzCnt ;
JMP BuzTload ;Buzzer time reload ;
B0BCLR BuzzerF ;
B0BCLR Buz ;Close Buz
B0BTS0 ErrorF ;
JMP ErrorSet ;
RET ;
BuzTload:B0MOV A,BuzTime0 ;
B0BTS1 BuzCnt.0 ;
B0MOV A,NotBuzTime ;
B0MOV BuzTime,A ;
B0BTS0 BuzCnt.0 ;BuzCnt.0=1 open BuzCnt.0=0 close
B0BSET Buz ;Open buzzer
B0BTS1 BuzCnt.0 ;
B0BCLR Buz ;Close buzzer
RET ;
;============================================================================
;Check user put battery socket? ;
ChkBattery: ;
B0BTS0 ErrorF ;
RET ;
B0BTS1 Is5sF ;
RET ;
MOV A,#25H ;
SUB A,A0Value ;
B0BTS0 FC ;
JMP NotPutonB ;
B0BTS0 ChargeF ;
RET ;
B0BSET BatteryF ;
CLR Timex ;
CALL DispSum1
CALL LCDdisplay
RET ;
NotPutonB:
B0BTS0 ChargeF ;
RET ;
INCMS Timex
B0BTS1 Timex.3
RET
B0BCLR BatteryF ;
CALL DispSum1
CALL LCDdisplay
RET ;
;============================================================================
;Check battery full?? ;
YesBfull:
B0BTS1 ChargeF
RET
B0MOV A,A3Value
B0BTS0 FZ
JMP YesB01
B0BTS1 P4FullF
RET
YesB01: B0MOV A,A2Value
B0BTS0 FZ
JMP YesB02
B0BTS1 P3FullF
RET
YesB02: B0MOV A,A2Value
B0BTS0 FZ
JMP YesB03
B0BTS1 P2FullF
RET
YesB03: B0BTS1 P1FullF
RET
MOV A,#1
B0MOV A4Value,A
CLR CntTestBT ;
CALL PWMdisable ;
MOV A,#100 ;
B0MOV PWMFlag,A ;
CALL PWMenable ;
B0BSET GoodF ;
;B0BCLR ChargeF ;
YesBfull1: ;
MOV A,#10H ;100ms NH
B0MOV BuzTime,A ;
MOV A,#6H ;
B0MOV NotBuzTime,A ;
MOV A,#06H ;60ms NH
B0MOV BuzTime0,A ;
MOV A,#08H ;
B0MOV BuzCnt,A ;
B0BSET BuzzerF ;
RET ;
;============================================================================
;============================================================================
PWMenable:
B0BSET PWMF ;
B0BCLR FTC1IEN ;
B0BCLR FTC1ENB ;
MOV A,#74H ;
B0MOV TC1M,A ;
MOV A,#256-75 ;25*3 150instruct
B0MOV TC1C,A ;
B0MOV TC1R,A ;
B0BSET FGIE ;
B0BSET FTC1IEN ;
B0BCLR FTC1IRQ ;
B0BSET FTC1ENB ;
B0BSET FALOAD1 ;
RET ;
;-----------------------------------------------------------------------------
PWMDisable:
B0BCLR PWMF ;
B0BCLR FGIE ;
B0BCLR PWM1 ;
B0BCLR FTC1IEN ;
B0BCLR FTC1ENB ;
RET
;============================================================================
Wait1Minute:
B0BTS1 Full1minF ;
RET ;
JMP YesBfull ;
;============================================================================
;charge battery 8 hours
;============================================================================
ToSetAD0to3:
B0BTS0 ADCoverF ;
RET ;
B0BTS0 PWMF ;
RET ;
DECMS WhichAD ;
NOP
MOV A,#3 ;
B0BTS0 WhichAD.7 ;
B0MOV WhichAD,A ;
B0BSET ADCoverF ;
B0BSET MustADF ;
RET
SetAD0: B0BTS0 ADCoverF ;
RET ;
B0BTS0 PWMF ;
RET ;
MOV A,#0
B0MOV WhichAD,A
B0BSET ADCoverF ;
B0BSET MustADF ;
RET
;------------------------------------------------------------------
MustSetAD45:
B0BTS0 ADCoverF ;
RET
B0BTS1 PWMF ;
RET
MOV A,#5 ;
B0BTS0 AD4orAD5F
MOV A,#4
B0MOV WhichAD,A ;
MOV A,#04H
XOR Flag2,A
B0BSET MustADF ;
RET ;
;============================================================================
ClrRam: clr Y ;Select bank 0
b0mov Z,#0x7f ;Set @YZ address from 7fh
ClrRAM10:
clr @YZ ;Clear @YZ content
decms Z ;z = z - 1 , skip next if z=0
jmp ClrRAM10 ;
clr @YZ ;Clear address 0x00
ret ;
;------------------------------------------------------------------
;ANI2,3,4 set convert ;
ADCsetX:
B0BTS1 MustADF ;
RET
B0BCLR MustADF ;
MOV A,#20H ;60
B0MOV ADR,A ;
MOV A,WhichAD ;
OR A,#90H ;
B0MOV ADM,A ;Enable ADC AND SET AIN3 input
B0BSET FADS ;Start AD convert
RET ;
;==========================================================================
LCDinit:
B0BCLR FBLANK ;Lcd display normal
B0BCLR FP6HSEG ;
B0BCLR FP6LSEG ;
B0BCLR FP3LCD ;
MOV A,#24
B0MOV Tmp,A
MOV A,#0FH
B0MOV Y,A
MOV A,#0
B0MOV Z,A
LCDinitLp:
MOV A,#0EH ;
B0MOV @YZ,A ;
INCMS Z
DECMS Tmp
JMP LCDinitLp
B0BSET FLENB ;Lcd enable
MOV A,#00
B0MOV Z,A
B0MOV A,@YZ
B0MOV Y,#0
RET
;============================================================================
LCDdisplay:
MOV A,#00
B0MOV Tmp,A
LpLcd: MOV A,#LCD00
ADD A,Tmp
B0MOV Z,A
B0MOV Y,#0
MOV A,@YZ
B0MOV CntADtmp0,A
B0MOV Y,#0FH ;
B0MOV A,Tmp
B0MOV Z,A
B0MOV A,CntADtmp0
B0MOV @YZ,A
INCMS Tmp
MOV A,#24
XOR A,Tmp
B0BTS1 FZ
JMP LpLcd
B0MOV Y,#0
RET
;============================================================================
DispSum1:
B0MOV Y,#0
B0MOV Z,#LCD00
MOV A,#24
B0MOV Tmp,A
ClearLcd:
MOV A,#00 ;
B0MOV @YZ,A ;
INCMS Z ;Clear lcd all display
DECMS Tmp ;
JMP ClearLcd ;
B0MOV Y,#Sum09Seg$M ;
B0MOV Z,#Sum09Seg$L ;
B0MOV A,Sum2 ;From sum 1
; B0BTS0 FZ
; JMP DispSum2
B0ADD Z,A
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;1A
B0BSET LCD_1A
B0BTS0 Tmp.1 ;1B
B0BSET LCD_1B
B0BTS0 Tmp.2 ;1C
B0BSET LCD_1C
B0BTS0 Tmp.3 ;1D
B0BSET LCD_1D
B0BTS0 Tmp.4 ;1E
B0BSET LCD_1E ;
B0BTS0 Tmp.5 ;1F
B0BSET LCD_1F ;
B0BTS0 Tmp.6 ;1G
B0BSET LCD_1G ;
B0BTS0 Tmp.7 ;1H
; B0BSET LCD_1H ;
DispSum2:
B0MOV Y,#Sum09Seg$M
B0MOV Z,#Sum09Seg$L
B0MOV A,Sum1 ;From sum 1
B0BTS0 FZ
JMP DispSum3
B0ADD Z,A
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;2A
B0BSET LCD_2A
B0BTS0 Tmp.1 ;2B
B0BSET LCD_2B
B0BTS0 Tmp.2 ;2C
B0BSET LCD_2C
B0BTS0 Tmp.3 ;2D
B0BSET LCD_2D
B0BTS0 Tmp.4 ;2E
B0BSET LCD_2E
B0BTS0 Tmp.5 ;2F
B0BSET LCD_2F
B0BTS0 Tmp.6 ;2G
B0BSET LCD_2G
B0BTS0 Tmp.7 ;2H
; B0BSET LCD_2H
DispSum3:
B0MOV Y,#Sum09Seg$M
B0MOV Z,#Sum09Seg$L
B0MOV A,Sum3 ;From sum 1
B0BTS0 FZ
JMP DispSum4
B0MOV A,Sum3 ;From sum 1
B0ADD Z,A
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;3A
B0BSET LCD_3A
B0BTS0 Tmp.1 ;3B
B0BSET LCD_3B
B0BTS0 Tmp.2 ;3C
B0BSET LCD_3C
B0BTS0 Tmp.3 ;3D
B0BSET LCD_3D
B0BTS0 Tmp.4 ;3E
B0BSET LCD_3E
B0BTS0 Tmp.5 ;3F
B0BSET LCD_3F
B0BTS0 Tmp.6 ;3G
B0BSET LCD_3G
B0BTS0 Tmp.7 ;3H
; B0BSET LCD_3H
DispSum4:
B0MOV Y,#Sum09Seg$M
B0MOV Z,#Sum09Seg$L
B0MOV A,Sum3 ;From sum 1
OR A,Sum4
B0BTS0 FZ
JMP DispSum5 ;
B0MOV A,Sum4 ;From sum 1
B0ADD Z,A ;
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;4A
B0BSET LCD_4A
B0BTS0 Tmp.1 ;4B
B0BSET LCD_4B
B0BTS0 Tmp.2 ;4C
B0BSET LCD_4C
B0BTS0 Tmp.3 ;4D
B0BSET LCD_4D
B0BTS0 Tmp.4 ;4E
B0BSET LCD_4E
B0BTS0 Tmp.5 ;4F
B0BSET LCD_4F
B0BTS0 Tmp.6 ;4G
B0BSET LCD_4G
B0BTS0 Tmp.7 ;4H
; B0BSET LCD_4H
DispSum5:
B0MOV Y,#Sum09Seg$M
B0MOV Z,#Sum09Seg$L
B0MOV A,Sum3 ;From sum 1
OR A,Sum4
OR A,Sum5
B0BTS0 FZ
JMP DispSum6
B0MOV A,Sum5 ;From sum 1
B0ADD Z,A
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;5A
B0BSET LCD_5A
B0BTS0 Tmp.1 ;5B
B0BSET LCD_5B
B0BTS0 Tmp.2 ;5C
B0BSET LCD_5C
B0BTS0 Tmp.3 ;5D
B0BSET LCD_5D
B0BTS0 Tmp.4 ;5E
B0BSET LCD_5E
B0BTS0 Tmp.5 ;5F
B0BSET LCD_5F
B0BTS0 Tmp.6 ;5G
B0BSET LCD_5G
B0BTS0 Tmp.7 ;5H
; B0BSET LCD_5H
DispSum6:
B0MOV Y,#Sum09Seg$M
B0MOV Z,#Sum09Seg$L
B0MOV A,Sum6 ;From sum
B0ADD Z,A
MOVC
B0MOV Tmp,A
B0BTS0 Tmp.0 ;6A
B0BSET LCD_6A
B0BTS0 Tmp.1 ;6B
B0BSET LCD_6B
B0BTS0 Tmp.2 ;6C
B0BSET LCD_6C
B0BTS0 Tmp.3 ;6D
B0BSET LCD_6D
B0BTS0 Tmp.4 ;6E
B0BSET LCD_6E
B0BTS0 Tmp.5 ;6F
B0BSET LCD_6F
B0BTS0 Tmp.6 ;6G
B0BSET LCD_6G
B0BTS0 Tmp.7 ;6H
B0MOV Y,#0
; B0BSET LCD_6H ;----
B0BTS0 AF
B0BSET LCD_A
B0BTS0 VF
B0BSET LCD_V
B0BTS0 MF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -