📄 pump.#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 + -