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

📄 pump.#3

📁 毕业设计做的东西的硬件程序
💻 #3
📖 第 1 页 / 共 3 页
字号:
 WDTCN=0xA5;
}
/**********************************************************************************************
 函数:void noplay(void) 
 说明:为实现闪烁,需要一段时间空白显示
***********************************************************************************************/
void noplay(void)                      		    
{uchar i;
 for(i=1;i<6;i++)
  l_data[i]=0xff;
  lcdwd1();
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
}
/**********************************************************************************************
 函数:void lcd2wbit(bit n) 
 说明:LCD位传输函数
***********************************************************************************************/
void lcd2wbit(bit n)                 			
{  DI2PIN = n;
   CLK2PIN = 1;
   CLK2PIN = 0;
   CLK2PIN = 1;
}
/**********************************************************************************************
 函数:void lcd2wd(uchar data1) 
 说明:LCD字节传输函数
***********************************************************************************************/
void lcd2wd(uchar data1)             			
{  uchar i;
   for(i=0;i<8;i++)
   {  if((data1&0x01)==0x01)
         lcd2wbit(1);
      else 
         lcd2wbit(0);
      data1>>=1;
   }
}
/**********************************************************************************************
 函数:void lcdwd1(void) 
 说明:LCD4段数据传输函数
***********************************************************************************************/
void lcd2wd1(void)                     			
{  uchar i;
   for(i=0;i<5;i++) 
      {lcd2wd(l_data[i]);
}	   delay(1);}
/**********************************************************************************************
 函数:void l2_set(void) 
 说明:各段显示数据设置,若存在小数点,则相应位的显示数据改变
***********************************************************************************************/
void l2_set(void)                        
{uchar i;
 l_data[0]=0xff;
 if(Fluxdrop_Flag)								//判断是流量还是滴数模式
    Point_Flag=0xff;
 else
    Point_Flag=2;
 for(i=1;i<5;i++)
   {l_data[i]=lcd_data[temp2[i-1]];
   } 
// if(Point_Flag!=0xff)                           
//    l_data[(Point_Flag+1)]=l_data[(Point_Flag+1)]&0x7F;  
}
/**********************************************************************************************
 函数:void display2(void) 
 说明:显示设置数据
***********************************************************************************************/
void display2(void)                                   
{l2_set();
 lcd2wd1();
 delay(Time_50ms);
 WDTCN=0xA5;
 delay(Time_50ms);
 WDTCN=0xA5;
  delay(Time_50ms);
 WDTCN=0xA5;
 delay(Time_50ms);
 WDTCN=0xA5;
}
/**********************************************************************************************
 函数:void noplay2(void) 
 说明:为实现闪烁,需要一段时间空白显示
***********************************************************************************************/
void noplay2(void)                      		    
{uchar i;
 for(i=1;i<6;i++)
  l_data[i]=0xff;
  lcd2wd1();
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
  delay(Time_50ms);
  WDTCN=0xA5;
}

