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

📄 m128_alky_touch_con1._c

📁 m8做的电压检测
💻 _C
📖 第 1 页 / 共 5 页
字号:
           if(WD_PID.Derivative>200)   WD_PID.Derivative=200;
           
           EEPROM_write(EE_WDPID_P_Addr, WD_PID.Proportion);
           EEPROM_write(EE_WDPID_I_Addr, WD_PID.Integral);
           EEPROM_write(EE_WDPID_D_Addr, WD_PID.Derivative);
           Display_TOUCH_MENU();
           Clr_TOUCH_KEY_DISP_F();
           SEI();
          break;
         case 6:            //日期修改
           DS1302_Write(DS1302_CONTROL_Reg,0x00);//关闭写保护
           Year = (KEY_TEMP[5]<<4) | KEY_TEMP[4];
           DS1302_Write(DS1302_YEAR_Reg,Year); //年
             
           Month = (KEY_TEMP[3]<<4) | KEY_TEMP[2];
           if(Month>0x12)   Month=0x12;
           if(Month==0)   Month=1;
           DS1302_Write(DS1302_MONTH_Reg,Month); //月
             
           Date = (KEY_TEMP[1]<<4) | KEY_TEMP[0];
           if(Date>0x31)   Date=0x31;
           if(Date==0)   Date=1;
           DS1302_Write(DS1302_DATE_Reg,Date); //日
             
           DS1302_Write(DS1302_CONTROL_Reg,0x80);//打开写保护
           
           Display_TOUCH_MENU();
           Clr_TOUCH_KEY_DISP_F();
          break;
          case 7:            //标定52PPM
          case 8:            //标定130PPM
          case 9:            //标定208PPM
          case 10:            //标定300PPM
          case 11:            //标定0PPM
           CLI();
           Set_LD_Value= KEY_TEMP[2] * 100 +KEY_TEMP[1] * 10 + KEY_TEMP[0];
           LD_PID.SetPoint = Set_LD_Value;
           EEPROM_write(EE_Set_LD_AddrL, Set_LD_Value%256);
           EEPROM_write(EE_Set_LD_AddrH, Set_LD_Value/256);
           SEI();
          break;
          case 14:            //温度修改
           CLI();
           Set_WenDu_Value= KEY_TEMP[1] * 10 + KEY_TEMP[0];
           if(Set_WenDu_Value>40)   Set_WenDu_Value=40;
           WD_PID.SetPoint   =Set_WenDu_Value;
           EEPROM_write(EE_Set_WD_Addr, Set_WenDu_Value);
           Display_TOUCH_MENU();
           Clr_TOUCH_KEY_DISP_F();
           SEI();
          break;
          case 15:            //风量修改
           CLI();
           Set_LiuLiang_Value= KEY_TEMP[3] * 1000 + KEY_TEMP[2] * 100 +KEY_TEMP[1] * 10 + KEY_TEMP[0];
           if(Set_LiuLiang_Value>1280)   Set_LiuLiang_Value=1280;
           EEPROM_write(EE_Set_FL_AddrL, Set_LiuLiang_Value%256);
           EEPROM_write(EE_Set_FL_AddrH, Set_LiuLiang_Value/256);
           OCR0=255-(Set_LiuLiang_Value/10);
          break;
         }
        }
        else
          if(k==11)  //取消
          {
              Display_TOUCH_MENU();
              Clr_TOUCH_KEY_DISP_F();
          }
          else
            if(k==12)  //清除
            {
              KEY_TEMP[0]=KEY_TEMP[1];
              KEY_TEMP[1]=KEY_TEMP[2];
              KEY_TEMP[2]=KEY_TEMP[3];
              KEY_TEMP[3]=KEY_TEMP[4];
              KEY_TEMP[4]=KEY_TEMP[5];
              KEY_TEMP[5]=0;
            }
             
      }
      else   
	  if(YN_TOUCH_MENU_DISP_F)
	  {
       switch(k)
       {
         case 0:            //浓度修改
	          MENU_NUM=0;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 1:            //浓度周期修改
	          MENU_NUM=1;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=F_LDZQ_Value/1000;
	          KEY_TEMP[2]=(F_LDZQ_Value%1000)/100;
	          KEY_TEMP[1]=((F_LDZQ_Value%1000)%100)/10;
	          KEY_TEMP[0]=((F_LDZQ_Value%1000)%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 2:            //温度周期修改
	          MENU_NUM=2;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=0;
	          KEY_TEMP[1]=F_WDZQ_Value/10;
	          KEY_TEMP[0]=F_WDZQ_Value%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 3:            //时间修改
	          MENU_NUM=3;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=(Hour>>4)&0x03;
	          KEY_TEMP[2]=Hour&0x0F;
	          KEY_TEMP[1]=(Minute>>4)&0x07;
	          KEY_TEMP[0]=Minute&0x0F;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 4:            //浓度PID修改
	          MENU_NUM=4;
	          KEY_TEMP[5]=LD_PID.Proportion/10;
	          KEY_TEMP[4]=LD_PID.Proportion%10;
	          KEY_TEMP[3]=LD_PID.Integral0/10;
	          KEY_TEMP[2]=LD_PID.Integral0%10;
	          KEY_TEMP[1]=LD_PID.Derivative/10;
	          KEY_TEMP[0]=LD_PID.Derivative%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 5:            //温度PID修改
	          MENU_NUM=5;
	          KEY_TEMP[5]=WD_PID.Proportion/10;
	          KEY_TEMP[4]=WD_PID.Proportion%10;
	          KEY_TEMP[3]=WD_PID.Integral0/10;
	          KEY_TEMP[2]=WD_PID.Integral0%10;
	          KEY_TEMP[1]=WD_PID.Derivative/10;
	          KEY_TEMP[0]=WD_PID.Derivative%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 6:            //日期修改
	          MENU_NUM=6;
	          KEY_TEMP[5]=Year>>4;
	          KEY_TEMP[4]=Year&0x0F;
	          KEY_TEMP[3]=(Month>>4)&0x01;
	          KEY_TEMP[2]=Month&0x0F;
	          KEY_TEMP[1]=(Date>>4)&0x03;
	          KEY_TEMP[0]=Date&0x0F;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 7:            //标定52PPM
	          MENU_NUM=7;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 8:            //标定130PPM
	          MENU_NUM=8;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 9:            //标定208PPM
	          MENU_NUM=9;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 10:            //标定300PPM
	          MENU_NUM=10;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 11:            //标定0PPM
	          MENU_NUM=11;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=Set_LD_Value/100;
	          KEY_TEMP[1]=(Set_LD_Value%100)/10;
	          KEY_TEMP[0]=(Set_LD_Value%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 12:            //返回
	          Clr_TOUCH_MENU_DISP_F();
	          Display_CON320240();
         break;
         break;
         case 13:            //空
	          k=20;
         break;
         break;
         case 14:            //温度修改
	          MENU_NUM=14;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=0;
	          KEY_TEMP[2]=0;
	          KEY_TEMP[1]=Set_WenDu_Value/10;
	          KEY_TEMP[0]=Set_WenDu_Value%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
         case 15:            //风量修改
	          MENU_NUM=15;
	          KEY_TEMP[5]=0;
	          KEY_TEMP[4]=0;
	          KEY_TEMP[3]=Set_LiuLiang_Value/1000;
	          KEY_TEMP[2]=(Set_LiuLiang_Value%1000)/100;
	          KEY_TEMP[1]=((Set_LiuLiang_Value%1000)%100)/10;
	          KEY_TEMP[0]=((Set_LiuLiang_Value%1000)%100)%10;
	          Set_TOUCH_KEY_DISP_F();
	          Display_TOUCH_KEY();
         break;
	    
	   }
	  }
          
          
		    if(!(k==20))
	        Sound_Nms(70);
    }
	   
	   
	
    //**************************************************
    //**************************************************
 if(YN_TOUCH_KEY_DISP_F)
 {
 	Display_TOUCH_KEY_VAL();
 }
 
 if(YN_TOUCH_KEY_DISP_F | YN_TOUCH_MENU_DISP_F)
 {
	ReadTime();
	Display_Time(0);
    LD_JiSuan();
 }
 else
    CON_Value_XIANSHI();
     
      Button_YN();
      
}

