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

📄 element.h

📁 Element And Temp Control with CodevisionAVR
💻 H
字号:

#define T_Num 2

#define T1_ON PORTD.6=0
#define T2_ON PORTD.3=0
 
#define T1_OFF PORTD.6=1
#define T2_OFF PORTD.3=1

#define T1_EEPROM 26
#define T2_EEPROM 22

int Temp_def[T_Num];
int Temp_Current[T_Num];
int Temp_Tel[T_Num];

char Temp_flg[T_Num];

char flg_T_ON[T_Num];
char flg_T_OFF[T_Num];
char T_Set[T_Num];

char show_t_flg;


//************************************* ADC Read **************************

#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 1
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x00
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
register static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
// Start the AD conversion
ADCSRA|=0x40;
}
//************************************ ADC init ****************************
void ADCinit(void)
{
      // ADC initialization
      // ADC Clock frequency: 115.200 kHz
      // ADC Voltage Reference: AREF pin
      ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
      ADCSRA=0xCE;
}
//******************************** Read_Temp *****************************
float Read_Temp(char n)
{
      float VREF=1;
      unsigned int data=0;
      float volt=0;
      float temp=0;
      #asm("wdr")
      data=adc_data[n];
      volt=((float)data*VREF/1024)-VREF/1024;
      temp=(volt/0.01);
      return temp;
}
//********************************* Temp Control ***************************
void Temp_Control(char *T_set,int *T_def,int *T_cur,int *T_tel,char *T_flg)
{
      char i;
      
      for(i=0;i<T_Num;i++)
      {
            if((T_cur[i]<T_def[i]-T_tel[i]) && T_flg[i]==1 && flg_T_ON[i]==0)
            {
                  flg_T_ON[i]=1;
                  flg_T_OFF[i]=0;
                  T_set[i]=1;
            }
            else if((T_cur[i]>=T_def[i]+T_tel[i]) && T_flg[i]==1 && flg_T_OFF[i]==0)
            {
                  flg_T_OFF[i]=1;
                  flg_T_ON[i]=0;
                  T_set[i]=0;
            }
            else if(T_flg[i]==0)
            {
                  T_set[i]=0;
            }
      }
}
//********************************* Auto Control *******************************
void Temp_Auto_Control(void)
{
      char i;
      char ii;
      char k;
      Temp_Current[0]=(int)Read_Temp(1);      
      Temp_Current[1]=(int)Read_Temp(0);
      Temp_Current[0]=Temp_Current[0]*2;
      Temp_Current[1]=Temp_Current[1]*2;
      Temp_def[0]=Read_EEProm(22);
      Temp_def[1]=Read_EEProm(26);
      for(i=0;i<T_Num;i++)
      {
            Temp_Tel[i]=2;
      }
      
      if(show_t_flg==1)
      {
            Send_To_LCD('D',Temp_Current[0]);
            show_t_flg=0;
      }

      else 
      {
            Send_To_LCD('G',Temp_Current[1]);
            show_t_flg=1;
      }               
      
      for(ii=0;ii<2;ii++)
      {
            if((Temp_Current[ii]<Temp_def[ii]-Temp_Tel[ii]) && Temp_flg[ii]==1 && flg_T_ON[ii]==0)
            {
                  flg_T_ON[ii]=1;
                  flg_T_OFF[ii]=0;
                  T_Set[ii]=1;
            }
            else if((Temp_Current[ii]>=Temp_def[ii]+Temp_Tel[ii]) && Temp_flg[ii]==1 && flg_T_OFF[ii]==0)
            {
                  flg_T_OFF[ii]=1;
                  flg_T_ON[ii]=0;
                  T_Set[ii]=0;
            }
            else if(Temp_flg[ii]==0)
            {
                  T_Set[ii]=0;
                  flg_T_ON[ii]=0;
            }
      }

      for(i=0;i<T_Num;i++)
      {
            k=T_Set[i];
            if(k==1)
            {
                  if(i==0)
                  {
                        T1_ON;
                        Send_To_LCD('K',15);
                  }       
                  else if(i==1)
                  {
                        T2_ON;
                        Send_To_LCD('N',33);
                  }
            }
            else if(k==0)       
            {
                  if(i==0)
                  {
                        T1_OFF;
                        Send_To_LCD('R',57);
                  }       
                  else if(i==1)
                  {
                        T2_OFF;
                        Send_To_LCD('W',71);
                  }
            }
      }
}
/*
void Temp_Control_Auto(void)
{

}
*/

⌨️ 快捷键说明

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