找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14908|回復(fù): 10
收起左側(cè)

我制作的電動車充電保護器 含單片機源碼與電路原理圖

  [復(fù)制鏈接]
ID:286600 發(fā)表于 2018-3-2 10:08 | 顯示全部樓層 |閱讀模式
下面是此電瓶車充電保護器作品的外觀圖:
IMG_20180301_095151.jpg
這是一個電瓶車充電器的附加裝置,不對充電器做任何變動,而是將充電器插在該保護器上連成一體代替原充電器進行電瓶車的充電。
功能:1、充電達到設(shè)定的電壓,自動斷電停充,防過充。
      2、滿十小時自動停充電,電瓶有故障充不到設(shè)定電壓,經(jīng)十小時也停充。
      3、能根據(jù)氣溫設(shè)定充電電壓檔次,能記憶設(shè)定的檔次,無須每次設(shè)定。
      4、用二進制數(shù)循環(huán)顯示電壓的十位個位小數(shù)位值。
用法:將充電器插在該保護器上連成一體,代替原充電器進行電瓶車的充電。插上220V交流后在15秒內(nèi)左右慢搖保護器,使內(nèi)置水銀開關(guān)接通又斷開(按鍵作用),溫度檔次依次增加,共分1~8檔,對應(yīng)環(huán)境溫度是5℃-40℃。水銀開關(guān)斷開15秒后進入充電程序,水銀開關(guān)不再起作用。
       充足電的斷充電指示可從原充電器指示燈看出,不另加指示燈。
讀電壓:顯示過程是--四燈全亮(提示開始)、滅、十位、滅、個位、滅、小數(shù)一位、滅,循環(huán)不斷。用四位二進制數(shù)表示0到9,讀出數(shù)不難,記得四燈分別代表8、4、2、1,將亮燈的數(shù)相加就是了。0也顯示為滅,可從時間上判別出來。
例:54.9顯示為
       ○○○○  開始
  ●○●○  5
       ●○●●  4
       ○●●○  9
為省事沒用數(shù)碼管,自己用的東西,簡單實用為好。四個發(fā)光管也合用一個限流電阻,單片機復(fù)位用的電容電阻也省了,晶振也省了。

工作原理:用手機充電器拆來的電路板為裝置提供5V電源。單片機AD轉(zhuǎn)換測電壓,每15秒進行一次。測得的電壓與設(shè)定的終止電壓比較,達到了就給繼電器模塊送一信號,收到信號繼電器就斷開充電器電源。單片機同時計時,滿十時也發(fā)出停充電信號,滿十天自動重啟單片機進行充電管理(暑假長時間人不在家也沒問題了)。
    為避免單片機工作電壓變動對電壓測量的影響,用TL431提供一個基準(zhǔn)電壓,P1.1對其進行AD轉(zhuǎn)換。電瓶電壓1/15分壓后用P1.0進行AD轉(zhuǎn)換,然后用下式算出電瓶電壓。
         十五分之一電瓶電壓:基準(zhǔn)電壓=電瓶AD值:基準(zhǔn)電壓的AD值
實測TL431穩(wěn)壓后是2.524伏,程序中采用的具體算法是:
      電瓶電壓伏特數(shù)=(電瓶AD值×37+電瓶AD值×86÷100)÷基準(zhǔn)電壓AD值   
被除數(shù)是兩個8位,除數(shù)是一個8位,我是用循環(huán)做減法的辦法來求商。具體見源碼。
      分壓電阻的調(diào)整,借助萬用表反復(fù)細心調(diào)精密可調(diào)電阻,使阻值之比為14:1。
材料:單片機STC12C5204AD  繼電器模塊,手機充電器,交流插座等。

電路原理圖:

單片機電路圖

單片機電路圖


接線示意圖:

組裝接線示意圖

組裝接線示意圖


制作過程:

裝飾邊角料做的外殼

裝飾邊角料做的外殼
IMG_2.jpg

拆解手機充電器

拆解手機充電器

繼電器模塊

繼電器模塊
IMG_5.jpg IMG_6.jpg IMG_7.jpg IMG_9.jpg

單片機正面

單片機正面

單片機背面

單片機背面

組裝好

組裝好
IMG_20180301_095125.jpg

