⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 HID汽车大灯安定器,应用现在的安定器上,有多种保护功能
💻 C
📖 第 1 页 / 共 2 页
字号:
   ADCON1bits.VCFG=0b00;//ADCON1bits.PCFG3=1;   ADCON1bits.PCFG1=1;   ADCON1bits.PCFG0=1;   //配置AD模块.AN0~AN3.
   ADCON1bits.PCFG=0b1001;
   ADCON2bits.ADFM=0;    
   ADCON2bits.ADQT=0b110;   //选择AD采集时间.   
   ADCON2bits.ADCS=0b110;   //选择AD转换时钟. 
   _ADMUX=4;
 //  IPR1bits.ADIP=1;    //AD优先处理.
 //  PIR1bits.ADIF=0;   
 //  PIE1bits.ADIE=0;    //允许AD中断
 //  PIR1bits.ADIF=0;  
   ADCON0bits.ADON=1;  //AD模块启动 
  ADCON0bits.GO=1;    //AD启动 
adl:;  ClrWdt();   if (ADCON0bits.GO)  goto  adl; 
  PIR1bits.ADIF=0; 
  adt0=ADRESH;
  PIR1bits.ADIF=0;
 // if (vad>vmax_ma)     goto vad_con;
 // if (vad<vmin_ma)     goto vad_con;
    _ADMUX=0;
    //  ADCON2bits.ADQT=0b100;   //选择AD采集时间.   
   // ADCON2bits.ADCS=0b010;   //选择AD转换时钟.
   ADCON2bits.ADCS=0b101; 
    if  (pow_data>110)      ADCON2bits.ADCS=0b101;   //选择AD转换时钟.
         ADCON0bits.ADON=1;  //AD模块启动 
        ADCON0bits.GO=1;    //AD启动 
   PIR1bits.ADIF=0;   
   PIE1bits.ADIE=1;    //允许AD中断
   PIR1bits.ADIF=0;  
 //  ADCON0bits.ADON=1;  //AD模块启动 
 //  ADCON0bits.GO=1;    //AD启动
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//电源电压处理.
vad_con:;
          vadtemp+=adt0; vadtc+=1;
          if (vadtc>3)  {vad=(unsigned char)((vadtemp+1)>>2); vadtc=0;vadtemp=0;}  //vad=adt0;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
//oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  
#include   "E:\HID18F24K20\cleanset.c" //初始化IO配置
//oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  
#include   "E:\HID18F24K20\chengxu.c" //初始化IO子程序控制.
#include   "E:\HID18F24K20\eoffpow.c" //错误关灯程序.   
#include   "E:\HID18F24K20\adreudely.c" //AD岩石滤波程序.
//oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  
 void adreudely()
{   
  if (front>3000)  front=3000; 
  if (vad>vmax_ma)  { if (front>100)   {setb1(error,vmaxf);kout=0;front=0;clrb1(error,qimaxf);clrb1(error,qvmaxf);};}  else  {if (vad<(vmax_ma-1))  clrb1(error,vmaxf);};     //电源高压判断
  if (vad<vmin_ma)  { if (front>100)   {setb1(error,vminf);kout=0;front=0;clrb1(error,qimaxf);clrb1(error,qvmaxf);};}  else  {if (vad>vmin_ma2)  clrb1(error,vminf);};     //电源低压判断 
 vaderr_out:;
} 
 
