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

📄 pump.c

📁 毕业设计做的东西的硬件程序
💻 C
📖 第 1 页 / 共 3 页
字号:
}
/**********************************************************************************************
 函数:void Read_flash(void)
 说明:读出flash存储器中确切地址的数据
***********************************************************************************************/
void Read_flash(void)
{ uchar code *pread;
  uchar i;
  pread=0x5000;		    //读flash
  for(i=0;i<4;i++)
      {	temp[i]=*(pread++);
	  }
  for(i=0;i<4;i++)
      {	temp2[i]=*(pread++);
	  }
  for(i=0;i<10;i++)
      {lcd_data[i]=*(pread++);
	  }
  delay(Time_1ms);
}
/**********************************************************************************************
 函数:Write_flash(void)
 说明:首先将flash固定区域的数据整页完全擦除,然后写入修改后的数据
***********************************************************************************************/
void Write_flash(void)
{uchar xdata *pwrite;
 uchar *pgen;
 uchar i;
 FLSCL=0x88;			//擦除128字节的信息页
 PSCTL=0x03;
 pwrite=0x5000;
 *pwrite=0;
 PSCTL=0x01;
 pgen=temp;             //写flash
 for(i=0;i<4;i++)
    {
	*(pwrite++)=*(pgen++);
	}
 pgen=temp2;             //写flash
 for(i=0;i<4;i++)
    {
	*(pwrite++)=*(pgen++);
	}
 pgen=lcd_data;
 for(i=0;i<10;i++)
    {
	*(pwrite++)=*(pgen++);
	}
 PSCTL=0;
 FLSCL=0x8f;
 delay(Time_20ms);
 }  
/**********************************************************************************************
 函数: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;
				 if(Speed_Set==0)
				        Write_flash();
				 }
		   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;
				 State_LED=!State_LED;
				 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;
			    if(Gross_Flag==0)
			       Write_flash();
				}
		   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();
 Read_flash();
 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 + -