/**********************************************************************************************
 函数:void SM_Set(void) 
 说明:电机工作方式和初始状态设置
***********************************************************************************************/
void SM_Set(void)			       				
{  DAC0_Set();
   SM_RST=0;
   nop(5);
   SM_RST=1;
   nop(5);
   SM_MODE=1;
   SM_CW=1;
   nop(5);
}
/**********************************************************************************************
 函数:void Timer0_Set(void) 
 说明:定时器T0设置,用于电机PWM控制脉冲的产生,采用中断方式
***********************************************************************************************/
void T0_Set(void)			                 
{   
   TMOD=0x51;					   
   TL0=((-PWM_Width)&0xff);
   TH0=((-PWM_Width>>8)&0xff);
   TR0=1;
}
/**********************************************************************************************
 函数:void Timer0_ISR(void) 
 说明:定时器T0中断服务函数,当驱动步进电机的PWM频率比较小,延迟时间比较长的时候,在中断中进行
       时间累积,达到一定时间后,变换驱动脉冲的电平值
***********************************************************************************************/
void T0_ISR(void) interrupt 1   			 
{ TR0=0;
  TL0=((-PWM_Width)&0xff);
  TH0=((-PWM_Width>>8)&0xff);
  TR0=1;
  BUFFER++;
  if(BUFFER==Buffer_NUM)
      { BUFFER=0;
        SM_CLK1=!SM_CLK1;
      }
  All_Pulse--;
  if(All_Pulse==0)
      { SR_Flag=0;
        SM_SR();
	  }
}
/**********************************************************************************************
 函数:void SM_SR(void) 
 说明:电机运行控制,当运行标志为1时,电机运转,反之停转
***********************************************************************************************/
void SM_SR(void)								  
{ if(SR_Flag)
   {
    T0_Set();
	SM_RST=1;
	nop(5);
	SM_EN=1;
//  nop(5);
//	ET1=1;
//  EIE2=0x01;
//	TR1=1;
//	TR2=1;
//	TMR3CN=0x04;
   }
   else
   { SM_EN=0;
     SM_RST=0;
     TR0=0;
//	 ET0=0;
     TR1=0;
	 TR2=0;
	 TMR3CN=0x00;
   } 
}
/**********************************************************************************************
 函数:void DAC0_Set(void)
 说明:设置斩波驱动的比较电压,取内部电压基准2.4V,给DAC偏置,考虑电流为400mA,取样电阻阻值为0.7,
       目前取0.26V,采用12位分辨率时,应先设置DAC0L,后设置DAC0H
***********************************************************************************************/
void DAC0_Set(void)                   
{ REF0CN=0x03;				          
  DAC0L=(0xff&DAC0_DATA);			              
  DAC0H=(0xff&(DAC0_DATA>>8));
  DAC0CN=0x80;							
}
/**********************************************************************************************
 函数:void DAC1_Set(void)
 说明:设置LM306P的比较电压,取内部电压基准2.4V,给DAC偏置,暂取1.8V,初值十六进制为0x0c00,采用
       12位分辨率时,应先设置DAC1L,后设置DAC1H
***********************************************************************************************/
void DAC1_Set(void)	        		  
{ REF0CN=0x03;				        
  DAC1L=(0xff&DAC1_DATA);			 
  DAC1H=(0xff&(DAC1_DATA>>8));
  DAC1CN=0x80;							 
}
/**********************************************************************************************
 函数:void ADC_Set(void)
 说明:取内部参考电压2.4V,当检测到电源电压大于2.28V,或是小于1.93V时,提示电源电压低于限定值,
       停机,报警。选用通道0,单端输入方式,窗口比较模式.采样后结果为2.04,电压表测量为2.06V,
	   还可以
***********************************************************************************************/
void ADC_Set(void)          
{ 	AMX0CF = 0x00;	        
	AMX0SL = 0x00;	        
	ADC0CF = 0x60;	        
	ADC0CN = 0x48;	        
	ADC0LTH = 0x0C;	        
	ADC0LTL = 0xA1;	        
	ADC0GTH = 0x0F;	        
	ADC0GTL = 0x33;	        
	ADCEN=1;
}
/**********************************************************************************************
 函数:void ADC_ISR(void) interrupt 8
 说明:ADC中断函数,当电源电压低于正常值时,停机,报警 (模拟电源需要关闭,不知是什么意思)
***********************************************************************************************/
void ADC_ISR(void) interrupt 8
{   EIE1=0x00;
    Lpower_LED=0;
    SR_Flag=0;
    SM_SR();
}
/**********************************************************************************************
 函数:void T1_Set(void)
 说明:定时器T1寄存器设置函数
***********************************************************************************************/
void T1_Set(void)
{  
// TMOD=0x51;
   TL1=(0xff&(-Bubble_NUM));
   TH1=(0xff&(-Bubble_NUM>>8));
   TR1=0;
}
/**********************************************************************************************
 函数:void T1_ISR(void)
 说明:定时器T1中断服务函数
***********************************************************************************************/
void T1_ISR(void)  interrupt 3
{ 
  TR1=0;
  ET1=0;
  TR2=0;
  TMR3CN=0x00;
  EIE2=0x00;
  Bubble_alarm();
}
/**********************************************************************************************
 函数:void PCA_ADC(void)
 说明:软件定时器方式,做第五个定时器用
***********************************************************************************************/
void PCA_ADC(void)	     
{	PCA0MD = 0x02;	    
	PCA0CN = 0x00;	    
    PCA0H = 0x00;       	
    PCA0L = 0x00;       
	PCA0CPM0 = 0x4C;	
	PCA0CPL0 = 0x88;	
	PCA0CPH0 = 0x88;	
	CR=1;               
}
/**********************************************************************************************
 函数:void T2_Set(void)
 说明:定时器T2寄存器设置函数,用来对超声波传感器处理后的信号进行计数,当无气泡时,在定时器溢出
       前自动重载,如果有气泡,则会发生溢出。T2用于判断大于0.3ml的气泡。
***********************************************************************************************/
void T2_Set(void) 
{  RCAP2L=(0xff&(-Delay_LTime));
   RCAP2H=(0xff&(-Delay_LTime>>8));
   TL2=(0xff&(-Delay_LTime));
   TH2=(0xff&(-Delay_LTime>>8));
   T2CON=0x08;
   TR2=0;
} 
/**********************************************************************************************
 函数:void T3_Set(void)
 说明:定时器T3寄存器设置函数
***********************************************************************************************/
void T3_Set(void)
{  TMR3CN=0x00;
   SMB0CN=0xC1;	
   TMR3L=(0xff&(-Delay_STime));
   TMR3H=(0xff&(-Delay_STime>>8));
   TMR3RLL=(0xff&(-Delay_STime));
   TMR3RLH=(0xff&(-Delay_STime>>8));
// TMR3CN=0x04;
   SCL=0;
   nop(20);
   SCL=1;
} 
/**********************************************************************************************
 函数:void T3_ISR(void)
 说明:定时器T3中断服务函数
***********************************************************************************************/
void T3_ISR(void) interrupt 14
{ 	
    TMR3CN=0x04;
    T1IN=!T1IN;
}
/**********************************************************************************************

⌨️ 快捷键说明

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