微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机 液体点滴控制

单片机 液体点滴控制

时间:11-24 来源:互联网 点击:

//长延时
void Delay400Ms(void)
{
Uchar i = 5;
Uint j;
while(i--)
{

j=1817; //100Ms
while(j--);
};
}
//更长延时
void Delay1000Ms(void)
{
Uchar i = 5;
Uint j;
while(i--)
{
j=18172;

while(j--);
};
}
void delay(Uint m)
{
Uint k;
while(m--)
{
for(k=0; k<125; k++)
{ }
}
}
//==================中断初始化函数说明====================//
void int_init(void)
{EA=1;
EX1=1;
EX0=1;
ET1=1;

}
//===================外部中断0函数说明====================//
void high(void) interrupt 0 using 0
{
EA=0;
DispOneChar(8,0,E);
EA=1;
}
//===================外部中断1函数说明====================//
void count(void) interrupt 2 using 1
{
EX1=0;
while (INT1==0);


m++;
if (p==3)
{
TR1=0;
time=(TH1*256+TL1-5536)/1000+60*t;
real_v=60000/(time/3);
t=0;
p=0;
time=0;

}
if(p<3&&p!=0)
{
p++;

}
if (p==0)
{
t=0;
TH1=0x15;
TL1=0x9f;
TR1=1;
p++;

}
}
//====================定时器1中断函数说明=================//
void get_time(void) interrupt 3 using 3
{
TR1=0;
t++;
if(t%4==0)
EX1=1;
TH1=0x15;
TL1=0x9f;
TR1=1;
}

//=======================显示速度函数说明=================//
void disp_v(void)
{
Uchar i;
Uchar v_real[16]="realspeed: /m";
v_real[10]=real_v/100+0x30;
v_real[11]=(real_v%100)/10+0x30;
v_real[12]=real_v%10+0x30;
for(i=0;i<15;i++)
{
DispOneChar(i,0,v_real[i]);
}
}
//======================步进电机函数说明==================//
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw()
{
Uchar i;


for (i=0; i<8; i++) //一个周期转7.2度
{
P1 = FFW[ i ]; //取数据
delay(15); //调节转速
}

}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void motor_rev()
{
Uchar i;

for (i=0; i<8; i++) //一个周期转7.2度
{
P1 = REV[ i ]; //取数据
delay(15); //调节转速
}

}
//====================调节滴速函数说明====================//
void control(void)
{char count;


count=set_v-real_v;
if (count>=5)
{
motor_rev();
}
else if (count<=-5)
{
motor_ffw();
}
else
{
EX1=0;
ET1=0;
Delay1000Ms();
Delay1000Ms();
EX1=1;
ET1=1;
}
}
//======================主函数说明========================//
main()
{
TMOD=0x10;
IT1=0;
set_v=100;
p=0;
t=0;
m=0;
time=0;
real_v=0;
LcdReset();
Delay400Ms();
int_init();
while(1)
{
disp_v();
DispOneChar(4,1,m/100+48);
DispOneChar(5,1,m%100/10+48);
DispOneChar(6,1,m%10+48);
if(real_v)
control();
else
motor_ffw();

}

}

//========================================================//

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top