單片機編程源碼如下:
  1.                                                                  ;1/15取樣,單片機工作電壓約5V,能測電壓達75V。
  2. ;改成最多充電10小時。十天后重啟。
  3. ;使用EEPROM保存溫度檔。                                                                                                                                                                                                ;2016年7月6日修改:
  4. ;使用汞開關(guān)設(shè)定溫度檔,使用EEPROM保存溫度檔。
  5. ;開機16秒內(nèi)(大約)按鍵設(shè)定溫度檔數(shù),若不按鍵,則默認上次的檔數(shù)。有1,2,3,4,5,6,7,8共八檔。
  6. ;設(shè)溫度檔后接通220V
  7. ;從溫度5度起為第1檔,10度為第2檔,15度為第3檔,……35度為第7檔,40度為第8 檔,0檔同第8檔。停下不按鍵約15秒自動進入下一環(huán)節(jié)。

  8. ;顯示電瓶伏特數(shù),按四燈亮、黑、十位、黑、個位、黑、小數(shù)位、黑,循環(huán)顯示。四燈亮和黑是半秒,數(shù)字是1秒
  9. ;20H.0設(shè)置溫度檔[WENDU]子程序控制位,初值賦1,在等待按鍵的子程序[xunhuan]中清0.僅在開機初用一次。
  10. ;20H.2 顯示控制位.走時置1,顯示后清0,使得半秒進行一次顯示。
  11. ;20H.3 秒標(biāo)志
  12. ;21H.0
  13. ;21H.2 [Tuoliu]程序控制位,使程序只運行一次。
  14. ;21H.3
  15. ;21H.4是電瓶正常標(biāo)志,初值賦1(正常),檢測到電瓶充滿或不正常將其清0,清0后要重啟才能置1.
  16. ;21H.6充電10小時標(biāo)志,初值為1,充電達10小時將其清0.清0后要重啟才能置1.
  17. ;22H.0 走時用的20ms標(biāo)志,在中斷置1,走時中清0。
  18. ;22H.3 時標(biāo)志
  19. ;22H.5 每15秒運行一次的標(biāo)志位,走時置1.
  20. ;22H.7
  21. ;用檢測到的電壓AD值與設(shè)定的終止電壓AD值進行比較,確定電瓶滿或不正常(電壓太低或無電瓶)關(guān)斷220V供電。
  22. ;開機接通220V,電瓶充滿(或不正常)關(guān)斷,充電10小時關(guān)斷,十天后單片機重啟。

  23. ;P1.0--A/D轉(zhuǎn)換
  24. ;P1.1--A/D轉(zhuǎn)換測TL431電壓
  25. ;P1.2--鍵,每按一次溫度檔數(shù)加1,在0--8之中循環(huán),停下不按鍵約15秒自動進入下一環(huán)節(jié)。
  26. ;P1.7,P1.6,P1.5,P1.4接LED做溫度檔顯示,點亮分別表示8,4,2,1,二進制數(shù)。
  27. ;P3.2--通過光耦控制220V通斷 0-通  1-斷
  28. ;***************

  29. ;***
  30. U_zhongzhixiao  EQU 5EH  ;終止電壓小數(shù)寄存器
  31. U_zhongzhizheng EQU 5FH  ;終止電壓整數(shù)寄存器
  32. JSHQ_WEI EQU 65H        ;顯示第幾位計數(shù)器
  33. XUN_JSHQ EQU 67H        ;循環(huán)次數(shù)
  34. wendudang  EQU  68H     ;溫度檔數(shù)
  35. v_ZH   EQU 5DH         ;電瓶伏特整數(shù)寄存器
  36. V_XAO  EQU 5CH         ;電瓶伏特小數(shù)寄存器
  37. TL431_AD   EQU  5BH     ;TL431的AD值
  38. TL431_AD1  EQU  5AH     ;TL431的AD值(第一次)
  39. jiace_adzhi1 EQU 58H    ;第一次檢測到的AD值
  40. ;xiu_adzhi  EQU  6CH     ;(修)終止電壓AD值
  41. Jiace_ADzhi EQU 59H     ;檢測AD值  檢測到的AD值
  42. JSHQ_15   EQU  6EH      ;15秒計數(shù)器
  43. JSHQ_20mS  EQU  70H     ;20mS計數(shù)器  計20mS的個數(shù)
  44. JSHQ_S     EQU  71H     ;半秒計數(shù)器
  45. JSHQ_M     EQU  72H     ;分計數(shù)器
  46. JSHQ_H     EQU  73H     ;時計數(shù)器
  47. ;60H,61H,62H,63H,64H 用在顯緩中
  48. beichushugao  equ  75h     ;被除數(shù)高位
  49. beichushudi  EQU  76H    ;被除數(shù)低位
  50. chushu     EQU  77H     ;除數(shù)
  51. zhengshang  EQU 78H     ;整數(shù)商
  52. XIAOSHUSHANG  EQU 79H    ;小數(shù)商
  53. YUSHU      EQU  7AH     ;余數(shù)
  54. LSSHU     EQU  7BH     ;臨時存
  55. DISHU  EQU 7CH         ;低數(shù) 第二次的被除數(shù)的低位
  56. GAOSHU  EQU 7DH        ;高數(shù) 第二次的被除數(shù)的高位

  57. ADC_CONTR EQU 0BCH     ;ADC控制寄存器
  58. ADC_RES   EQU 0BDH     ;A/D轉(zhuǎn)換結(jié)果寄存器
  59. P1ASF  EQU 09DH       ;p1口模擬功能控制寄存器
  60. WDT_CONTR EQU 0C1H    ;看門狗
  61. ;AUXR DATA 8EH         ;選擇1T與12T的寄存器

  62. IAP_CONTR EQU 0C7H      ;下載/復(fù)位控制器

  63. jian  EQU  p1.2         ;鍵
  64. kong  EQU  p3.2         ;控 220V   0-通  1-斷
  65. p1m1  equ  91h
  66. p1m0  equ  92h
  67. ;EEPROM有關(guān)的寄存器
  68. dat       equ     0C2H               
  69. drh       equ     0C3H               
  70. drl       equ     0C4H                  
  71. cmd       equ     0C5H               
  72. trig      equ     0C6H               
  73. contr     equ     0C7H
  74. ;****************

  75.         ORG   0000H
  76.         AJMP  START
  77.         ORG          000BH
  78.         LJMP  TIME_0
  79. ;        ORG   001BH

  80.         ORG   0030H
  81. START:
  82. ;其它初始化寫在此     
  83.    MOV P1M1,#00000011B
  84.    MOV P1M0,#00000000B    ;P1.0 P1.1兩個高阻輸入做AD     
  85.    MOV P1,#00001111B
  86.     setb kong          ;斷220V交流 設(shè)溫度檔后接通

  87.         MOV 22H,#00100000B    ;檢測標(biāo)志 1-檢 0-不檢 每15秒檢測AD一次和處理顯緩一次的標(biāo)志位,走時置1,處理顯緩后清0
  88.         MOV 21H,#01010000B   ;21h.4 電瓶 1-能充  0-不能充電(含無、充滿)  
  89.                                ;21H.6  初值1,充電10小時清0 。

  90. ;*用計數(shù)器0  初步設(shè)置定時中斷    20MS中斷  20毫秒@10.911MHz
  91.     MOV SP,#80H                     ;設(shè)置堆棧區(qū)域
  92. ;           ANL AUXR,#7FH                ;定時器時鐘12T模式  默認是12T模式 省略本句
  93.         MOV        TMOD,#00010001B         ;定時器0定時器1都是 16位
  94.         MOV        TL0,#0F7H
  95.         MOV        TH0,#0B8H               

  96.         SETB EA
  97.         SETB        ET0
  98.         SETB        TR0              ;開放中斷
  99.         
  100.         setb 20h.0          ;控制設(shè)置溫度檔程序的循環(huán)用
  101. ;*****************
  102. ;設(shè)置溫度檔   從EEPROM中讀出保存值,一段時間內(nèi)不按鍵,則使用該檔值;如按鍵則改之,停下不動,過會兒保存并啟用。
  103.      LCALL  DOUEEPROM    ;讀EEPROM中的保存值
  104. WENDU:
  105.      jnb 20H.0,WENDUret       ;0-跳

  106.      LCALL  doujian       ;讀鍵和健值處理
  107.      LCALL  XIANSHI       ;顯示
  108.      LCALL  xunhuan       ;循環(huán) 次數(shù)
  109.      AJMP WENDU
  110. WENDUret:
  111.      LCALL clear_write     ;先擦除EEPROM再寫EEPROM保存溫度檔,然后關(guān)閉EEPROM
  112.      nop
  113. ;********************
  114. ;設(shè)AD檔  據(jù)wendudang中數(shù)字,設(shè)定終止電壓
  115. ADdang:
  116.      MOV A,wendudang
  117.      cjne a,#1,ADdang1
  118.      MOV U_zhongzhizheng,57
  119.      mov U_zhongzhixiao,1      ;對應(yīng)是57.11V   5度以下
  120.         JMP ADdangRET     
  121. ADdang1:
  122.      cjne a,#2,ADdang2
  123.      MOV U_zhongzhizheng,56
  124.      mov U_zhongzhixiao,6        ;對應(yīng)是56.64V   10度以下
  125.         JMP ADdangRET
  126. ADdang2:
  127.      cjne a,#3,ADdang3
  128.      MOV U_zhongzhizheng,56
  129.      mov U_zhongzhixiao,1        ;對應(yīng)是56.16V   15度以下
  130.         JMP ADdangRET        
  131. ADdang3:
  132.      cjne a,#4,ADdang4
  133.      MOV U_zhongzhizheng,55
  134.      mov U_zhongzhixiao,6        ;對應(yīng)是55.68V   20度以下
  135.         JMP ADdangRET        
  136. ADdang4:
  137.      cjne a,#5,ADdang5
  138.      MOV U_zhongzhizheng,55
  139.      mov U_zhongzhixiao,2        ;對應(yīng)是55.20V   25度以下
  140.         JMP ADdangRET        
  141. ADdang5:
  142.      cjne a,#6,ADdang6
  143.      MOV U_zhongzhizheng,54
  144.      mov U_zhongzhixiao,7         ;對應(yīng)是54.72V   30度以下
  145.         JMP ADdangRET
  146. ADdang6:
  147.      cjne a,#7,ADdang7
  148.      MOV U_zhongzhizheng,54
  149.      mov U_zhongzhixiao,2         ;對應(yīng)是54.24V   35度以下
  150.         JMP ADdangRET
  151. ADdang7:
  152.      cjne a,#8,ADdang8
  153.      MOV U_zhongzhizheng,53
  154.      mov U_zhongzhixiao,7          ;對應(yīng)是53.76V   40度以下
  155.         JMP ADdangRET
  156. ADdang8:             ;剩下的就是 a=0了    同a=8 檔           
  157.      MOV U_zhongzhizheng,53
  158.      mov U_zhongzhixiao,7          ;對應(yīng)是53.76V   40度以下

  159. ADdangRET:
  160.      clr kong     ;接通220V
  161.         nop
  162.         NOP
  163.     ;進入主程序之前不能有RET,否則運行到此止。
  164. ;*****************
  165. ;主程序
  166. ZhuPRO:
  167.      LCALL PRO_ZOUSHI         ;走時   統(tǒng)計20mS的個數(shù),計時,設(shè)立半秒標(biāo)志、分標(biāo)志、時標(biāo)志 檢測標(biāo)志
  168.      LCALL  KAIJISHISHU   ;開機時數(shù)   開機10小時停充電,開機240小時重新啟動單片機。
  169. jnb 22h.5,zhu_a
  170.         clr 22h.5             ;每15秒一次的標(biāo)志位,走時置1,在此清0
  171.      lcall  jiaceTL431       ;檢測TL431做基準(zhǔn)電壓的AD值
  172.       LCALL  jiacesheding   ;檢測(電瓶)設(shè)定      測出電瓶AD
  173.      LCALL  JISUAN         ;計算 電瓶電壓伏特數(shù)=(電瓶AD值×37+電瓶AD值×0.5)÷基準(zhǔn)電壓AD值 求出伏特整數(shù)和小數(shù)
  174.      LCALL  probijiao    ;比較     電瓶電壓與基準(zhǔn)電壓做比較 標(biāo)記是否充滿電
  175.      lcall XIANhuan           ;顯緩 存放好要顯示的十位、個位、小數(shù)位
  176. zhu_a:
  177.      LCALL  xiu_V      ;顯示電瓶電壓
  178.      
  179.      lcall  PROKongZhi     ;控制      充滿斷電 十小時斷電
  180.      mov WDT_CONTR,#00111110B      ;喂狗
  181.      jmp  ZhuPRO

  182. ;*************************** WENDU 溫度 設(shè)溫度檔 *********************************
  183. ;DOUEEPROM    ;讀EEPROM中0000H處的保存值
  184. DOUEEPROM:
  185.                     mov     contr,#84h ;設(shè)定操作時間
  186.                     mov     cmd,#01h   ;設(shè)定讀操作
  187.                     mov     drl,#00h     ;設(shè)定存儲單元地址低四位
  188.                     mov     drh,#00h    ;設(shè)定存儲單元地址高四位 這里設(shè)0000h,也可選用其他單元
  189.                     mov     trig,#5Ah  ;準(zhǔn)備觸發(fā)
  190.                     mov     trig,#0A5h  ;觸發(fā)
  191.                     nop
  192.                     mov     wendudang,dat         ;讀數(shù)據(jù)寫到RAM指定處
  193. ;                    mov     wendudang,A        ;讀數(shù)據(jù)寫到RAM指定處

  194. DOUEEPROMret:
  195.         ret
  196. ;*************
  197. ;doujian       ;讀鍵
  198. doujian:
  199.          setb jian
  200.          nop
  201.          nop
  202.          lcall DELAY         
  203.          JB jian,doujianret          ;未按下(p1.2),  1-跳
  204.          lcall DELAY                ;延時
  205.          JB jian,doujianret
  206.          inc wendudang               ;溫度檔加1
  207.          mov XUN_JSHQ,#0            ;循環(huán)計數(shù)清0
  208.          mov a,#9
  209.          cjne a,wendudang,doujian_1  ; 分0,1,2,3,4,5,6,7,8九檔,最高8檔
  210.          mov wendudang,#0

  211. doujian_1:
  212.          nop
  213.          jb jian,doujian_1       ;1-跳 等待釋放鍵
  214.          lcall DELAY
  215.          lcall DELAY
  216. doujianret:
  217.    ret

  218. ;****************
  219. ;XIANSHI    ;顯示
  220. XIANSHI:
  221.         mov a,wendudang
  222.         cpl a          ;取反
  223.         swap a         ;高低四位交換
  224.         ANL A,#11110000B   ;獲高四位
  225.         mov R0,a

  226.         mov a,p1
  227.         anl a,#00001111B   ;獲低四位
  228.         orl a,R0           ;整合高低八位
  229.         mov p1,a           ;驅(qū)動LED
  230. XIANSHIret:
  231.     ret
  232. ;****************   
  233. ;xunhuan       ;循環(huán) 次數(shù)
  234. xunhuan:
  235.       lcall DELAY      ;延時
  236.       INC XUN_JSHQ     ;循環(huán)計數(shù)加1
  237.       mov a,XUN_JSHQ
  238.       cjne a,#200,xunhuanret
  239.       mov XUN_JSHQ,#0
  240.       clr 20h.0         ;停止按鍵后循環(huán)200次約??秒,結(jié)束設(shè)溫度檔程序

  241. xunhuanret:
  242.      RET
  243. ;******************
  244. ;延時 0.04秒
  245.     DELAY:
  246.             MOV     R7,#250
  247.     D1:     MOV     R6,#250
  248.                     DJNZ    R6,$
  249.                     DJNZ    R7,D1
  250.             RET
  251. ;*****************
  252. ;先擦除再寫入,然后關(guān)閉
  253. clear_write:
  254.               mov    contr,#84h  ;設(shè)定操作時間
  255.               mov    cmd,#03h    ;設(shè)定擦除操作
  256.               mov    drl,#00h    ;設(shè)定存儲單元地址低四位
  257.               mov    drh,#00h    ;設(shè)定存儲單元地址高四位 這里設(shè)0000h

  258.               mov    trig,#5AH   ;準(zhǔn)備觸發(fā)      
  259.               mov    trig,#0A5h   ;觸發(fā)
  260.               nop
  261.               nop
  262. ;---------寫-------------------
  263. write:
  264.                    mov     contr,#84h   ;設(shè)定操作時間
  265.                    mov     cmd,#02h     ;設(shè)定寫操作
  266.                    mov     drl,#00h     ;設(shè)定存儲單元地址低四位
  267.                    mov     drh,#00h     ;設(shè)定存儲單元地址高四位 這里設(shè)0000h
  268. ;      MOV A,wendudang
  269.                    mov     dat,wendudang         ;wendudang中為準(zhǔn)備寫入的數(shù)據(jù)
  270.                    mov     trig,#5AH    ;準(zhǔn)備觸發(fā)
  271.                    mov     trig,#0A5H   ;觸發(fā)
  272.                    nop
  273.                    nop
  274. ;=========關(guān)閉EEPROM====================
  275. off:  
  276.           mov     contr,#0     ;禁止操作
  277.           mov     cmd,#0   ;去除操作命令
  278.           mov     trig,#0   ;防止命令誤觸發(fā)
  279.           mov    drl,#0         ;指向非EEPROM區(qū)
  280.           mov    drh,#80H        ;指向非EEPROM區(qū)
  281.            ret
  282.    
  283. ;*********************************** 充電有關(guān)的計時 ******************************



  284. ;****************
  285. ;走時   統(tǒng)計20mS的個數(shù),計時,設(shè)立半秒標(biāo)志、分標(biāo)志、時標(biāo)志
  286. PRO_ZOUSHI:
  287.      JNB 22H.0,PROARET     ;20mS標(biāo)志位
  288.      INC JSHQ_20MS
  289.      CLR 22H.0   
  290.      mov A,#25             ;25個20mS為半秒
  291.      CJNE A,JSHQ_20mS,PROARET
  292.      MOV JSHQ_20mS,#0
  293.      inc jshq_S
  294.      setb 20h.2         ;控制顯示的半秒標(biāo)志
  295. PROA_1:
  296.   MOV A,#30
  297.   CJNE A,JSHQ_S,PROARET
  298.        MOV JSHQ_S,#0
  299.   SETB 22H.5   ;15秒檢測一次
  300.   INC JSHQ_15
  301.   MOV A,#4
  302.   CJNE A,JSHQ_15,PROARET
  303.      MOV JSHQ_15,#0
  304.      INC JSHQ_M
  305.      MOV A,#60             ;60分為1小時
  306.      CJNE A,JSHQ_M,PROARET
  307.      MOV JSHQ_M,#0
  308.      setb 22h.3       ;時標(biāo)志

  309. PROARET:
  310.      RET

  311. ;********************
  312. ;開機時數(shù)   開機10小時停充電,開機240小時重新啟動單片機。
  313. KAIJISHISHU:
  314.     JNB 22H.3,KAIJISHISHURET
  315.     clr 22h.3
  316.     INC JSHQ_H
  317.     MOV A,#10         ;最多充電10小時
  318.     CJNE A,JSHQ_H,KAIJISHISHU_1
  319.     CLR 21H.6        ;初值1,充電10小時清0。
  320.     setb kong          ;斷220V交流
  321.     JMP KAIJISHISHURET
  322. KAIJISHISHU_1:
  323.     mov a,#240         ;十天重啟
  324.     cjne a,jshq_h,KAIJISHISHURET
  325.     MOV IAP_CONTR,#00100000B  ;熱重啟
  326. KAIJISHISHURET:
  327.      RET
  328. ;*******************
  329. ;檢測設(shè)定    每15秒進行一次     兩次測電壓相同 確定占空比  溫度檢測沒使用
  330. jiacesheding:
  331. ;          MOV P1,#11111111B           ;關(guān)顯示 再延時 防止電壓波動對AD轉(zhuǎn)換的影響
  332. ;          LCALL DELAY                 ;延時0.4秒
  333. dianya:
  334.       lcall PRO_ad   ;AD轉(zhuǎn)換測電瓶電壓
  335.       MOV jiace_adzhi1,jiace_adzhi
  336.       mov jiace_adzhi,#0
  337.       lcall PRO_ad  ;AD轉(zhuǎn)換測電瓶電壓  
  338. BiJiao:                 ;比較兩次測電壓結(jié)果 同-進入下一步 不同-重測
  339.       mov a,jiace_adzhi1
  340.       cjne a,jiace_adzhi,dianya
  341.       
  342. jiaceshedingret:
  343.      ret

  344. ;********************
  345. ;AD轉(zhuǎn)換測電瓶電壓
  346. PRO_ad:
  347.       MOV P1ASF,#0000001B   ;P1.0做AD檢測
  348.      MOV ADC_RES,#0                ;轉(zhuǎn)換結(jié)果寄存器清零
  349.      MOV ADC_CONTR,#11100000B  
  350.      nop
  351.      nop
  352.      nop
  353.      nop
  354.      mov a,#11101000b
  355.      MOV ADC_CONTR,A            ;開始A/D轉(zhuǎn)換
  356.       NOP                        ;在質(zhì)詢之前一定等候
  357.       NOP
  358.       NOP
  359.       NOP
  360. WAIT:      
  361.     MOV        A,ADC_CONTR        ;等候完成的標(biāo)志
  362.     JNB        ACC.4,WAIT        ;轉(zhuǎn)換完成標(biāo)志位 不是1就轉(zhuǎn)           
  363.     MOV        ADC_CONTR,#01100000B                ;關(guān)轉(zhuǎn)換 清標(biāo)志位  
  364.    
  365.     MOV jiace_adzhi,ADC_RES       ;讀出AD值保存

  366. PRO_adRET:
  367.       RET

  368. ;********************
  369. jiaceTL431:
  370. ;          MOV P1,#11111111B           ;關(guān)顯示 再延時 防止電壓波動對AD轉(zhuǎn)換的影響
  371. ;          LCALL DELAY                 ;延時0.4秒
  372. dianyaTL:
  373.       lcall prTL431_ad   ;AD轉(zhuǎn)換測TL431的AD
  374.       MOV TL431_AD1,TL431_AD
  375.       mov TL431_AD,#0
  376.       lcall prTL431_ad  ;AD轉(zhuǎn)換測TL431的AD
  377. BiJiaoTL:                 ;比較兩次測電壓結(jié)果 同-進入下一步 不同-重測
  378.       mov a,TL431_AD1
  379.       cjne a,TL431_AD,dianyaTL

  380. jiaceTL431ret:
  381.      ret
  382. ;******************
  383. ;AD轉(zhuǎn)換測TL431
  384. prTL431_ad:
  385.       MOV P1ASF,#0000010B   ;P1.1做AD檢測
  386.      MOV ADC_RES,#0                ;轉(zhuǎn)換結(jié)果寄存器清零
  387.      MOV ADC_CONTR,#11100001B  
  388.      nop
  389.      nop
  390.      nop
  391.      nop
  392.      mov a,#11101001b
  393.      MOV ADC_CONTR,A            ;開始A/D轉(zhuǎn)換
  394.       NOP                        ;在質(zhì)詢之前一定等候
  395.       NOP
  396.       NOP
  397.       NOP
  398. TL431WAIT:      
  399.     MOV        A,ADC_CONTR        ;等候完成的標(biāo)志
  400.     JNB        ACC.4,TL431WAIT        ;轉(zhuǎn)換完成標(biāo)志位 不是1就轉(zhuǎn)           
  401.     MOV        ADC_CONTR,#11100001B                ;關(guān)轉(zhuǎn)換 清標(biāo)志位  
  402.    
  403.     MOV TL431_AD,ADC_RES       ;讀出AD值保存

  404. TL431_adRET:
  405.       RET

  406. ;*******************
  407. ;比較 ;通過電瓶電壓整數(shù)與終止電壓整數(shù)比較,電瓶電壓小數(shù)與終止電壓小數(shù)比較,確定并標(biāo)記電瓶有無充滿.
  408. probijiao:
  409.       clr c
  410.       mov a,v_ZH   ;電瓶電壓整數(shù)
  411.       CJNE A,U_zhongzhizheng,bijiao_1     ;電瓶電壓整數(shù)與終止電壓整數(shù)比較
  412.       MOV A,V_XAO
  413.       CJNE A,U_zhongzhixiao,bijiao_1     ;電瓶電壓小數(shù)與終止電壓小數(shù)比較
  414.       
  415. bijiao_0:      
  416.        clr 21h.4     ;電瓶正常標(biāo)志位  1--正常  0--充滿(或不能充電)   
  417.        JMP bijiao_ret
  418. bijiao_1:
  419.       JC bijiao_0  ;超過終止電壓 C=1
  420.       
  421. bijiao_ret:
  422.       ret      
  423.       
  424. ;******************
  425. ; ;控制充斷電
  426. PROKongZhi:
  427.       jb 21h.4,pro_a     ;電瓶正常標(biāo)志 1-正常 0-不正常 無電瓶 或充滿
  428.       setb kong      ;通過光耦控制220V通斷 0-通  1-斷
  429. pro_a:
  430.       JB 21H.6,PROKongZhiRET                     
  431.       setb kong      ;通過光耦控制220V通斷 0-通  1-斷      
  432. PROKongZhiRET:
  433.       RET
  434. ;****************
  435. ;顯緩
  436. XIANhuan:
  437.        MOV A,v_ZH    ;電瓶伏特整數(shù)
  438.        MOV B,#10
  439.        DIV AB
  440.        MOV 61H,B            ;個位
  441.        MOV 60H,A            ;十位
  442.        MOV 62H,V_XAO        ;小數(shù)
  443.       
  444.        MOV 63H,#0          ;黑屏的數(shù)字
  445.        mov 64h,#00001111B   ;四燈全亮

  446. XIANhuan_ret:
  447.        ret

  448. ;***************  
  449. ; xiu_V 顯伏特數(shù) 十、個位、小數(shù)位分別顯示,每位顯示2秒,黑屏1秒,三位顯示完黑屏3秒。
  450. xiu_V:
  451.        JNB 20H.2,XianZ   ;每秒運行一次
  452.        CLR 20H.2

  453.       INC JSHQ_WEI
  454.        MOV A,#11
  455.        CJNE A,JSHQ_WEI,xiu_V_1
  456.        MOV JSHQ_WEI,#0      
  457.         mov R1,60H           ;顯十位
  458.         LCALL PROXIAN
  459.       JMP xiu_VRET
  460. xiu_V_1:  
  461.         MOV A,#1            ;顯示十位
  462.        CJNE A,JSHQ_WEI,xiu_V_2
  463.        nop                  ;保持原顯示就行了
  464.         ;mov R1,60H
  465.         ;LCALL PROXIAN
  466. XianZ:  jmp  xiu_VRET           ;中間跳板
  467. xiu_V_2:  
  468.         MOV A,#2     ;黑屏
  469.        CJNE A,JSHQ_WEI,xiu_V_3      
  470.         mov R1,63H
  471.         LCALL PROXIAN
  472.       JMP xiu_VRET        
  473. xiu_V_3:  
  474.         MOV A,#3     ;顯示個位
  475.        CJNE A,JSHQ_WEI,xiu_V_4     
  476.         mov R1,61H
  477.         LCALL PROXIAN
  478.       JMP xiu_VRET        
  479. xiu_V_4:  
  480.         MOV A,#4     ;顯示個位
  481.        CJNE A,JSHQ_WEI,xiu_V_5     
  482.         nop                  ;保持原顯示就行了
  483.         ;mov R1,61H
  484.         ;LCALL PROXIAN
  485.       JMP xiu_VRET        
  486. xiu_V_5:  
  487.         MOV A,#5     ;黑屏
  488.        CJNE A,JSHQ_WEI,xiu_V_6      
  489.         mov R1,63H
  490.         LCALL PROXIAN
  491.       JMP xiu_VRET        
  492. xiu_V_6:  
  493.         MOV A,#6    ;顯示小數(shù)位
  494.        CJNE A,JSHQ_WEI,xiu_V_7     
  495.         mov R1,62H
  496.         LCALL PROXIAN
  497.       JMP xiu_VRET        
  498. xiu_V_7:  
  499.         MOV A,#7     ;顯示小數(shù)位
  500.        CJNE A,JSHQ_WEI,xiu_V_8     
  501.         nop                  ;保持原顯示就行了
  502.         ;mov R1,62H
  503.         ;LCALL PROXIAN
  504.       JMP xiu_VRET        
  505. xiu_V_8:  
  506.         MOV A,#8     ;黑屏
  507.        CJNE A,JSHQ_WEI,xiu_V_9      
  508.         mov R1,63H
  509.         LCALL PROXIAN
  510.       JMP xiu_VRET        
  511. xiu_V_9:  
  512.         MOV A,#9     ;四燈全亮
  513.        CJNE A,JSHQ_WEI,xiu_V_10     
  514.         mov R1,64H
  515.         LCALL PROXIAN
  516.        JMP xiu_VRET      
  517. xiu_V_10:
  518.        nop                   ;保持原顯示就行了
  519.         ;mov R1,63H     ;黑屏
  520.         ;LCALL PROXIAN

  521. xiu_VRET:
  522.        RET
  523. ;***************

  524. ;顯示     
  525. PROXIAN:
  526.         MOV A,R1
  527.         cpl a          ;取反
  528.         swap a         ;高低四位交換
  529.         ANL A,#11110000B   ;獲高四位
  530.         mov R0,a

  531.         mov a,p1
  532.         anl a,#00001111B   ;獲低四位
  533.         orl a,R0           ;整合高低八位
  534.         mov p1,a           ;驅(qū)動LED     
  535.         RET
  536. ;*******************************
  537. ;計算 jì suàn   電瓶電壓伏特數(shù)=(電瓶AD值×37+電瓶AD值×0.86)÷基準(zhǔn)電壓AD值   TL431穩(wěn)壓后是2.524伏
  538. ;求出伏特整數(shù)和一位小數(shù)
  539. JISUAN:
  540.       MOV v_ZH,#0        ;存伏特整數(shù) 先清0
  541.       mov V_XAO,#0       ;伏特小數(shù) 先清0   
  542.       mov r2,#0
  543.       mov r3,#0
  544. ;電瓶AD值×37      
  545.       MOV A,Jiace_ADzhi  ;電瓶AD值
  546.       MOV B,#37
  547.       MUL AB
  548.       MOV R2,A          ;37倍的積的低8位 存R2
  549.       MOV R3,B          ;37倍的積的高8位 存R3
  550. ;電瓶AD值×86     
  551.       MOV A,Jiace_ADzhi
  552.       mov b,#86        ;
  553.       MUL AB           ;86倍的積高位在B低位在A 高位在B
  554. ;除以100
  555.       MOV beichushugao,B     ;被除數(shù)高位
  556.       MOV beichushudi,A      ;被除數(shù)低位
  557.       MOV chushu,#100        ;除數(shù)
  558.       mov zhengshang,#0      ;整數(shù)商
  559.       mov XIAOSHUSHANG,#0    ;小數(shù)商
  560.       mov YUSHU,#0           ;余數(shù)
  561.       
  562.   LCALL PROCHU
  563.       ;電瓶AD值×0.86的整數(shù)部分已經(jīng)在zhengshang
  564. ;電瓶AD值×37與電瓶AD值×0.86兩積之和
  565.       mov a,zhengshang
  566.       ADD A,R2                 
  567.       MOV R2,A
  568.       JNC  JISUAN_1     ;0-跳
  569.       INC R3
  570.       clr c            ;以上完成了(電瓶AD值×37+電瓶AD值×0.86)  值的高位在R3,低位在R2
  571. JISUAN_1:            
  572. ;下面用減法代除法做[÷基準(zhǔn)電壓AD值]部分
  573.       MOV beichushugao,R3     ;被除數(shù)高位
  574.       MOV beichushudi,R2     ;被除數(shù)低位
  575.       MOV chushu,TL431_AD        ;除數(shù)
  576.       mov zhengshang,#0
  577.       mov XIAOSHUSHANG,#0
  578.       mov YUSHU,#0      
  579.       
  580. LCALL PROCHU
  581.       MOV v_ZH,zhengshang     ;伏特整數(shù)
  582.       MOV V_XAO,XIAOSHUSHANG  ;伏特小數(shù)  
  583. RET
  584. ;*********************
  585. ;除法 被除數(shù)有高8位低8位,除數(shù)只有8位,商有8位整數(shù)1位小數(shù)
  586. ;beichushugao     ;被除數(shù)高位
  587. ;beichushudi      ;被除數(shù)低位
  588. ;chushu        ;除數(shù)
  589. ;zhengshang  EQU 78H     ;整數(shù)商
  590. ;XIAOSHUSHANG  EQU 79H    ;小數(shù)商
  591. ;YUSHU      EQU  7AH     ;余數(shù)
  592. ;LSSHU     EQU  7BH     ;臨時存
  593. ; DISHU   低位 第二次的被除數(shù)低位
  594. ;GAOSHU   高位 第二次的被除數(shù)高位
  595. PROCHU:
  596.       MOV A,#0
  597.       CJNE A,beichushugao,PROCHU_0   ;高位不是0 跳
  598.       MOV A,beichushudi
  599.       jmp PROCHU_A        ;跳到高位是0,求低位的商
  600. PROCHU_0:              ;求高位不是0部分的商
  601.       MOV A,beichushudi
  602. PROCHU_01:      
  603.       SUBB A,chushu
  604.       INC zhengshang
  605.       JNC PROCHU_01      
  606.       DJNZ beichushugao,PROCHU_01
  607. PROCHU_A:            ;高位是0,求低位的商
  608.     ;  MOV  LSSHU,A    ;備份
  609.       SUBB A,chushu
  610.       INC zhengshang
  611.       JNC PROCHU_A     ;c=0 循環(huán)再減
  612.       CLR C            ;有借位,表示多減了一次
  613.    ;   DEC zhengshang   ;恢復(fù)
  614.    ;   MOV A,LSSHU      ;恢復(fù)
  615.      ;*************求小數(shù)**********
  616.       MOV B,#10        ;求小數(shù),先將被除數(shù)乘10
  617.       MUL AB
  618.       MOV GAOSHU,B       ;高位
  619.       MOV DISHU,A      ;低位
  620. PROCHU_B:
  621.       MOV A,#0
  622.       CJNE A,GAOSHU,PROCHU_B0
  623.       MOV A,DISHU
  624.       JMP PROCHU_C   ;跳到高位是0 求低位商
  625. PROCHU_B0:
  626.       MOV A,DISHU
  627. PROCHU_B01:
  628.       SUBB A,chushu
  629.       INC XIAOSHUSHANG
  630.       JNC PROCHU_B01      
  631.       DJNZ GAOSHU,PROCHU_B01
  632. PROCHU_C:    ;高位是0 求低位商           
  633.       MOV  LSSHU,A
  634.       SUBB A,chushu
  635.       INC XIAOSHUSHANG
  636.       JNC PROCHU_C     ;c=0 循環(huán)再減
  637.       CLR C            ;有借位,表示多減了一次
  638. ;      DEC XIAOSHUSHANG   ;恢復(fù)   實測顯示數(shù)據(jù)偏小所以刪此句
  639.       MOV A,LSSHU      ;恢復(fù)
  640.       MOV YUSHU,A    ;余數(shù)
  641. ret
  642. ;****************      
  643.       
  644. ;**********************************************************************
  645. TIME_0:   ;20毫秒@10.911MHz
  646.         PUSH        ACC
  647.         PUSH        PSW
  648.         MOV        TL0,#0F7H        
  649.         MOV        TH0,#0B8H
  650.         SETB 22H.0          ;20mS標(biāo)志  專供走時用
  651.         POP        PSW
  652.         POP        ACC
  653.         RETI
  654. ;************************
  655. pppuuu:
  656. nop
  657. nop
  658. nop
  659. nop
  660. nop
  661. nop
  662. nop
  663. nop
  664.   nop
  665. nop
  666. nop
  667. nop
  668.   nop
  669. nop
  670. nop
  671. nop
  672.   nop
  673. nop
  674. nop
  675. nop
  676.   nop
  677. nop
  678. nop
  679. nop
  680.   nop
  681. nop
  682. nop
  683. nop
  684.   nop
  685. nop
  686. nop
  687. nop
  688.   nop
  689. nop
  690. nop
  691. nop
  692.   nop
  693. nop
  694. nop
  695. nop
  696.   nop
  697. nop
  698. nop
  699. nop
  700.   nop
  701. nop
  702. nop
  703. nop
  704.   nop
  705. nop
  706. nop
  707. nop
  708. lcall START
  709. nop
  710. nop
  711. nop

  712. ……………………

  713. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png
所有資料51hei提供下載:
源碼和hex.rar (8.02 KB, 下載次數(shù): 41)

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:286600 發(fā)表于 2018-3-3 10:34 | 顯示全部樓層
若配個脈沖電源對電瓶充電,這是個很好的配件。普通充電器用的是開關(guān)電源無脈沖。老式變壓器整流不濾波是脈沖,但要注意變壓器輸出電壓不要太高了,據(jù)我的經(jīng)驗48V電瓶不要超過46伏,45V比較合適,46×1.41已經(jīng)超過普通充電器轉(zhuǎn)燈前的電壓了。(有的說法是變壓器次級輸出電壓要比電瓶標(biāo)稱值高1到2V,我不認可。)
      普通充電器轉(zhuǎn)燈后電壓是55.6V左右,冬天不用此保護也可。夏天環(huán)境溫度高,電瓶充到55.6V就過充了。此保護器第8檔,充到53.7V就停充電,可有效地進行保護。
     鉛電瓶有負溫度系數(shù),冬天充電終止電壓高些,夏天低些。
回復(fù)

使用道具 舉報

ID:265635 發(fā)表于 2018-3-3 15:12 | 顯示全部樓層
全匯編,贊一下!
回復(fù)

使用道具 舉報

ID:286600 發(fā)表于 2018-3-8 10:39 | 顯示全部樓層
少有人關(guān)注本貼。
1、看來群里人真富,都開汽車沒人騎電動車了。
2、用匯編的人也越來越少了。
回復(fù)

使用道具 舉報

ID:162136 發(fā)表于 2018-3-21 16:04 | 顯示全部樓層
看到全是匯編,我贊一個。
回復(fù)

使用道具 舉報

ID:295097 發(fā)表于 2018-3-21 16:26 | 顯示全部樓層
什么時候才能變成你這么厲害

回復(fù)

使用道具 舉報

ID:91721 發(fā)表于 2019-6-25 11:57 | 顯示全部樓層
全匯編,贊一下!
回復(fù)

使用道具 舉報

ID:165363 發(fā)表于 2019-6-26 09:43 | 顯示全部樓層
匯編的啊,有點難看懂。
回復(fù)

使用道具 舉報

ID:159857 發(fā)表于 2020-5-14 21:49 | 顯示全部樓層

全匯編,贊一下!樓主厲害!
回復(fù)

使用道具 舉報

ID:733231 發(fā)表于 2020-5-18 19:53 | 顯示全部樓層


全匯編,贊一下!樓主厲害!向你學(xué)習(xí)~~~
回復(fù)

使用道具 舉報

ID:58628 發(fā)表于 2025-4-9 11:10 來自手機 | 顯示全部樓層
有沒有誰有網(wǎng)上賣的那種電動車充電保護器,檢測輸入側(cè)的電流原理種程序
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表