您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(STC12C2052AD单片机做的手机电池充电器程序 正文
STC12C2052AD单片机做的手机电池充电器程序

STC12C2052AD单片机做的手机电池充电器程序

点击数:7181 次   录入时间:03-04 11:53:18   整理:http://www.55dianzi.com   STC单片机(

    ADC_CONTR |= 0x01;           //选择 A/D 当前通道   P1.1 
    delayms(1);                       //使输入电压达到稳定 
   ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 启动A/D转换,  

    while(!(ADC_CONTR & 0x10)); //!的优先级比&高太多了  
   //养成经常加括号的习惯 ,没坏处 。也不浪费速度 
 /***************
 这里while 不能改成while(ADC_CONTR & 0x10==0) ;就错误了,因为优先级 ==比&高 ,所以要加括号 
  while( (ADC_CONTR & 0x10)  ==0)    或者非一下  while(!(ADC_CONTR & 0x10)); //!的优先级比&高太多了  
    while( (ADC_CONTR & 0x10)  ==1)注意 if while这类判断逻辑真假的语句,用“==1”时 注意前面是否是后面的1,
 后面的1可是0x01啊,前面要是0x02===1,这是不会成立的。但是去掉后面的==1就可以用了。多此一举反而带来麻烦  
 *****************************/
    ADC_CONTR &= 0xE7;     //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,  

    V0=  ADC_DATA; //返回 A/D 10 位转换结果 


    ADC_DATA   = 0; //清除结果 

    ADC_CONTR = 0x60;      //转换速度设置  0x60  最快速度 

    ADC_CONTR = 0xe0;               //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位 
   ADC_CONTR =0xe2;
   //  ADC_CONTR |= 0x02;           //选择 A/D 当前通道   P1.2 
    delayms(1);                       //使输入电压达到稳定 
    ADC_CONTR = 0xea;
   // ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 启动A/D转换,  

    while(!(ADC_CONTR & 0x10)); //!的优先级比&高太多了  
   //养成经常加括号的习惯 ,没坏处 。也不浪费速度 

 ADC_CONTR =0xe2;
    //ADC_CONTR &= 0xE7;     //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,  
 V1=  ADC_DATA; //返回 A/D 10 位转换结果 

 voltage=V1/V0*Uref*3.000;

   

   if( voltage>4.180)
    {
     M=0;//过压灯 
     N=1;
     LED=1;
 timeL=timeL+0x08;
 timeH=timeH+0x08;
 START=1;
 LED=0;
    }
   if(voltage<3.601)
    { 
    N=0;//欠压灯 
 M=1;
 LED=1;
 timeL=timeL-0x01;
 timeH=timeH-0x01;
 START=1;
    }

 if(voltage>=3.601&&voltage<=4.155)
 {
  M=1;
  N=1;
  LED=1;
 }  
 
    if(voltage>=4.110&&voltage<=4.155)
   {
    timeL = 0xa2; //PWM模式时他俩用来控制占空比
    timeH = 0xa2; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出) 
    START=1;
 LED=0;
    }

     if(voltage>=4.155&&voltage<=4.180)
   {
    timeL = 0xb2; //PWM模式时他俩用来控制占空比
    timeH = 0xb2; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出) 
    START=1;
 LED=0;
    }

  /**************************
     if( voltage<3.772&&(timeL!=0xf0))
    {
   timeL = 0xf0; //PWM模式时他俩用来控制占空比
   timeH = 0xf0; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出)     
   START=1;
    }

   if( voltage<4.052&&voltage>3.772&&(timeL!=0xf2))
    {
   timeL = 0xf2; //PWM模式时他俩用来控制占空比
   timeH = 0xf2; //0xc0 64/256=25% 占空比(溢出) 高电平时间     
   START=1;
     M=1;
  N=1;
  LED=1;
    }
  
   if( voltage>4.052&&voltage<4.167&&(timeL!=0xfd))
    {
   timeL = 0xfd; //PWM模式时他俩用来控制占空比
   timeH = 0xfd; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出)     
   START=1;
     M=1;
  N=1;
  LED=1;
    }

    if( voltage>4.167&&voltage<4.208&&(timeL!=0x60))
   {
   timeL = 0x80; //PWM模式时他俩用来控制占空比
   timeH = 0x80; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出)     
   START=1;
     M=1;
  N=1;
  LED=1;
    }

   if(voltage>4.2050&&voltage<4.235)
   {
    timeL = 0x96; //PWM模式时他俩用来控制占空比
    timeH = 0x96; //0xff-0xc0=0x3f  64/256=25% 占空比(溢出) 
    START=1;
 LED=0;
    }

   ****************************************************/

 




 /**********
// 保护函数 
   void baohu()
   {
   
      if( voltage>4.231)
    {
     M=0;//过压灯 
     N=1;
     LED=1;
    }

上一页  [1] [2] [3]  下一页


本文关键字:单片机  电池  程序  充电器  手机  STC单片机(单片机-工控设备 - STC单片机(