263-基于stm32单片机体重秤BMI指数人体健康监测系统(程序+原理图+元器件清单)

 一:功能介绍

1、实物组成部分:stm32f103c8t6核心板+LCD1602显示屏+HC05蓝牙模块+HX711称重传感器(100KG)+按键

2、通过称重传感器采集被测人的体重,显示到LCD1602显示屏上;

3、通过按键设置被测人的身高,显示到LCD1602显示屏上;

4、通过程序内部计算,得到被测人的BMI指数,显示到LCD1602显示屏上;

5、通过蓝牙HC05模块将身高、体重、BMI指数上传到手机APP;

二:实物演示视频

263-基于stm32单片机体重秤BMI指数人体健康监测系统(程序+原理图+元器件清单)

三:程序代码预览(采用keil5编写,使用的C语言,程序有中文注释,新手容易看懂)

特别注意:下载资料包以后一定要先解压! !!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

图片

图片

int main(void){    int adcx;int weight,bmi;#ifdef DEBUG    debug();    #endif   //执行主函数之前的调试函数,不影响最终的release版    //------------初始化------------下面三个初始化delay_init();delay_ms(100);LCD1602_Init();    RCC_Configuration();//RCC指时钟控制预分频器    GPIO_Configuration();//初始化GPIO口状态    USART_Configuration( );  //初始化串口配置KEY_Init();	 uart_init(9600);	 	//串口初始化为9600while(1)  //恒运行下面的程序    {key();  //多次读取按键状态   		adcx=filter();//adcx值由这个子函数读出,这个数需要由下面两句转kg值key();//多次读取按键状态    		adcx=adcx/100;//为节省运算量,将AD值固定缩小100倍		weight=((float)adcx/429.496+0.005)*10;  //实际用的时候需要调试,429.496由于传感器差异这个系数一般在400到500之间,加0.005是为了四舍五入		weight=(weight-1975)*2;//去皮操作if(weight<0) weight=0;			bmi=weight*1000/(high*high);LCD_Write_Command(0x80);//第一行的首地址LCD_Write_Date(' ');LCD_Write_Date(' ');LCD_Write_Date(' ');LCD_Write_Date('B');LCD_Write_Date('M');LCD_Write_Date('I');LCD_Write_Date('=');LCD_Write_Date(bmi%1000/100+0x30);	//显示bmi					LCD_Write_Date(bmi%100/10+0x30);						LCD_Write_Date(bmi%10+0x30);key(); //多次读取按键状态   LCD_Write_Command(0x80+0x40);LCD_Write_Date('H');LCD_Write_Date('=');LCD_Write_Date(high%1000/100+0x30);	//显示身高 					LCD_Write_Date(high%100/10+0x30);						LCD_Write_Date(high%10+0x30);LCD_Write_Date('C');LCD_Write_Date('M');LCD_Write_Date(' ');LCD_Write_Date('W');LCD_Write_Date('='); 					LCD_Write_Date(weight%1000/100+0x30);//显示体重				LCD_Write_Date(weight%100/10+0x30);LCD_Write_Date('.');LCD_Write_Date(weight%10+0x30);	LCD_Write_Date('K');LCD_Write_Date('G');printf("BMI=%d\r\n",bmi); printf("H=%d CM\r\n",high); 	    printf("W=%d.%d KG\r\n",(weight/10),(weight%10));   //蓝牙上传数据		}		}/******************************************************************************** Function Name  : Delay_Ms* Description    : delay 1 ms.* Input          : dly (ms)* Output         : None* Return         : None*******************************************************************************/void Delay_MS(u16 dly){	u16 i,j;    for(i=0;i<dly;i++)    for(j=1000;j>0;j--);}void delay_us(u16 dly1)    //延时函数{    u16 i;    for(i=dly1;i>0;i--);    }/******************************************************************************** Function Name  : Read_HX711* Description    : Read weigh* Input          : None* Output         : None* Return         : None*******************************************************************************/unsigned long Read_HX711(void)  //读HX711芯片输出的数据。 unsigned long val = 0; //long型32位unsigned char i = 0;                                                          //DOUT指串行数据输出,SCK指的是PD_SCK串行时钟输入GPIO_SetBits(GPIOB,GPIO_Pin_11);    //DOUT=1 ,PB11接HX711数据口浮空输入,还是不懂什么叫浮空输入,但是连线的话把HX711的数据线口接STM的PB11口GPIO_ResetBits(GPIOB,GPIO_Pin_12);    //SCK=0 ,PB12接HX711CLKwhile(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11));   //等待DOUT=0      delay_us(1); //等1us执行下面    for(i=0;i<24;i++) GPIO_SetBits(GPIOB,GPIO_Pin_12);    //SCK=1 		val=val<<1; //左移1位,右补0delay_us(1);  GPIO_ResetBits(GPIOB,GPIO_Pin_12);    //SCK=0 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11))   //DOUT=1 		val++; delay_us(1); GPIO_SetBits(GPIOB,GPIO_Pin_12); 	val=val^0x800000;//异或。delay_us(1); GPIO_ResetBits(GPIOB,GPIO_Pin_12); delay_us(1);  return val;  }	

四:原理图展示(源文件采用Altium Designer打开,公众号有安装包)

图片

图片

五:实物图展示

图片

图片

图片

六:元器件清单展示

图片

7:资料清单展示(文件中包含的相关资料)

图片

配套实物资料下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子工程DIY工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值