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

📄 pump.#3

📁 毕业设计做的东西的硬件程序
💻 #3
📖 第 1 页 / 共 3 页
字号:
 函数:void data_inv(void)
 说明:将键盘设置的流量或滴数转换为电机的控制参数,以滴作为基本单位,0.1ml对应为2滴.考虑中断循
       环的时间,需要加上修正系数。
***********************************************************************************************/
void data_inv(void)		             
{uint c;
 ulint a,b;              
//  if(Fluxdrop_Flag)
//   Drop_Num=temp[3]+10*temp[2]+100*temp[1];
// else 
//     Drop_Num=2*temp[3]+20*temp[2]+200*temp[1];
  if(Drop_Num==1)
      Buffer_NUM=2;
//  else if((Drop_Num>4)&&(Drop_Num<25))
//      Buffer_NUM=10;
  else
	  Buffer_NUM=1;
//  a=15000000/(Drop_Num*Drop_NStep);
//  b=a-2;
//  c=b/Buffer_NUM;
//  PWM_Width=c-2;
    Flux_Pulse=0.2403*Drop_Num*Drop_Num+48.956*Drop_Num-0.0008*Drop_Num*Drop_Num*Drop_Num+169.8705;
	a=15000000/Flux_Pulse;
    b=a-2;
    c=b/Buffer_NUM;
    PWM_Width=c-2;
}
/**********************************************************************************************
 函数:void pulse_inv(void)
 说明:将键盘设置的输液量转换为电机的控制参数,以1ml作为基本单位,考虑不可能将容器中的药液完全
       输出,需要扣除相应的保留值(8ml)
***********************************************************************************************/
void pulse_inv(void)		             
{uint All_Num;
 All_Num=20*temp2[3]+200*temp2[2]+2000*temp2[1];
 All_Pulse=(2*All_Num*Flux_Pulse)/Drop_Num;
}  
/**********************************************************************************************
 函数:void keyinterrupt(void)
 说明:键盘中断服务函数,Hold键锁定时,不能进行任何操作。采用外部中断INT1
***********************************************************************************************/
void keyinterrupt(void) interrupt 2     
{uchar release_flag=0xFF;                              //按键是否释放的标志
 EX1=0;
 keycode=0x00;
 delay(Time_20ms);                                     //延迟时间以20ms为宜
 if(INT1==1)
   {  EX1=1;
     return;
   }
code_h=0x7F;
while((code_h&0x0f)==0x0f)                            //如果没有到最后一行,则继续扫描
  {
   P3=code_h;
   nop(20);
   if((P3&0x0F)!=0x0F)
     { code_l=((P3&0x0F)|0xF0);
	   keycode=((~code_h)|(~code_l));
       break;                                         //扫描到按键后退出扫描
      }
    else
       code_h=((code_h>>1)|0x80);
   }
WDTCN=0xA5;
switch(keycode)
     { 
	 case 0x88:                                       //按键1
//          if((Speed_Set==1)&&(Hold_Flag==0))
		 if(Speed_Set==1) 
			 {temp[(k%3)+1]=1;
			  k++;
			 }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=1;
				 kk++;
				}
	      break;
	   case 0x48:                                     //按键4
//          if((Speed_Set==1)&&(Hold_Flag==0))
		 if(Speed_Set==1) 
			 {temp[(k%3)+1]=4;
			  k++;
			  }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=4;
				 kk++;
				}
	          break;
	   case 0x28:                                     //按键7
//           if((Speed_Set==1)&&(Hold_Flag==0))
		 if(Speed_Set==1)
			  {temp[(k%3)+1]=7;
			   k++;
			  }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=7;
				 kk++;
				}
	       break;
	   case 0x18:                                     //按键0
//           if((Speed_Set==1)&&(Hold_Flag==0))
		 if(Speed_Set==1)  
			   {temp[(k%3)+1]=0;
				k++;
			   }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=0;
				 kk++;
				}
	       break;
	   case 0x84:                                     //按键2
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)  
			   {temp[(k%3)+1]=2;
				k++;
				}
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=2;
				 kk++;
				}
	       break;
	   case 0x44:                                     //按键5
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)	
				{temp[(k%3)+1]=5;
				 k++;
				}
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=5;
				 kk++;
				}
	       break;
	   case 0x24:                                     //按键8
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)	 
				 {temp[(k%3)+1]=8;
				  k++;
				 }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=8;
				 kk++;
				}
	       break;
	   case 0x14:                                     //温度补偿