//******************************************
//UART0 initialize
// desired baud rate: 110
// actual: baud rate:110 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0xE0; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x98;
}

//******************************************
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
 //uart has received a character in UDR
}

//******************************************
//ADC initialize
// Conversion time: 13uS
//右对齐,参考电压AREF
void adc_init(void)
{
 ADCSRA = 0x00; //disable adc
 ADMUX = 0x00; //select adc input 0
 ACSR  = 0x80; //模拟比较器禁用
 ADCSRA = 0x82;
}
//******************************************
uint SYS_ADC(unsigned char n)
{
  unsigned char i,j;
  ADMUX = n;           //select adc input 
  ADCSRA |= (1<<ADSC);		   //ADC 开始转换
  while(ADCSRA & (1<<ADSC))    //等待转换结束
  ;
  i=ADCL;
  j=ADCH;
  return(j*256+i);
}

//******************************************
float WENDU_TZ(uint ad_v)
{
	if(ad_v<239)  return 0;
	else
	  {
	    if(ad_v<341)  return ((ad_v-239)*0.1);              //0-10
	    else
	      {
	      	if(ad_v<567)  return ((ad_v-341)*0.075+10);    //10-27
	        else
	          {
	            if(ad_v<669)  return ((ad_v-567)*0.1+27);   //27-37
	            else
	              {
	              	if(ad_v<753)  return ((ad_v-669)*0.12+37);
	              	else
	              	  {
	              	    if(ad_v<960)  return ((ad_v-753)*0.242+47);
	              	    else return 99.9;
	              	  }
	              }
	          }
	      }
	  }
}
//******************************************
//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 //XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 timer0_init();
 timer1_init();
 timer2_init();
