找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1089|回复: 6
打印 上一主题 下一主题
收起左侧

如何用单片机来做充电指示灯(4颗灯)

[复制链接]
跳转到指定楼层
楼主
ID:959051 发表于 2022-7-20 09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用单片机ADC检测出来了电池电压,想通过插充电器时检测电池电量并且通过指示灯指示,同时最后一颗灯闪烁,表示正在充电,充满后指示灯不闪烁。放电也会显示指示灯,电量从高到低,通过指示灯来显示。请问这个判断代码该如何写呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2022-7-20 17:07 | 只看该作者
1、将电池正常电压区间从低到高分段,再设一个低和满;
2、用单片机ADC检测出来了电池电压,与上面的比较;
3、满足某条件就触发对应的LED,以你想要的方式点亮。
已知你用单片机ADC检测出来了电池电压,那就用多个 IF 好了
回复

使用道具 举报

板凳
ID:959051 发表于 2022-7-23 09:09 | 只看该作者
man1234567 发表于 2022-7-20 17:07
1、将电池正常电压区间从低到高分段,再设一个低和满;
2、用单片机ADC检测出来了电池电压,与上面的比较 ...

你好,现在有个问题就是在充电时电压处于临界值指示灯不清晰,一会两个灯闪 一会一个灯闪。差不多持续30秒到一分钟的样子。请问有什么好办法吗?
回复

使用道具 举报

地板
ID:401564 发表于 2022-7-23 11:34 | 只看该作者
还不行?
你在另外一个帖子说明白了,我以为搞定了呢可以把你自己的完整代码和硬件电路上传上来看一下,不要截图
我觉得你这是个DIY的东西,可以上传的
回复

使用道具 举报

5#
ID:496636 发表于 2022-7-23 14:24 | 只看该作者
guoqiang881245 发表于 2022-7-23 09:09
你好,现在有个问题就是在充电时电压处于临界值指示灯不清晰,一会两个灯闪 一会一个灯闪。差不多持续30 ...

你可以用个延时程序,电压判断过程中,得持续一定时间,状态才转变,这样可以突略掉突然地电压上升和下降引起的状态改变。
各个电压区间对应各个状态。
回复

使用道具 举报

6#
ID:959051 发表于 2022-7-23 22:52 | 只看该作者
Y_G_G 发表于 2022-7-23 11:34
还不行?
你在另外一个帖子说明白了,我以为搞定了呢可以把你自己的完整代码和硬件电路上传上来看一下,不要 ...

我已经上传了代码,想了好几天,我觉得这个是最终的,可以实现我的要求。谢谢你们,感谢有你们。
回复

使用道具 举报

7#
ID:959051 发表于 2022-7-23 22:55 | 只看该作者
  1. /*充电检测****************************************************************************************************/
  2. /**充电
  3. 小于3.5V第一颗灯闪,1.21V
  4. 大于3.5V到3.7V第一颗亮,第二颗闪  1.21-1.28
  5. 3.7V到3.9V第一,二颗灯亮,第三颗闪 1.28-1.35
  6. 3.9V到4.15V第一二三灯亮,第4颗闪 1.35-1.43
  7. 大于4.15V就全亮表示充满*******P03充电 低插入充电器**************************************************************************************/
  8. void Charge_lamp()
  9. {
  10.         if (P03 == 0)
  11.         {       
  12.                 if (Flag3000ms)
  13.                 {
  14.                         Flag3000ms = 0;
  15.                         if (Adc_celiang() >= 1.470)
  16.                         {       
  17.                                 chongdian4 = 0;chongdian3 = 0;chongdian2 = 0;chongdian1 = 0;P10 = 1;P11 = 1;P12 = 1;P13 = 1;
  18.                         }
  19.                         else if (Adc_celiang() >= 1.425 && Adc_celiang() <= 1.465) //闪第四颗灯
  20.                         {
  21.                                 chongdian4 = 1;chongdian3 = 0;chongdian2 = 0;chongdian1 = 0;;P10 = 1;P11 = 1;P12 = 1;                       
  22.                         }
  23.                         else if (Adc_celiang()>=1.365 && Adc_celiang()<=1.420)  //闪第三颗灯
  24.                         {
  25.                                 chongdian4 = 0;chongdian3 = 1;chongdian2 = 0;chongdian1 = 0;P10 = 1;P11 = 1;P13 = 0;
  26.                         }
  27.                         else if (Adc_celiang()>=1.285 && Adc_celiang()<=1.360)         //闪第二颗灯
  28.                         {
  29.                                 chongdian4 = 0;chongdian3 = 0;chongdian2 = 1;chongdian1 = 0;P10 = 1;P12 = 0;P13 = 0;
  30.                         }
  31.                         else if (Adc_celiang() <= 1.280)  //闪第一颗灯
  32.                         {
  33.                                 chongdian4 = 0;chongdian3 = 0;chongdian2 = 0;chongdian1 = 1;P11 = 0;P12 = 0;P13 = 0;
  34.                         }
  35.                 }       
  36.         }                       
  37.                
  38. }
  39. //充电闪灯判断
  40. void ChongDSD()
  41. {
  42.         if (P03 == 0)
  43.         {
  44.                        
  45.                 if (chongdian4)  //闪第四颗灯
  46.                 {       
  47.                 //        chongdian4 = 0;
  48.                         if (Flag100ms){Flag100ms = 0;P13 = !P13;}
  49.                 //        P13 = !P13;
  50.                 }
  51.                 else if (chongdian3)  //闪第三颗灯
  52.                 {
  53.                 //        chongdian3 = 0;
  54.                         if (Flag100ms){Flag100ms = 0;P12 = !P12;}
  55.                 //        P12 = !P12;
  56.                 }
  57.                 else if (chongdian2)        //闪第二颗灯
  58.                 {
  59.                 //        chongdian2 = 0;
  60.                         if (Flag100ms){Flag100ms = 0;P11 = !P11;}
  61.                 //        P11 = !P11;
  62.                 }
  63.                 else if (chongdian1)        //闪第一颗灯
  64.                 {
  65.                 //        chongdian1 = 0;
  66.                         if (Flag100ms){Flag100ms = 0;P10 = !P10;}
  67.                 //        P10 = !P10;
  68.                 }
  69.         }
  70. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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