📄 lcdcharge.asm
字号:
B0BSET LCD_M
B0BTS0 LowF
B0BSET LCD_LOW
B0BTS1 LowF
B0BSET LCD_HiGH
B0BTS0 LilonF
B0BSET LCD_Lilon
B0BTS0 BatteryF
B0BSET LCD_Bat
B0BTS0 P1F
B0BSET LCD_P1
B0BTS0 P2F
B0BSET LCD_P2
B0BTS0 P3F
B0BSET LCD_P3
B0BTS0 ErrorF
B0BSET LCD_Berror
B0BTS0 HF
B0BSET LCD_H
B0MOV Y,#0
RET
;============================================================================
;============================================================================
;============================================================================
CountmH:B0BTS1 ChargeF
RET
DECMS Second60 ;
RET
Cnt00mAh:
MOV A,#20
B0MOV Second60,A
B0BTS0 P1FullF ;Cnt mh
JMP Cnt01mAh
B0MOV A,A0Value
B0BTS0 FZ
JMP Cnt01mAH
B0MOV A,mHValue
ADD Cntmh00,A
B0BTS0 FC
INCMS Cntmh01
Cnt01mAh:
B0BTS0 P2FullF
JMP Cnt02mAh
B0MOV A,A1Value
B0BTS0 FZ
JMP Cnt02mAH
B0MOV A,mHValue
ADD Cntmh10,A
B0BTS0 FC
INCMS Cntmh11
Cnt02mAh:
B0BTS0 P3FullF
JMP Cnt03mAh
B0MOV A,A2Value
B0BTS0 FZ
JMP Cnt03mAH
B0MOV A,mHValue
ADD Cntmh20,A
B0BTS0 FC
INCMS Cntmh21
Cnt03mAh:
B0BTS0 P1FullF
RET
B0MOV A,A3Value
B0BTS0 FZ
RET
B0MOV A,mHValue
ADD Cntmh30,A
B0BTS0 FC
INCMS Cntmh31
RET
;============================================================================
W5SecondEnd:
B0MOV A,Wait5s
B0BTS0 FZ
RET
DECMS Wait5s
RET
CALL CountmH
MOV A,#150
B0MOV Wait5s,A
B0BSET Is5sF
INCMS Sum2
MOV A,#5
XOR A,Sum2
B0BTS0 FZ
B0BCLR Sum2.2
B0BTS0 FZ
B0BSET ArrayF
B0BTS0 ChargeF
JMP DispWhich
CALL DispSum1
CALL LCDdisplay
RET
;============================================================================
DispP1P2P3:
B0BTS1 ChargeF
RET
DECMS Wait500ms
RET
MOV A,#20
B0MOV Wait500ms,A
B0MOV A,Flag3
AND A,#0F0H
B0MOV TMP,A
B0BSET FC
RLC Flag3
AND A,#0FH
OR A,TMP
B0MOV Flag3,A
AND A,#0FH
XOR A,#0FH
MOV A,#0F0H
B0BTS0 FZ
AND Flag3,A
CALL DispSum1
CALL LCDdisplay
RET
;============================================================================
;============================================================================
;; Main program ;;
;; Main program ;;
;============================================================================
;============================================================================
;============================================================================
PowerOn:
MOV A,#07Fh ;Initial stack pointer and
B0MOV STKP,A ;disable global interrupt
mov A,#60h ;Clear watchdog timer and initial system mode
b0mov OSCM,A ;
CALL ClrRam ;Clear bank0
MOV A,#250
B0MOV Wait5s,A
CALL InitSound ;
CALL LCDinit ;
PowerOn1:
B0BCLR SIOM.7 ;
MOV A,#0FH ;
B0MOV P1M,A ;
MOV A,#0FH ;
B0MOV P1,A ;Initial Port
MOV A,#0 ;
B0MOV P4M,A ;
MOV A,#1FH ;
B0MOV P4,A ;
MOV A,#00H ;
B0MOV P5,A ;
MOV A,#18H ;11101
B0MOV P5M,A ;
@SET_PUR 0x23 ;
MOV A,#00H ;
MOV A,#10000000B ;10010000b
B0MOV TC0M,A ;
MOV A,#0 ;
B0MOV ADM,A ;
B0MOV TC0C,A ;
B0MOV TC0R,A ;
B0BSET MustADF ;CheckAD
MOV A,#0 ;
B0MOV WhichAD,A ;
B0BCLR BUZ ;
B0BSET LCD_Lilon ;
B0BSET MF ;
B0BSET AF ;
B0BSET LowF ;
B0BSET LilonF ;
MainLoop: ;
B0BSET FWDRST ;Clear the watchdogtimer's counter
NOP ;
MOV A,#0EBH ;7777
SUB A,TC0C ;
B0BTS0 FC ;
JMP MainLoop ;
MOV A,#0 ;
B0MOV TC0C,A ;
CALL ForSound ;10ms every unit
B0BTS0 ErrorF
JMP IntoError ;
CALL W5SecondEnd ;
B0BTS0 GoodF ;
JMP DoGood ;
B0BTS1 Is5sF ;
JMP MainLoop ;
CALL YESBFull
CALL DispP1P2P3 ;
CALL ADcompleted ;Check voltage of discharge
CALL TakeBattery ;
CALL ChkBattery ;
CALL Scankey ;
CALL ToSetAD0to3 ;
CALL MustSetAD45 ;
CALL ADCsetX ;
JMP MainLoop ;
IntoError:
B0BTS0 SW1 ;
JMP MainLoop ;
IntoPower:
CALL ClrRam ;Clear bank0
MOV A,#1 ;
B0MOV Wait5s,A ;
B0BSET PressF ;
B0BSET Is5sF ;
CALL ToDischar1 ;
JMP PowerOn1 ;
DoGood: B0BSET P1F ;
B0BSET P2F ;
B0BSET P3F ;
B0BSET P4F ;
CALL ADcompleted ;
CALL SetAD0 ;
CALL ADCsetX
B0BTS1 SW1 ;
JMP IntoPower ;
CALL TakeBattery ;
MOV A,#50H ;
SUB A,A0Value ;A0Value<50H
B0BTS1 FC ;
JMP MainLoop ;
JMP IntoPower ;
ORG 600H
;------------------------------------------------------------------
;------------------------------------------------------------------
DispWhich:
B0BTS0 ArrayF ;
INCMS LoopWhich ;
B0BCLR ArrayF ;
B0MOV A,LoopWhich ;
AND A,#03 ;
B0ADD PCL,A ;
JMP DISPmA ;0
JMP DISPmV ;1
JMP DISPmHA ;2
MOV A,#0FCH
AND LoopWhich,A
DispmA:
B0MOV A,A1Value ;
B0BTS0 FZ ;
B0MOV A2Value,A ;
B0MOV A,A2Value ;
B0BTS0 FZ ;
B0MOV A3Value,A ;
B0MOV Y,#0 ;
B0BCLR HF ;
B0BCLR VF ;
B0BSET AF ;
B0BSET mF ;
DECS Sum2 ;
NOP
ADD A,#A0Value
B0MOV Z,A
B0MOV A,@YZ
XOR A,#0
B0BTS1 FZ
B0MOV A,A4Value
AllDispX:
B0MOV Tmp,A
B0MOV Y,#Vtable$M
B0MOV Z,#Vtable$L
B0MOV A,Tmp
B0ADD Z,A
B0BTS0 FC
INCMS Y
MOVC
B0MOV Tmp,A
AND A,#0FH
B0MOV Sum6,A
SWAP Tmp
AND A,#0FH
B0MOV Sum5,A
B0MOV A,R
AND A,#0FH
B0MOV Sum4,A
SWAP R
AND A,#0FH
B0MOV Sum3,A
B0MOV Y,#0
B0MOV Z,#0
isDispmah:
CALL DispSum1
CALL LCDdisplay
B0MOV Y,#0
RET
DispmV: B0BSET VF
B0BCLR HF
B0BCLR AF
B0BSET mF
CLR Y
DECS Sum2
NOP
ADD A,#A0Value
B0MOV Z,A
B0MOV A,@YZ
JMP AllDispX
DispmHA:
B0BSET HF
B0BSET AF
B0BSET mF
B0BCLR VF
mAHhextodec:
MOV A,#0
B0MOV SUM3,A
B0MOV SUM4,A
B0MOV SUM5,A
B0MOV SUM6,A
B0MOV Y,#00
MOV A,#Cntmh00
ADD A,Sum2
ADD A,Sum2
SUB A,#2
B0MOV Z,A
B0MOV A,@YZ
CntLowLp:
SUB A,#0AH ;A-10
B0BTS1 FC
JMP Cntlowend
INCMS Sum5
JMP CntLowlp
CntlowEnd:
ADD A,#0AH
B0MOV SUM6,A
B0MOV A,Sum5
CntSum5LP:
SUB A,#0AH
B0BTS1 FC
JMP CntHigh ;
INCMS Sum4
JMP CntSum5Lp ;
CntHigh:ADD A,#0AH ;
B0MOV Sum5,A ;
INCMS Z ;
B0MOV A,@YZ ;
ADD A,Sum4 ;
CntHighLp:
SUB A,#0AH
B0BTS1 FC
JMP CntHighEnd
INCMS SUM3
JMP CntHighLp
CntHighEnd:
ADD A,#0AH
B0MOV Sum4,A
JMP isDispmah
;========================================================================
ORG 800H
Sum09Seg: ; A HGFE,DCBA
DW 003FH ;0 ---- 0 0011,1111 3F
DW 0006H ;1 F / / 1 0000,0110 06
DW 005BH ;2 / G / B 2 0101,1011 5B
DW 004FH ;3 ---- 3 0100,1111 4F
DW 0066H ;4 E / / 4 0110,0110 66
DW 006DH ;5 / / C 5 0110,1101 6D
DW 007DH ;6 ---- 6 0111,1101 7D
DW 0027H ;7 D 7 0010,0111 27
DW 007FH ;8 8 0111,1111 7F
DW 006FH ;9 9 0110,1111 6F
;=========================================================================
Vtable: DW 0000H ;00
DW 0010H ;01
DW 0020H ;02
DW 0030H ;03
DW 0050H ;04
DW 0070H ;05
DW 0100H ;06
DW 0120H ;07
DW 0150H ;08
DW 0160H ;09
DW 0200H ;0A
DW 0250H ;0B
DW 0260H ;0C
DW 0280H ;0D
DW 0300H ;0E 300mV
DW 0320H ;0F----
DW 0340H ;10
DW 0360H ;11
DW 0380H ;12
DW 0400H ;13
DW 0420H ;14
DW 0440H ;15
DW 0460H ;16
DW 0480H ;17
DW 0490H ;18
DW 0500H ;19 500mV
DW 0500H ;1A
DW 0520H ;1B
DW 0558H ;1C
DW 0573H ;1D
DW 0590H ;1E
DW 0613H ;1F----
DW 0630H ;20
DW 0660H ;21
DW 0680H ;22
DW 0700H ;23
DW 0715H ;24
DW 0745H ;25
DW 0780H ;26
DW 0800H ;27 800mV
DW 0840H ;28
DW 0860H ;29
DW 0880H ;2A
DW 0900H ;2B
DW 0910H ;2C
DW 0930H ;2D
DW 0950H ;2E
DW 0980H ;2F--------
DW 1000H ;30
DW 1000H ;31
DW 1000H ;32
DW 1040H ;33
DW 1080H ;34
DW 1080H ;35
DW 1080H ;36
DW 1100H ;37 1100mV
DW 1100H ;38
DW 1130H ;39
DW 1130H ;3A
DW 1170H ;3B
DW 1170H ;3C
DW 1200H ;3D
DW 1200H ;3E
DW 1250H ;3F-------
DW 1250H ;40
DW 1300H ;41 1300mV
DW 1300H ;42
DW 1330H ;43
DW 1330H ;44
DW 1360H ;45
DW 1360H ;46
DW 1400H ;47
DW 1400H ;48
DW 1450H ;49
DW 1450H ;4A
DW 1500H ;4B
DW 1500H ;4C 1500mV
DW 1500H ;4D
DW 1550H ;4E
DW 1550H ;4F----
DW 1580H ;50
DW 1580H ;51
DW 1600H ;52
DW 1600H ;53
DW 1620H ;54
DW 1620H ;55
DW 1650H ;56
DW 1650H ;57
DW 1700H ;58
DW 1750H ;59
DW 1750H ;5A
DW 1800H ;5B 1800mV
DW 1850H ;5C
DW 1850H ;5D
DW 1900H ;5E
DW 1900H ;5F----
DW 1910H ;60
DW 1910H ;61
DW 1950H ;62
DW 1950H ;63
DW 2000H ;64
DW 2000H ;65
DW 2000H ;66
DW 2020H ;67
DW 2080H ;68
DW 2100H ;69
DW 2100H ;6A
DW 2100H ;6B 2100mV
DW 2150H ;6C
DW 2150H ;6D
DW 2200H ;6E
DW 2200H ;6F---
DW 2250H ;70
DW 2250H ;71
DW 2250H ;72
DW 2800H ;73
DW 2800H ;74
DW 2300H ;75
DW 2300H ;76
DW 2350H ;77
DW 2350H ;78
DW 2400H ;79 2400mV
DW 2400H ;7A
DW 2400H ;7B
DW 2450H ;7C
DW 2450H ;7D
DW 2450H ;7E
DW 2500H ;7F---
DW 2500H ;80
DW 2550H ;81
DW 2550H ;82
DW 2600H ;83
DW 2600H ;84
DW 2650H ;85
DW 2650H ;86
DW 2650H ;87
DW 2700H ;88 2700mV
DW 2700H ;89
DW 2700H ;8A
DW 2750H ;8B
DW 2750H ;8C
DW 2800H ;8D
DW 2850H ;8E
DW 2850H ;8F----
DW 2850H ;90
DW 2900H ;91
DW 2900H ;92
DW 2900H ;93
DW 2950H ;94
DW 2950H ;95
DW 3000H ;96 3000mV
DW 3000H ;97
DW 3100H ;98
DW 3100H ;99
DW 3150H ;9A
DW 3150H ;9B
DW 3200H ;9C
DW 3200H ;9D
DW 3250H ;9E
DW 3250H ;9F----
DW 3250H ;A0
DW 3250H ;A1
DW 3250H ;A2
DW 3300H ;A3
DW 3300H ;A4
DW 3300H ;A5
DW 3300H ;A6 3300mV
DW 3300H ;A7
DW 3350H ;A8
DW 3350H ;A9
DW 3400H ;AA
DW 3400H ;AB
DW 3400H ;AC
DW 3450H ;AD
DW 3450H ;AE
DW 3450H ;AF----
DW 3500H ;B0
DW 3500H ;B1
DW 3500H ;B2
DW 3550H ;B3
DW 3550H ;B4
DW 3600H ;B5 3600mV
DW 3600H ;B6
DW 3650H ;B7
DW 3650H ;B8
DW 3650H ;B9
DW 3700H ;BA
DW 3700H ;BB
DW 3750H ;BC
DW 3750H ;BD
DW 3750H ;BE
DW 3800H ;BF------
DW 3800H ;C0
DW 3850H ;C1
DW 3850H ;C2
DW 3850H ;C3
DW 3900H ;C4 3900mV
DW 3900H ;C5
DW 3950H ;C6
DW 3950H ;C7
DW 4000H ;C8
DW 4000H ;C9
DW 4000H ;CA
DW 4050H ;CB
DW 4050H ;CC
DW 4050H ;CD
DW 4050H ;CE
DW 4100H ;CF----
DW 4100H ;D0
DW 4100H ;D1
DW 4200H ;D2
DW 4200H ;D3 4200mV
DW 4200H ;D4
DW 4200H ;D5
DW 4200H ;D6
DW 4200H ;D7
DW 4200H ;D8
DW 4200H ;D9
DW 4200H ;DA
DW 4200H ;DB
DW 4200H ;DC
DW 4200H ;DD
DW 4200H ;DE
DW 4200H ;DF-----
DW 4200H ;E0
DW 4200H ;E1
DW 4200H ;E2
DW 4200H ;E3
DW 4200H ;E4
DW 4200H ;E5
DW 4200H ;E6
DW 4200H ;E7
DW 4200H ;E8
DW 4200H ;E9
DW 4200H ;EA
DW 4200H ;EB
DW 4200H ;EC
DW 4200H ;ED
DW 4200H ;EE
DW 4200H ;EF------
DW 4200H ;F0
DW 4200H ;F1
DW 4200H ;F2
DW 4200H ;F3
DW 4200H ;F4
DW 4200H ;F5
DW 4200H ;F6
DW 4200H ;F7
DW 4200H ;F8
DW 4200H ;F9
DW 4200H ;FA
DW 4200H ;FB
DW 4200H ;FC
DW 4200H ;FD
DW 4200H ;FE
DW 4200H ;FF
;========================================================================
ENDP
;========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -