找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10948|回复: 22
收起左侧

用TP4056和STC8G单片机做一个带电压显示的锂电充电器电路+程序

  [复制链接]
ID:147710 发表于 2020-7-8 20:24 | 显示全部楼层 |阅读模式
买了几个4056充电板,一个才几毛钱:
4056.jpg


立创EDA网页版画PCB:
sch.jpg

带PCB照片转换,5元打样,DIY爱好者的福音,良心立创!
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
pcb1.jpg
pcb.jpg

拆了一个4056锂电板,把零件搬过来,拨动开关调节电流大小:
正反面.jpg

看个全貌:
整体.jpg

程序:
soft.jpg

按下按键,LED显示电池电压:
检测.jpg

套上透明热缩管,开始工作了:
36149bc28bdc4b282fd2661ffd530ce.jpg

单片机源程序如下:
  1. /******* 充电器_LED电压表STC8G1K08_TSSOP20 **********/
  2. /*
  3. 功能:   
  4. 通电LED显示芯片供电电压
  5. */
  6. #include "STC8.h"
  7. #include "intrins.h"
  8. #define ADCTIM   (*(unsigned char volatile xdata*)0xfea8) //ADC内部时序控制寄存器
  9. #define ON 0
  10. #define OFF 1
  11. u16 *BGV;                //内部参考电压
  12. void ADC_Init();//ADC初始化
  13. /*----------------------------
  14. 初始化ADC,ADC_Init()
  15. ----------------------------*/
  16. void ADC_Init() //选择第15通道,测供电电压
  17. {
  18.     P_SW2|=0x80;
  19.     ADCTIM=0x3f;        //设置ADC内部时序控制寄存器
  20.     P_SW2&=0x7f;
  21.     ADCCFG=0x2f;        //ADC时钟
  22.     ADC_CONTR=0x8f;        //使能ADC,选择第15通道

  23. }
  24. //
  25. u16 ADCRead()
  26. {
  27.     static u16 res;
  28.     ADC_CONTR|=0x40;//启动AD转换
  29.     _nop_();                        //等待4个NOP
  30.     _nop_();
  31.     while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成标记ADC_FLAG=2
  32.     ADC_CONTR &= ~ADC_FLAG;         //清完成标记
  33.     res=(ADC_RES<<8)|ADC_RESL;
  34.     return res;
  35. }   
  36. //
  37. u16 ADC_GET_vcc()//读取15通道,测供电电压
  38. {
  39.     static u16 res;
  40.     static u16 vcc;
  41.     static u8 i;   
  42.     //BGV=(u16 idata*)0xef;//从RAM读取
  43.     BGV=(u16 code*)0x1ff7;//从ROM读取    ,要勾选“在程序区结束处添加重要参数”
  44.     ADC_Init();
  45.     ES=1;
  46.     ADCRead();ADCRead();//前两次丢弃
  47.     res=0;
  48.     for(i=0;i<8;i++)    //读8次取平均值
  49.     {
  50.         res+=ADCRead();   
  51.     }
  52.     res>>=3;
  53.     vcc=(1023L**BGV)/res; //10位ADC计算VREF电压,mv
  54.     //vcc=(int)(4096**BGV/RES); //12位ADC计算VREF电压
  55.     return vcc;
  56. }
  57. //
  58. void LED_Service(void)
  59. {
  60.     static u32 VCC_Temp=0;
  61.     VCC_Temp=ADC_GET_vcc();
  62.     if(VCC_Temp<3400)          P55=OFF;  else   P55=ON;
  63.     if(VCC_Temp<3500)          P54=OFF;  else   P54=ON;
  64.     if(VCC_Temp<3600)         P17=OFF;  else   P17=ON;
  65.     if(VCC_Temp<3700)           P16=OFF;  else   P16=ON;
  66.     if(VCC_Temp<3800)              P15=OFF;  else   P15=ON;
  67.     if(VCC_Temp<3900)             P14=OFF;  else   P14=ON;
  68.     if(VCC_Temp<4000)              P13=OFF;  else   P13=ON;
  69.     if(VCC_Temp<4100)              P12=OFF;  else   P12=ON;
  70. }
  71. //
  72. void main(void)
  73. {
  74.     //端口设置
  75.     P1M1=B0000_0000;   //00上拉准双向口/10浮空输入  
  76.     P1M0=B0000_0000;   //11开漏输出/01推挽输出   
  77.     P5M1=B0000_0000;   //00上拉准双向口/10浮空输入
  78.     P5M0=B0000_0000;   //11开漏输出/01推挽输出
  79.     ADC_Init();
  80.     while (1)
  81.     {
  82.         LED_Service();
  83.     }
  84. }
  85. //
