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