欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1449|回復: 11
收起左側

自制AT89C2051全自動鋰電測容神器

  [復制鏈接]
ID:72088 發表于 2025-12-26 08:33 | 顯示全部樓層 |閱讀模式
3.7V鋰電充電、測容、再充滿程序。
元件:AT89C2051(12M)、TM1650顯示(時鐘數碼管)、LM358恒流、TP4056充電、TL431基準

默認通電自動進入程序A:僅充電模式“C”,充滿顯示100(未接電池時交替顯示上次容量"99A9"和時間“99:59”

按下K1鍵后,進入程序B:充電,測容,再充滿模式。
分3個階段完成。                                                                         
1、充電(顯示“C1”);
2、開始恒流放電測容(顯示"F1"),測完容量24C02保存;
3、繼續充電(顯示"C2"),充滿時間24C02保存。
過程完成,交替顯示容量和時間。

;R7程序狀態寄存器,
;默認R7=0只充電"C"
;按鍵賦值R7=1,先充電“C1”,后恒流"F1",完成后自動賦值R7=2,進入充電2階段
;R7=2充電"C2"最后階段。

用TL431檢測(180k和36k中斷電壓3V)
運放橫流放電保證精準測容,
這里有500ma放電/1A放電選擇引腳,對應改變橫流放電電阻R2


1.png 2.png
3.jpg 4.jpg
5.jpg 6.jpg
顯示電路用了拆機的TM1650板
7.jpg 8.jpg
10.jpg


評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的獎勵!

查看全部評分

回復

使用道具 舉報

ID:72088 發表于 2025-12-27 10:34 | 顯示全部樓層
3.7V鋰電全自動測容程序。最大測100A容量

元件:AT89C2051(12M)、TM1650顯示(時鐘數碼管)、LM358恒流、TP4056充電、TL431基準
默認通電只充電模式“C”,充滿顯示100(未接電池時顯示上次容量"99A9"和時間“99:59”)
按鍵K1后,分3個階段完成。                                                                         
1、充電(顯示“C1”);
2、開始恒流放電測容(顯示"F1"),測完24C02保存;
3、繼續充電(顯示"C2"),充滿24C02保存。
      2025.09.16日通過測試。
;        印制板定義
        ADDRESS        EQu        1Ah  ;256字節地址數
        CE_EN        BIT        P1.7 ;1=充電允許,0=充電禁止
        CE_R        BIT        P1.6 ;低電平是充電模式
        CE_G        BIT        P1.5 ;低電平是滿電模式
        HENG        BIT        P1.4 ;1=停止,0=開始恒流放電
        ZHI                BIT        P1.3 ;截止電壓檢測,高電平鋰電有電,低電平鋰電放電完
        DIO                BIT        P1.2 ;TM1637數據腳
        CLK                BIT        P1.1 ;TM1637時鐘腳(復用)
        SCL         EQu        P1.1 ;24C02,6腳(復用)
        SDA         EQu        P1.0 ;24C02,5腳           */

        K0        BIT P3.5        ;1=0.5A;0=1A;恒流選擇位                                               
        K1        BIT        P3.2        ;啟動鍵


        ORG                00H
        LJMP        MAIN
        ORG                03H        ;外中斷按鍵
        LJMP        INT_0
        ORG                0BH
        LJMP        T0_0        ;定時器0(鋰電容量計時用)
        ORG                40H

;=======================程序============================
MAIN:       
        SETB CE_EN        ;默認開機充電
        SETB CE_R        ;不控制LED
        SETB CE_G        ;不控制LED
        SETB HENG        ;禁止恒流
        SETB ZHI        ;截止電壓檢測
        SETB K0                ;1=0.5A恒流
        SETB K1
        MOV R7,#0        ;狀態0
        MOV SP,#60h
        LCALL Srt
        MOV A,#48H      ;數據命令設置48H
        LCALL Writebyte
        MOV A,#00110001B;設置亮度(001亮度最低)        開顯示
        LCALL Writebyte
        LCALL Stop

A500:  ;開機顯示500ma放電
        JNB K0,A1000
        MOV 3AH,#0        ;顯示"500"
        MOV 3BH,#0
        MOV 3CH,#5
        MOV 3DH,#16
        JMP  A1111
A1000:  ;開機顯示1A放電
        MOV 3AH,#0        ;顯示"1A0"
        MOV 3BH,#10
        MOV 3CH,#1
        MOV 3DH,#16
A1111:
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S

        MOV R3,#00H        ;為定時器計時做準備
        MOV TMOD,#00010001B        ;定時器1模式1/定時器0模式1
        MOV TL0,#0B0H                ;設置定時初值
        MOV TH0,#03CH                ;設置定時初值50ms
        MOV IE,#10000011B        ;允許外部中斷0、定時器0中斷(把中斷設置放在讀數據之后,防止啟動時引發中斷數據丟失)
        MOV IP,#00000001B        ;外中斷0優先中斷
        MOV TCON,#00000001B        ;脈沖下降外中斷0
        CLR A
        MOV 2EH,A
        MOV 2FH,A
        MOV 30H,A
        MOV 31H,A
        MOV 32H,A
        MOV 33H,A  ;容量寄存器清零
        MOV 34H,A
        MOV 35H,A
        MOV 36H,A
        MOV 37H,A  ;時間寄存器清零

        MOV ADDRESS,#00h;24C02啟始地址
        MOV        R0,#20h        ;數據存放啟始單元
        MOV R5,#8          ;讀出位數
        LCALL COPY        ;存儲器讀程序

STA_0:
MOV 3AH,21H
MOV 3BH,#10
MOV 3CH,22H
MOV 3DH,23H
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
MOV 3AH,24H         ;低位最右位
MOV 3BH,25H
MOV 3CH,26H
MOV 3DH,27H  ;高位最左位
        MOV DPTR,#TABD
        LCALL DISP
        LCALL DELAY_1S
        CJNE R7,#0,STA_1
        JNB CE_G,STA_0;位為0轉移,為1順執
;--------------------------------------------------------
;以上充滿狀態,
;-----------------C或C1充電狀態--------------------------------
STA_1:
        SETB HENG
        CJNE R7,#0,STA_10
        MOV 3AH,#16        ;顯示"C"
        MOV 3BH,#16
        MOV 3CH,#12
        MOV 3DH,#16
        JMP  STA_11
STA_10:
        CJNE R7,#1,STA_2
        MOV 3AH,#16        ;顯示"C1"
        MOV 3BH,#1
        MOV 3CH,#12
        MOV 3DH,#16
STA_11:
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示
        JB CE_G,STA_1        ;位為1轉移,為0順執
        LCALL DELAY_10MS
        JB CE_G,STA_1        ;位為1轉移,為0順執
        CJNE R7,#0,STA_2       
STA_12:
        MOV 3AH,#0        ;顯示"100"表示只充電,切完成。
        MOV 3BH,#0
        MOV 3CH,#1
        MOV 3DH,#16
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果
        JNB CE_R, STA_1
        JMP STA_12        ;只充電程序結束

START_EN:       
        MOV 3AH,#15        ;顯示“0FF”,錯誤過程
        MOV 3BH,#15
        MOV 3CH,#0
        MOV 3DH,#16
        MOV DPTR,#TAB
        LCALL DISP
        JMP $
                        
;----------------F1恒流測容階段------------------
STA_2:
        CJNE R7,#1,START_EN       
        CLR CE_EN        ;停止充電       
        SETB TR0    ;運行T0
        CLR HENG        ;開始放電
STA_20:
        MOV 3AH,#16                ;顯示"F1"表示放電測容開始了。
        MOV 3BH,#1
        MOV 3CH,#15
        MOV 3DH,#16
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果

MOV 3AH,31H                ;顯示"99A9"容量。
MOV 3BH,#10
MOV 3CH,32H
MOV 3DH,33H
MOV DPTR,#TAB
LCALL DISP
LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果

        JB ZHI,STA_20        ;位為1轉移
        CLR T0        ;關閉定時
        SETB HENG        ;禁止恒流
        MOV R0,#30h        ;R0作為間接尋址
        MOV ADDRESS,#00h        ;地址清零,從00地址開始寫
        MOV R5,        #4
        LCALL XIERU        ;寫入24C02容量單元
        MOV R7,#02H        ;賦值2
;--------C2充電計時階段--------------------------------------------
STA_3:       
        SETB CE_EN        ;開始充電
        LCALL DELAY_10MS
        JB CE_R,STA_3       
        SETB T0        ;啟動定時器
        SETB HENG        ;禁止恒流
STA_30:
        MOV 3AH,#16                ;顯示“C2”,最后階段充電
        MOV 3BH,#2
        MOV 3CH,#12
        MOV 3DH,#16
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果

MOV 3AH,34H                ;顯示"99:59"充電時間。
MOV 3BH,35H
MOV 3CH,36H
MOV 3DH,37H
MOV DPTR,#TABD
LCALL DISP
LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果

        JB CE_G,STA_30        ;綠燈未亮繼續等待
        LCALL DELAY_10MS
        JB CE_G,STA_30        ;綠燈未亮繼續等待

        MOV R0,#34h        ;R0作為間接尋址
        MOV ADDRESS,#04h        ;地址清零,從04地址開始寫
        MOV R5,        #4
        LCALL XIERU        ;寫入24C02充電時間單元
        MOV R7,#03H        ;賦值3.整個程序完整結束。

STA_4:       
        MOV 3AH,31H        ;顯示"99A9"容量。
        MOV 3BH,#10         ;A
        MOV 3CH,32H
        MOV 3DH,33H
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示
        MOV 3AH,34H        ;顯示"99:99"充電時間。
        MOV 3BH,35H
        MOV 3CH,36H
        MOV 3DH,37H
        MOV DPTR,#TABD
        LCALL DISP
        LCALL DELAY_1S
        LCALL GUAN  ;關閉顯示1S,形成閃爍效果
        JMP STA_4                       
;----------關閉顯示-------------------
GUAN:
        MOV 3AH,#16
        MOV 3BH,#16
        MOV 3CH,#16
        MOV 3DH,#16
        MOV DPTR,#TAB
        LCALL DISP
        LCALL DELAY_1S
        RET
;======================中斷程序=======================
INT_0:
        PUSH ACC
        PUSH PSW
        LCALL DELAY_10MS
        JB K1,INT_EN
        CJNE R7,#0,INT_EN
        MOV R7,#1

INT_EN:
        POP PSW
        POP ACC
        RETI


;==================24C02讀程序==========================
COPY:
S:        MOV R2,#10100000B       
        MOV R4,#10100001B
        CALL READ        ;調用讀程序
        MOV @R0,A
        INC ADDRESS        ;地址加1
        INC        R0
        DJNZ R5,S        ;減1后不為0繼續返回S
        RET
;----------------------------
READ:
        LCALL START        ;啟動總線
        MOV A,R2
        LCALL SEND
        LCALL ACK
        JC         READ        ;無應答,循環
        MOV A,ADDRESS
        LCALL SEND
        LCALL ACK
READ_A:
        LCALL START
        MOV A,R4
        LCALL SEND
        LCALL ACK
        JC         READ_A
RECE:
        LCALL RECEIVE
        MOV @R0,A
        LCALL ACK
        LCALL STOP
        RET

;======================T0中服程序===========================
T0_0:
        PUSH ACC
        PUSH PSW
        INC R3
        CJNE R7,#1,T0_10;不是F1測容階段轉移
;-----------------測容程序-----------------------------
        JB K0,T0_1        ;位為1轉移(1=0.5A恒流;0=1A恒流)
        CJNE R3,#72,T0_2EN ;不足3.6S返回
        JMP T0_2
T0_1:
        CJNE R3,#144,T0_2EN ;不足7.2S返回
T0_2:
        MOV R3,#00H

        INC 2Fh                ;1ma
        MOV  A,2Fh
        CJNE A,#10,EXIT   
        MOV  2Fh,#00H

        INC 30h                ;10ma
        MOV  A,30h
        CJNE A,#10,EXIT   
        MOV  30h,#00H

        INC 31h                ;100ma
        MOV  A,31h
        CJNE A,#10,EXIT   
        MOV  31h,#00H

        INC 32h                ;1a
        MOV  A,32h
        CJNE A,#10,EXIT   
        MOV  32h,#00H

        INC 33h                ;10a
        MOV  A,33h
        CJNE A,#10,EXIT   
        MOV  33h,#00H
T0_2EN:
        JMP EXIT
;------------------計時程序--------------------------
T0_10:
        CJNE R7,#2,EXIT;不等轉移
        CJNE R3,#20,EXIT ;不足1S返回(50MS*20=1S)計時模式
        MOV R3,#00H

        INC 2Eh                ;秒位
        MOV  A,2Eh
        CJNE A,#10,EXIT   
        MOV  2Eh,#00H

        INC 2Fh                ;10秒位
        MOV  A,2Fh
        CJNE A,#06,EXIT   
        MOV  2Fh,#00H

        INC 34h                ;分
        MOV  A,34h
        CJNE A,#10,EXIT   
        MOV  34h,#00H

        INC 35h                ;10分位
        MOV  A,35h
        CJNE A,#06H,EXIT   
        MOV  35h,#00H

        INC 36h                ;小時個位
        MOV  A,36h
        CJNE A,#10,EXIT   
        MOV  36h,#00H
        INC 37h                ;小時十位
        MOV  A,37h
        CJNE A,#10,EXIT   
        MOV  37h,#00H
        JMP EXIT

EXIT:
        MOV TL0,#0B0H        ;設置定時初值
        MOV TH0,#03CH        ;設置定時初值
        CLR TF0
        POP PSW
        POP ACC
        RETI

;=================寫入程序===================
XIERU:
        MOV R6,        #10100000B       
WRITE:
        LCALL START
        MOV A,        R6
        LCALL SEND
        LCALL ACK
        JC         WRITE
       
        MOV A,ADDRESS
        LCALL SEND
        LCALL ACK
        MOV A,        @R0                ;
        LCALL SEND
        LCALL ACK
        LCALL STOP
        INC R0
        INC ADDRESS
        DJNZ R5,WRITE     ;減1后不為0轉移,存儲6位
        RETI
;=========總線啟動==========
START:
        SETB         SCL
        SETB         SDA
        NOP
;        NOP
        CLR         SDA
        NOP
;        NOP
        CLR         SCL
        RET
;-------------總線停止------------
STOP:
        CLR         SDA
        NOP
;        NOP
        SETB         SCL
        NOP
;        NOP
        SETB         SDA
        RET
;=============應答============
ACK:
        SETB         SDA
        NOP
;        NOP
        SETB         SCL
        JB         SDA,        ACK_0
        CLR         C
        SJMP         ACK_1
ACK_0:
        SETB         C
ACK_1:
;        NOP
        NOP
        CLR         SCL
        RET
;==============發送==========
SEND:
        MOV         B,        #08h
SEND_1:
        RLC         A
        MOV         SDA,        C
        SETB         SCL
        NOP
;        NOP
        CLR         SCL
        DJNZ         B,        SEND_1
        RET
;==============接收=========
RECEIVE:
        MOV         B,        #08h
        CLR         A
        SETB         SDA
RECEIVE_1:
        SETB         SCL
        NOP
        NOP
        MOV         C,SDA
        RLC         A
        CLR         SCL
        DJNZ         B,        RECEIVE_1
        RET

;===================顯示程序================================
DISP:
         鋰電自動測容.rar (1.2 KB, 下載次數: 0)
;====================延時程序=================================
DELAY_10MS:
        MOV  6EH,#25
D1:        MOV  6FH,#200
        DJNZ 6FH,$
        DJNZ 6EH,D1
        RET
DELAY_1S:
        MOV  6DH,#50
D2:        MOV  6EH,#100
D3:        MOV  6FH,#100
        DJNZ 6FH,$
        DJNZ 6EH,D3
        DJNZ 6DH,D2
        RET
;====================TM1650字形表=============================
;顯示容量,不用小數點
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9
        DB 77H,7CH,39H,5EH,79H,71H;A-F
        DB 00H,40H        ;不顯示,負號
;顯示充電時間,用小數點
TABD:         ;帶點顯示
        DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;0-9
        DB 0F7H,0FCH,0B9H,0DEH,0F9H,0F1H;A-F
        DB 00H,0C0H        ;不顯示,負號
;=============================================================
END

最后附上燒寫文件,












回復

使用道具 舉報

ID:23844 發表于 2025-12-28 17:06 | 顯示全部樓層
仰視一下匯編高手
回復

使用道具 舉報

ID:430492 發表于 2025-12-29 11:04 | 顯示全部樓層
仰視兩下匯編高手!
回復

使用道具 舉報

ID:1028227 發表于 2025-12-31 09:57 來自觸屏版 | 顯示全部樓層
老師厲害了,謝謝分享了
回復

使用道具 舉報

ID:1028227 發表于 2025-12-31 16:47 來自觸屏版 | 顯示全部樓層
師傅是高手
回復

使用道具 舉報

ID:16255 發表于 2026-1-6 10:01 | 顯示全部樓層
AT89c2051,多么熟悉的詞匯,想當年……
回復

使用道具 舉報

ID:123917 發表于 2026-1-12 10:29 | 顯示全部樓層
你好,能分享一下完整的程序嗎?這個不完整,缺太多了
回復

使用道具 舉報

ID:123917 發表于 2026-1-12 10:35 | 顯示全部樓層
你好,想仿制一個,但是下面的三個子程序沒有,能分享完整程序嗎?謝謝
LCALL Srt
LCALL Writebyte
DISP:
回復

使用道具 舉報

ID:620993 發表于 2026-1-14 16:04 | 顯示全部樓層
樓主大愛無私!值得學習。能分享完整程序嗎?謝謝
回復

使用道具 舉報

ID:72088 發表于 2026-1-15 10:12 | 顯示全部樓層
wjfw 發表于 2026-1-12 10:35
你好,想仿制一個,但是下面的三個子程序沒有,能分享完整程序嗎?謝謝
LCALL Srt
LCALL Writebyte

只有顯示程序略掉了,其它的程序都有的,我另外一個帖子有顯示程序,和這樣一樣,或者留個郵箱我發你
回復

使用道具 舉報

ID:1167487 發表于 2026-2-16 12:27 | 顯示全部樓層
樓主大愛,能分享一下完整的程序么?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表