//===================================================================
void main(void)
{ 
  clean();
  intconl_set();
  ioset();qiaooff();
    inmantime=0;    
  PIR1&=0b01000101;   IPR1&=0b01000111;   PIE1&=0b01000111;
  PIR2&=0b11011100;   IPR2&=0b11011100;   PIE2&=0b11011100;
  INTCON3=0;  INTCON2=0;  INTCON&=0b11100100;
   TMR2=255;    pwmdata=2; inputpwm();
intmainlp:; qiaooff();  if (inmantime<6)   goto  intmainlp;   t1s=0;qiaoh();
  TRISA=0b11101111;  PORTA=0b11101111;  LATA=0b11101111;  ANSEL=0b11111;
     CVRCON=0; CM2CON0=0;
     CM1CON0=0b11111001;     
   // PIR2bits.CMIF=0;
   // PIE2bits.CMIE=0;
   // IPR2bits.CMIP=0;   
    PIR2bits.C2IF=0;
    PIE2bits.C2IE=0;
    IPR2bits.C2IP=0;   
    vadread (); pwmdata=0; inputpwm(); vadread ();vadread ();vadread ();vadread ();  qiaooff();
//intmainlp2:; qiaooff(); vadread (); if (inmantime<1)   goto  intmainlp2;   t1s=0;qiaoh();
V_LOOP:;
       pow_data=0;kout=0;
       vadread ();
       pwmma=pow_set[pow_data];
       front=0; pass=0; 
    // if (vad>vmax_ma)     goto V_LOOP; // {setb1(error,vmaxf);};
    // if (vad<vmin_ma2)    goto V_LOOP; //{setb1(error,vminf);}; 
     if (vad>vmax_mah)    {setb1(error,vmaxf);};
     if (vad<vmin_ma2)   {setb1(error,vminf);}; 
fro:;
     ClrWdt(); vadread ();   front=200;  adreudely(); in400V=0;
     if  (error)   {eoffpow(); goto  fro;} 
      front=0;       
 //pwmdata=450;
 // // pwmdata=22500/vad; 
 //     inputpwm(); 
////   vadread ();
//feo:;    
//         goto feo;     if  (power>pwmma)
while(1) 	 
	{        
nocinled:;   
     if  (uatim<50) goto  dke;    //100
     uatim=0;
     vadread (); 
     if  (adt0<vminma)  {setb1(error,vminf);}
     if  (error)      { eoffpow(); goto  main_out;} 
     if (vad<vmin_ma3)  pow_data=170;
dke:;     
         pwmdatatb=28500/vad; if (pwmdatatb<440)  pwmdatat=pwmdatatb;   else  pwmdatat=440;
         //pwmdatatb=43000/vad; if (pwmdatatb<620)  pwmdatat=pwmdatatb;   else  pwmdatat=620;
      uptime();//时间累加.  //if (t2ms<200)   goto nocinled; t2ms=0;  //PWM更新时间. 
      pwmma=pow_set[pow_data];
      if (qitim>120)    qitim=120;  
 //      if  (pow_data>130)   pass=200;     
//============================================================
      if (pass==0)  {gflag=0;qiaotime=0;}  else   {gflag+=1;if (gflag>250) gflag=250; }  //if (gflag<20) qiaotime=0; }     
//============================================================
      adreudely();  //AD岩石错误滤波程序.
     if  (error)      { eoffpow(); goto  main_out;} 
     if  (error!=0)   { eoffpow(); goto  main_out;}   
//============================================================
//功率启动
          if (pass)   goto   power_pid;   //已经开过.
    T2CONbits.TMR2ON=1;
    PIR2bits.C2IF=0;
    PIE2bits.C2IE=1;
    IPR2bits.C2IP=0; 
//tytg3:    qiaooff();  if  (flag<3)       goto   tytg3;   flag=0;  powup2();             
//tytg8:    qiaooff();   if  (flag<3)      goto   tytg8;   flag=0;  powup2();
tytg34:   qiaoh();   if  (flag<3)      goto   tytg34;  flag=0;  powup2();    
tytg35:   qiaoh();  if  (flag<3)      goto   tytg35;  flag=0;  powup2();   
          pow_data=0;  qitim=0;
          pwmma=pow_set[pow_data];
//led_1:;    qiaooff();  setpwm(25); pwmdata=25;       if (t2ms<4000)  goto  led_1; t2ms=0;  //中功率启动
           qiaooff(); qiad=adt2;  qvad=adt1;  qiaooff(); flag=0; t2ms=0; 
//led_0:;   qiaooff();  setpwm(1);ClrWdt(); pwmdata=1;     if (t2ms<50)  goto  led_0; t2ms=0; 
//           flag=0;
  //        pwmtemp=250; flag=0;
        //   if (adt0>90) pwmtemp=200; 
        //   if (adt0>110) pwmtemp=150; 
   //       pwmtemp=270-adt0;
   //         if (adt0<65)  pwmtemp=250-adt0;
      vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();
      vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();vadread ();
  
        // pwmtemp=25500/vad;//adt0;  //热灯功率
        pwmtemp=20500/vad+20;  if (pwmtemp>410) pwmtemp=410;  // if (pwmtemp>430) pwmtemp=430;
          t2ms=0;
   //       if (adt1>150)  goto tytg0;
led_0:;   qiaoh();   powup(); if  (adt1>160)   goto  tytg01;// if ( (adt1>180)&&(pwmtemp!=0) )   {pwmtemp-=10;}
          setpwm(pwmtemp);
          ClrWdt();       if (t2ms<8)  goto  led_0; t2ms=0; 
tytg01:   if  (flag<3)      goto   tytg01; 
          if  (adt1<30)    {setb1(error,qvmaxf);}
          if  (error)   {eoffpow(); goto  main_out;} 
           flag=0;
tytg0:     if  (flag<3)      goto   tytg0; 
          pwmtemp=20500/vad+40; if (pwmtemp>415) pwmtemp=415; //    pwmtemp=35500/vad;  //adt0;  //热灯功率       pwmtemp=22500/vad+120; if (pwmtemp>435) pwmtemp=435;   //adt0;  //热灯功率            
          // if (pwmtemp>600) pwmtemp=600;
          setpwm(pwmtemp); ClrWdt();pwmdata=pwmtemp; t2ms=0;  tpms=0;
led_2:;   qiaooff();  powup();              
          if  (adt1<60)      goto gfu;
          if (tpms<200)  goto  led_2; t2ms=0;  //大功率启动  // if (t2ms<200)  goto  led_2; t2ms=0;  //大功率启动
         //--------------------------
          if  (adt1>80)    {setb1(error,qvmaxf);}
          if  (error)   {eoffpow(); goto  main_out;} 
gfu:;
          pwmtemp=20500/vad+80; 
      //   if (adt2<50)     pwmtemp=21500/vad+50; 
     //    if (adt2<40)     pwmtemp=25500/vad; 
     //    if (adt2<30)     pwmtemp=24500/vad;
     //    if (adt2<20)     pwmtemp=23000/vad;   
     //    pwmtemp=23000/vad; 
    //     if (adt2<150)    pwmtemp=25000/vad; 
    //     if (adt2<100)    pwmtemp=24000/vad; 
    //     if (adt2<50)     pwmtemp=23000/vad;
    //     if (adt2<25)     pwmtemp=22000/vad; 
         if (pwmtemp>400) pwmtemp=400; //冷灯功率   pwmtemp=11500/adt0;  /
          pwmdatak=pwmtemp;
                 setpwm(pwmtemp); ClrWdt();pwmdata=pwmtemp; 
         pwmdatatb=30000/vad; if (pwmdatatb<440)  pwmdatat=pwmdatatb;   else  pwmdatat=440;
        //pwmdatatb=42000/vad; if (pwmdatatb<620)  pwmdatat=pwmdatatb;   else  pwmdatat=620;
        //pwmdatatb=33000/vad; if (pwmdatatb<430)  pwmdatat=pwmdatatb;   else  pwmdatat=430;
    
 //--------------------------------------------------------------------------------------------
//          flag=0; 
//tytg1:     if  (flag<3)      goto   tytg1; 
//         qiaooff(); qiad=adt2;  qvad=adt1;  qiaooff(); flag=0; t2ms=0;
//          pwmb=pwmtemp;powup(); powup(); 
//          pwmtemp-=pwmb>>7;
////led_3:;   qiaooff();  powup(); ClrWdt();   if (t2ms<200)  goto  led_3; t2ms=0;
//tytg2:     if  (flag<3)      goto   tytg2;  pass=0;
//         qiaooff(); qiad=(unsigned char)(((unsigned int)adt2+(unsigned int)qiad)>>1);  qvad=(unsigned char)(((unsigned int)adt1+(unsigned int)qvad)>>1);  qiaooff();flag=0;t2ms=0;
//         pwmb=pwmtemp;powup(); powup(); 
//          pwmtemp-=pwmb>>7;  powup(); powup();qitim=0;
//led_4:;   qiaooff();  powup(); ClrWdt(); setpwm(pwmtemp); pwmdata=pwmtemp;     if (t2ms<220)  goto  led_4; t2ms=0; 
         //    pow_data=0;pwmma=pow_set[pow_data]; pass=20;t2ms=0;
             //  pow_data=50;  if (vad<vmin_ma3)  pow_data=170; pwmma=pow_set[pow_data]; pass=20;
            
         pow_data=0;  if (vad<vmin_ma3)  pow_data=60; pwmma=pow_set[pow_data]; 
                    //if  (adt1<20)    {setb1(error,qvmaxf);}  if  (error)   {eoffpow(); goto  main_out;}
//           flag=0;
//tytguj:   if  (flag<3)      goto   tytguj; 
//        pwmtemp=25000/vad; 
//         if (adt2<150)    pwmtemp=25000/vad; 
//         if (adt2<100)    pwmtemp=24000/vad; 
//         if (adt2<50)     pwmtemp=23000/vad;
//         if (adt2<25)     pwmtemp=22000/vad; 
//         if (pwmtemp>420) pwmtemp=420;//冷灯功率   pwmtemp=11500/adt0;  /
//          pwmdatak=pwmtemp;
//                 setpwm(pwmtemp); ClrWdt();pwmdata=pwmtemp;
//         t2ms=0;tpms=0; //低桥40mS  
//         pass=20;       
         tpms=0;
led_0n:;   qiaooff(); powup(); //if (pwmdatak>pwmdata)  pwmdata=pwmdatak;
        if (tpms<5)  goto  led_0n; 
                  
             pow_data=70;  if (vad<vmin_ma3)  pow_data=120; pwmma=pow_set[pow_data]; 

                    //if  (adt1<20)    {setb1(error,qvmaxf);}  if  (error)   {eoffpow(); goto  main_out;}
            pwmtemp=23500/vad; 
         if (adt2<50)    pwmtemp=24000/vad; 
         if (adt2<40)    pwmtemp=23000/vad; 
         if (adt2<30)     pwmtemp=22500/vad;
         if (adt2<20)     pwmtemp=22000/vad; 
         if (pwmtemp>440) pwmtemp=440;//冷灯功率   pwmtemp=11500/adt0;  /
          pwmdatak=pwmtemp;pwmdata=pwmtemp;t2ms=0;tpms=0; //低桥40mS  
        //         setpwm(pwmtemp); ClrWdt();
        // pass=20;        //冷灯功率   pwmtemp=11500/adt0;  /
          pwmdatak=pwmtemp;pwmdata=pwmtemp;t2ms=0;tpms=0; //低桥40mS  
        //         setpwm(pwmtemp); ClrWdt();
         pass=20;        
led_0m:;  qiaooff(); //qiaoh(); 
          qiaotime=0;  powup(); //if (pwmdatak>pwmdata)  pwmdata=pwmdatak;
          if (tpms<20)  goto  led_0m; t2ms=0;tpms=0; //高桥40mS
          //qiaooff();  qiaooff();
          pass=0; //if (pwmdatak>pwmdata)  pwmdata=pwmdatak;    // qiaooff();
tytg36:    if  (flag<3)      goto   tytg36;  flag=0;  powup2();
tytg37:   qiaooff();  if  (flag<3)      goto   tytg37;  flag=0;  powup2();
tytg38:   qiaooff();  if  (flag<3)      goto   tytg38;  flag=0;  powup2();
tytg39:   qiaooff();  if  (flag<3)      goto   tytg39;  flag=0;  powup2();
//tytg3a:   qiaooff();  if  (flag<3)      goto   tytg3a;  flag=0;  powup2();/
//tytg3b:   qiaooff();  if  (flag<3)      goto   tytg3b;  flag=0;  powup2();
//tytg3g:   qiaooff();  if  (flag<3)      goto   tytg3g;  flag=0;  powup2();
//tytg3n:   qiaooff();  if  (flag<3)      goto   tytg3n;  flag=0;  powup2();
       //  qiaooff(); qiad=(unsigned char)(((unsigned int)adt2+(unsigned int)qiad)>>1);  qvad=(unsigned char)(((unsigned int)adt1+(unsigned int)qvad)>>1);  qiaooff();flag=0;
       // powup(); powup(); 
        if  (advm>qvmax_ma)   {setb1(error,qvmaxf);}   //桥高压,灯开路或者有故障.
        if  (advm<5)          {setb1(error,qimaxf);} 
        if  ( (advm<11)&&(adim>250) ) {setb1(error,qimaxf);}  //180
       // if  (qiad>qimax_ma)   {setb1(error,qimaxf);}   //桥过流,灯短路或者有故障.  
        if  (error)   { eoffpow(); goto  main_out;}    //点灯出错.  
        flag=0;
                                   // pwmtemp-=pwmb>>5; setpwm(pwmtemp);
//       t2ms=0;  powup();  pwmdata=pwmtemp;
//led_4h:; qiaooff(); powup2();   uptime();     if (t2ms<180)  goto  led_4h; t2ms=0;   
//led_4p:;  powup2();   uptime();     if (t2ms<200)  goto  led_4p; t2ms=0;
//led_4v:;  powup2();   uptime();     if (t2ms<200)  goto  led_4v; t2ms=0;
//led_4m:;  powup2();   uptime();     if (t2ms<200)  goto  led_4m; t2ms=0;
//led_4n:;  powup2();   uptime();     if (t2ms<200)  goto  led_4n; t2ms=0;
   //          if  (flag==3)  {powup();flag=0;}
   //               if  ( (advm<12)&&(adim>200) ) {setb1(error,qimaxf);}  //180
                     pow_data=0;  qitim=0;
      qiad=adt2;  qvad=adt1; qiaotime=0; 
       if  (qvad<5)  pow_data=0;
       if  (qvad<=25)  pow_data=qvad-5;
       if  (qvad>25)  pow_data=60;    
       if  (qvad>40) pow_data=150; 
 if (vad<vmin_ma3)  pow_data=170;
       pwmma=pow_set[pow_data];
lrr:;
       pass=50;   //正常启动.     
    PIR2bits.C2IF=0;
    PIE2bits.C2IE=1;
    IPR2bits.C2IP=0; 
//============================================================
//============================================================
//功率启动调节   
power_pid:;    
    if  (flag==3)  {powup();flag=0;}   //180
    if  ( (advm<12)&&(adim>240) )   { koutb+=1; if (koutb>150) setb1(error,qimaxf);}  else {if(koutb!=0) koutb-=1; }  //桥过流,灯短路或者有故障.  
   //    if  ( (advm<30)&&(adim<7) )     { koutc+=1; if (koutc>200) setb1(error,qimaxf);}  else {if(koutc!=0) koutc-=1; }  //桥故障,灯开路或者有故障.  
    if  (advm>qvmax_ma)   { kout+=1; if (kout>100) setb1(error,qimaxf);}  else {if(kout!=0)   kout-=1; }
    if  (error)   { eoffpow(); goto  main_out;}    //点灯出错. 
    if  (qvad>qvmax_ma)  {eoffpow();qiaooff();setpwm(0);pt50ms=0;pow_data=0;pass=0;front=0;};                  
//============================================================ 
main_out:; 
//oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  
 ClrWdt(); 
	 };
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -