一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 2450|回复: 2

[其他综合] 【求助】为什么这段程序上电后POW默认为低电平?

[复制链接]
发表于 2012-6-7 09:19 | 显示全部楼层 |阅读模式
小弟想做一个单片机控制的充电器,要求是上电或者使用过程中电压降低到3.2V一下开启充电,冲到4.2V关闭充电。充满电后使用过程中3.2V~4.2V不充电
但是实际使用情况是上电之后只要电压低于4.2V,就开启充电。使用过程中正常。


#include <stc12c5a60s2.h>             //STC自己的头文件
#include <string.h>                        //包含初试化头文件
#include <intrins.h>
//#include <stdlib.h>                //包含标准函数库头文件
#define TH0_TL0 (65536-60000)           //PWM设定中断的间隔时长

#include "4bitlcm1602.h"        //包含4线驱动1602头文件
#include "18b20.h"            //包含18b20头文件
#include "delay.h"                        //包含delay头文件
#include "STCAD.h"                        //包含AD转换头文件
#include "pwm.h"                        //包含pwm转换头文件
  
#define uchar unsigned char
#define uint  unsigned int


sbit beep         = P2^4;                //喇叭
sbit PWM          = P2^5;                //闪灯
sbit POW          = P2^6;                //充电继电器

/********************定时器1初始化***闪灯用***************/
void Timer0_init(void)
{
TMOD=0x01; //定时器0工作于方式1
TH0=TH0_TL0/256;
TL0=TH0_TL0%256;
TR0=1;
ET0=1;
EA=1;
}

main()                                                //主程序入口
{   
Delay400Ms();
        POW=1;
       InitADC();   //Init ADC sfr
       LCMInit();                        //初始化LCD
       sys_init();                                //系统初始化
     Timer0_init();
    LCD_cls();
     PWM_init(); //PWM初始化
// PWMR1 = 0;
// PWMR2 = 1;
  PWM0_set (1);
  PWM1_set (1);
z = 1;
    while(1)
     {        //主程序循环(开始)
   PWMset ();
  DisplayListChar(13,1,"pwm=");
   WriteDataLCM(z/100+0x30); //PWM显示
WriteDataLCM(z%100/10+0x30);
WriteDataLCM(z%100%10+0x30);

R2=(GetADCResult(1)*1.0/GetADCResult(7))*R5*2; //电池电压
R5=2500;       //基准电压2.5V


if(R2>4200)
{POW=1;}
   if(POW==0)
{
   if(++count < count0)
     {
  WriteDataLCM(7);
  }
  
}
if(R2>4100)
{DisplayOneChar(19,0,6); beep=1; }
   else if(R2>3900)
  {WriteDataLCM(5);  beep=1;}
   else if(R2>3760)
   {WriteDataLCM(4); beep=1; }
      else if(R2>3550)
    {WriteDataLCM(3);  beep=1;}
        else if(R2<3350)
     {WriteDataLCM(2); beep=1;}
      if(R2<3200)
  {
  WriteDataLCM(1);
  POW=0;
   if(++count < count0)
    {
     beep = 1;
    }
    else
     {
    beep = 0;
    }
   }
   

DisplayListChar(0,1,"Bat=");
WriteDataLCM(R2/1000+0x30);
WriteDataLCM(0x2E);
WriteDataLCM(R2%1000/100+0x30);
WriteDataLCM(R2%1000%100/10+0x30);
WriteDataLCM(0x56);


    }          //主程序循环结束返回
POW=1;      
}


void Timer0_int(void) interrupt 1 using 1
{
TR0 = 0;                //设置定时器初值期间,关闭定时器
TL0 = TH0_TL0 % 256;
TH0 = TH0_TL0 / 256 ;   //定时器装初值
TR0 = 1;


  
    if(++count < count0)
    {
    PWM = 1;
}
    else
   
PWM = 0;
   
    if(count >= 100)
    {
      count=0;
    }
  
}
发表于 2012-6-7 12:05 | 显示全部楼层
把   R5=2500;       //基准电压2.5V   放在  R2=(GetADCResult(1)*1.0/GetADCResult(7))*R5*2; //电池电压  前!
回复

使用道具 举报

 楼主| 发表于 2012-6-7 19:20 | 显示全部楼层
把   R5=2500;       //基准电压2.5V   放在  R2=(GetADCResult(1)*1.0/GetADCResult(7))*R5*2; //电池电压 ...
没事瞎转悠 发表于 2012-6-7 12:05 https://www.yleee.com.cn/images/common/back.gif



    谢谢,已经解决了!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-20 17:47 , Processed in 0.046486 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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