复制代码

程序:自行复制

51hei.png
立创PCB json文件:
PCB.rar (46.48 KB, 下载次数: 136)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:92556 发表于 2020-9-5 02:34 | 显示全部楼层
不应该是1024L吗,你怎么是1023L????
回复

使用道具 举报

ID:147710 发表于 2020-9-5 15:56 | 显示全部楼层
qwa1234 发表于 2020-9-5 02:34
不应该是1024L吗,你怎么是1023L????

看得真仔细,强!
官方有1023和1024两个版本的例程,个人觉得10位最大就是3FF=1023,所以就选1023了。
1023.jpg




回复

使用道具 举报

ID:88256 发表于 2020-9-5 16:10 | 显示全部楼层
手工焊的吗?很漂亮
回复

使用道具 举报

ID:147710 发表于 2020-9-6 09:37 | 显示全部楼层
谢谢!主要是洗板水的功劳。
回复

使用道具 举报

ID:517951 发表于 2020-11-15 17:35 | 显示全部楼层
不错,值得学习。51hei有你更精彩!!
回复

使用道具 举报

ID:239852 发表于 2020-11-19 15:23 | 显示全部楼层
按上以程序,我读出BGV电压是2.39V,不知错在哪里?
回复

使用道具 举报

ID:147710 发表于 2020-11-19 20:16 | 显示全部楼层
要在下载程序中勾选“在程序区结束处添加重要参数” 51hei截图-46433572.jpg

回复

使用道具 举报

ID:620287 发表于 2020-11-22 23:44 来自手机 | 显示全部楼层
用tp5100和at89c52做一个7.4伏的锂电充电器吗
回复

使用道具 举报

ID:369412 发表于 2020-11-24 18:30 | 显示全部楼层
.json打不开
回复

使用道具 举报

ID:314865 发表于 2021-7-19 15:32 | 显示全部楼层
正好在用STC8G做检测电量,学习了,感谢楼主分享
回复

使用道具 举报

ID:418906 发表于 2021-10-9 23:50 | 显示全部楼层
DD.C(11): error C129: missing ';' before '*'
回复

使用道具 举报

ID:418906 发表于 2021-10-9 23:51 | 显示全部楼层
怎么编译有错误
回复

使用道具 举报

ID:606226 发表于 2022-6-26 16:40 | 显示全部楼层
这几天我也做一个,也是用STC8G1K08A做的 (8PIN),我用的是0.96 OLED做为显示,也是用TP4056充电的,我觉得这样简单一些,显示好看一些
回复

使用道具 举报

ID:229641 发表于 2022-6-26 19:20 来自手机 | 显示全部楼层
c00156155 发表于 2022-6-26 16:40
这几天我也做一个,也是用STC8G1K08A做的 (8PIN),我用的是0.96 OLED做为显示,也是用TP4056充电的,我觉 ...

看看啥样的?
回复

使用道具 举报

ID:606226 发表于 2022-6-27 08:00 | 显示全部楼层

在做外壳,做好了发出来
回复

使用道具 举报

ID:607312 发表于 2022-7-16 18:28 | 显示全部楼层
pcb文件用AD是打不开的,只能用立创打开
回复

使用道具 举报

ID:97678 发表于 2022-7-18 12:21 | 显示全部楼层

能够发出来看看吗?
回复

使用道具 举报

ID:936755 发表于 2022-9-27 16:46 | 显示全部楼层
可以刚好学下STC8G
回复

使用道具 举报

ID:1112603 发表于 2024-4-18 08:46 | 显示全部楼层
单片机AD数模转换学习中,很不错的实例。
回复

使用道具 举报

ID:1110945 发表于 2024-4-18 17:54 | 显示全部楼层
有做省电设计吗?不充电的时候电池接上去耗电多少?
STC8的stop模式带唤醒不到2微安,可以考虑利用起来。
回复

使用道具 举报

ID:102702 发表于 2024-5-4 16:31 | 显示全部楼层
楼主你好,源文件编译不了,出现以下提示,有两个地方代码有问题

err2.JPG


指向了第11行这里,应该怎么改呢?
err.JPG

第9行代码也有问题
err3.JPG

回复

使用道具 举报

ID:102702 发表于 2024-5-5 00:34 | 显示全部楼层
楼主你这源程序编译不了,能发个能正常运行的HEX文件吗?谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表