// timer3_init();
 uart0_init();
 adc_init();

 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x45; //timer interrupt sources
// ETIMSK = 0x04; //extended timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 //SEI(); //re-enable interrupts
 //all peripherals are now initialized
}
//******************************************
//******************************************
//******************************************
void XG_F_Set(unsigned char kkk)
{
  unsigned char k,Temp,Temp1;
  
  k=kkk;
  
 switch(F_FLAG1)
 {
   case 1: //温控
      if(k<10)
       {
        switch(F_FLAG2)
        {
          case 1:
            if(k<2)
              {
 	           Temp=F_WDZQ_Value%10;		//取低位
 	           F_WDZQ_Value=k*10+Temp;
 	           if(F_WDZQ_Value>16)  F_WDZQ_Value=16;
 	           F_FLAG2=2;
 	          }
 	         break;
          case 2:
 	         Temp=F_WDZQ_Value/10;		//
 	         F_WDZQ_Value=Temp*10+k;
 	         if(F_WDZQ_Value>16)  F_WDZQ_Value=16;
 	    }
 	  }
   break;
   case 2: //注样
      if(k<10)
       {
        switch(F_FLAG2)
        {
          case 1:
 	         Temp=F_LDZQ_Value%1000;		//
 	         F_LDZQ_Value=k*1000+Temp;
 	         F_FLAG2=2;
 	         break;
          case 2:
 	         Temp=F_LDZQ_Value/1000;		//
 	         Temp1=F_LDZQ_Value%100;		//
 	         F_LDZQ_Value=Temp*1000+k*100+Temp1;
 	         F_FLAG2=3;
 	         break;
          case 3:
 	         Temp=F_LDZQ_Value/100;		//
 	         Temp1=F_LDZQ_Value%10;		//
 	         F_LDZQ_Value=Temp*100+k*10+Temp1;
 	         F_FLAG2=4;
 	         break;
          case 4:
 	         Temp=F_LDZQ_Value/100;		//

⌨️ 快捷键说明

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