//		   if(Speed_Set==0)
           if((Speed_Set==0)&&(Gross_Flag==0)) 
                 Heat_flag=!Heat_flag;
	       break;
	   case 0x82:                                     //按键3
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)	
				{temp[(k%3)+1]=3;
				 k++;
				}
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=3;
				 kk++;
				}
	        break;
	   case 0x42:                                     //按键6
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)	 
				 {temp[(k%3)+1]=6;
				  k++;
				 }
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=6;
				 kk++;
				}
	        break;
	   case 0x22:                                     //按键9
//           if((Speed_Set==1)&&(Hold_Flag==0))
		  if(Speed_Set==1)	
				{temp[(k%3)+1]=9;
				 k++;
				}
		  if(Gross_Flag)
				{temp2[(kk%3)+1]=9;
				 kk++;
				}
	        break;
	   case 0x12:                                     //按键参数设置/确认
//           if(Hold_Flag==0)
          if(Gross_Flag==0)
                {if(Fluxdrop_Flag)
                     Drop_Num=temp[3]+10*temp[2]+100*temp[1];
                 else 
                     Drop_Num=2*temp[3]+20*temp[2]+200*temp[1];
				if((Fluxdrop_Flag==0)&&(Drop_Num>200))
				      {temp[1]=1;
					   temp[2]=0;
					   temp[3]=0;
					   }
				 else if((Fluxdrop_Flag==1)&&(Drop_Num>200))
					  {temp[1]=2;
					   temp[2]=0;
					   temp[3]=0;
					   }
				 else
					   Speed_Set=!Speed_Set;
				 }
		   break;
	   case 0x81:                                     //按键排空
//	       if((Speed_Set==0)&&(Hold_Flag==0))
           if((Speed_Set==0)&&(Gross_Flag==0))     
				{ PK_Flag=!PK_Flag;
				  pk();
				 } 
		   break;
	   case 0x41:                                     //按键运行和停止
//	       if((Speed_Set==0)&&(Hold_Flag==0))
           if((Speed_Set==0)&&(Gross_Flag==0))    
			   { 
			     data_inv();
				 pulse_inv();
				 nop(5);
			     SR_Flag=!SR_Flag;
				 SM_SR();
				 if(SR_Flag)
  				   {TR1=1;
	                TR2=1;
	                TMR3CN=0x04;
					}
                }
		   break;
	   case 0x21:                                     //按键流量和滴数切换
//           if((Speed_Set==1)&&(Hold_Flag==0))
           if(Speed_Set==1)
               {Fluxdrop_Flag=!Fluxdrop_Flag;     
				k=0;                                  //从第一段开始设置
			   }
		   break;
	   case 0x11:                                     //输液量设置
	       if(Speed_Set==0)
//			    Hold_Flag=!Hold_Flag;
                Gross_Flag=!Gross_Flag;
				State_LED=!State_LED;
		   break;
	   default:
	       break;
	 }
    while(1)
     {if(INT1==1)
          {release_flag=~release_flag;
           if(release_flag==0)  
                break;
          }
       delay(Time_1ms);
       WDTCN=0xA5;
     }
   P3=0x0F;
   if(Speed_Set==1)
      return;   
   EX1=1; 
   k=0;
   return;
}

void main(void)
{SYSCLK_Init();
 IO_Init();
 ISR_Init();
 Global_Init();
 display();
 display2();
 ADC_Set();
 DAC1_Set();
 PCA_ADC();
 SM_Set();
// Drop_Num=40;
// data_inv();
 CKCON=0x00;
 T1_Set();
 T2_Set();
 T3_Set();
 while(1)  
   {
     while(Speed_Set==1)        //若流速参数设置未完成,则继续
	   {noplay();
        display();
		EX1=1;
	   }
	 while(Gross_Flag==1)        //若输液量参数设置未完成,则继续
	   {noplay2();
        display2();
		EX1=1;
	   } 
     if(TF2==1)
      { 
	    TF2=0;
	    TR2=0;
        TR1=0;
		ET1=0;
	    TMR3CN=0x00;
		EIE2=0x00;
//	    Lpower_LED=0;
        Bubble_alarm();
        SR_Flag=0;
        SM_SR(); 
	  }
	 WDTCN=0xA5;
   }
}

⌨️ 快捷键说明

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