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

📄 led9212.c

📁 LED灯控制程序
💻 C
字号:


#pragma sfr
#pragma di
#pragma ei
#pragma nop

#pragma interrupt INTTM000 One_Second

unsigned int ADCResult[2] = {0,0};
unsigned char mode = 0;
unsigned int TimeCounter = 0;

#define DelayPort P4.1

bit ThreeSecondFlag;



void Hardware_Init()
{
  DI();
  
  WDTM = 0x77;
  PCC = 0x00;
  PPCC = 0x00;
  LSRCM = 0x01;
  
  
  PMC2 = 0b00000010;
  PM2.1 = 1;
  PM2.0 = 0;
  P2.0  = 0;
  PM3.2 = 0;
  P3.2  = 0;
  PM4 = 0b00000000;
  P4 = 0b00000000;
  
  
  TMIF000 = 0;
  CRC00 = 0x00;
  CR000 = 15625;       // 15625 for 1s in 4MHz
  PRM00 = 0b00000010;
  TMC00 = 0b00001100;
  TMMK000 = 0;
    
  EI();
  
}

void main()
{

   Hardware_Init();
   ThreeSecondFlag = 0;
   while(1)
    {
      NOP();
    }   
}


void ADC_Operation()
{
  unsigned char j=0;
  
  ADIF=0;
  ADS=1;
  ADCE=1;
  NOP();
  NOP();
  NOP();
  NOP();
  NOP();
  while(j<2)
       {
         ADCS=1;

         while(!ADIF); 

         ADCS=0;
         ADIF=0; 
         ADCResult[j]=ADCR;
         j++;
       }

  ADCE=0;

}

void PWM_Start()             // freq = 20KHz in 4MHz
{
  TMHE1 = 0;
  TMHMD1 = 0b00001001;
  CMP01 = 200;
  CMP11 = 103;
  TMHE1 = 1;
}

void PWM_DutyChange()
{
   switch(mode)
    {
      case 0: if(CMP11!=103) CMP11 = 103;
              break;
      case 1: if(CMP11!=124) CMP11 = 124;
              break;
      case 2: if(CMP11!=170) CMP11 = 170;
              break;
      default:  
              break;
    }                            
}

void One_Second()
{
  TMIF000 = 0;
  
  if(TimeCounter<21245)          // 6 hours adjust for 21600
   {
     TimeCounter++;
     if(TimeCounter>0)
      {
        if(ThreeSecondFlag==0)
         {
           PWM_Start();
           DelayPort = 1;
         }
        ThreeSecondFlag=1;
        ADC_Operation();
        if((mode==1)&&(ADCResult[1]>523))         // current 350mA in 2.5V   50<Temprature<55  50 for 544, 55 for 493
          {
            mode = 0;
          }
         else if(ADCResult[1]<425)     // current 300mA in 2.61V  65>Temprature>60  60 for 444, 65 for 398
               {
                 mode = 1;
               }
      }    
   }
   else if(TimeCounter>21244)
        {
          mode = 2;               // pass 6 hours, current 170mA in 2.85V
        }
     
  if(TimeCounter>3)
   {
     PWM_DutyChange();   
   }
      
}

⌨️ 快捷键说明

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