目录
一、项目成品展示
项目成品图片展示:
哔哩哔哩视频链接:
基于STM32医疗点滴控制系统智能输液系统
基于STM32医疗点滴控制系统智能输液系统
(项目分享在哔哩哔哩主页)
二、项目介绍
1、功能介绍
2、硬件组成
三、原理图、PCB设计
原理图 PCB展示:
四、程序设计
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; // 将变量声明移到函数开始处
NVIC_Configuration(); //中断优先级配置
delay_ms(200);
I2C_Configuration(); //IIC初始化
OLED_Init(); //OLED液晶初始化
OLED_CLS(1); //清屏
OLED_ShowStr(0, 2, " loading... ", 2,1);
delay_ms(1000);
// 配置PB1为上拉输入模式(替代PA1)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 选择PB1引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 设置为上拉输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置IO口速度
GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化PB1
// 删除PB0初始化代码
ESP8266_Init();
OLED_CLS(0);
InitDisplay();
KEY_GPIO_Init(); //按键引脚初始化
MOTOR_GPIO_Init(); //步进电机初始化
if(water==0)NoWater=1;
TIM3_Init(99,719); //定时器初始化,定时1ms
//Tout = ((arr+1)*(psc+1))/Tclk ;
//Tclk:定时器输入频率(单位MHZ)
//Tout:定时器溢出时间(单位us)
while(1)
{
keyscan(); //按键扫描
if(setFlag == 0) //不在设置状态下
{
if((Speed!=0)&&((Speed<speed_min)||(Speed>speed_max))&&shanshuo) //滴速不在范围,闪烁显示
{
OLED_ShowStr(32, 2,": ", 2,0); //显示空白
}
else
{
sprintf(display,": %003d/min ",(int)Speed);
OLED_ShowStr(32, 2, (u8*)display, 2,0);//显示滴速
}
if(Speed!=0)
{
if(Speed<speed_min) direction=1; //滴速过慢,电机正转,模拟放开调节阀
else if(Speed>speed_max) direction=2; //滴速过快,电机反转,模拟收紧调节阀
else direction=0; //在正常滴速范围,电机停止
}
else
{
direction=0; //停止
}
if(shuaxin == 1)
{
shuaxin = 0;
}
if(water == 1) //无药水
{
if(NoWater==0)
OLED_ShowCN(56,6,7,0);//显示中文:无
NoWater = 1; //缺水标志
}
else
{
if(NoWater==1)
OLED_ShowCN(56,6,6,0);//显示中文:有
NoWater = 0;
}
}
UsartSendReceiveData();
delay_ms(10);
}
}
unsigned long times=0; //取样时间
unsigned long total_time=0; //取样总时间
unsigned long timeout=0; //取样超时时间
bool start_flag=0; //开始计时标志
五、上电演示
六、资料内容
项目分享
项目分享在哔哩哔哩主页