📄 pump.c
字号:
}
/**********************************************************************************************
函数: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 + -