基于STM32单片机的OLED智能手环设计

   本设计的硬件构成:

STM32F103C8T6单片机电路+OLED显示屏电路+ADXL345计步检测传感器电路+DS18B20温度传感器电路+心率光电检测传感器+总电源供电电路;

功能介绍:

1、上电完成之后,通过重力角度检测,计算出整个行走的步数,通过步数的换算,得出行走的距离;

2、单片机驱动OLED显示屏,实时显示用户的心率、温度、运动的步数和距离,第一行显示心率、第二行显示体温,第三行显示步数,第四行显示距离;

3、DS18B20温度传感器可以检测温度的数据,将温度的数据显示在显示屏上面;

4、心率光电检测传感器实时监测心率脉搏心跳数据,显示在显示屏上面;

5、板载复位开关,重新清零,可以按下复位按键,重新开始计算步数和距离;

主要物料清单及型号:

显示屏:OLED12864;

单片机:STM32F103C8T6;

心率传感器:Pulsesensor心率传感器;

计步模块:ADXL345;

温度传感器:DS18B20;

部分程序源码:

int main(void)
 { 
	 
	 u8 key=0;
	delay_init();	    	 //延时函数初始化	  
	uart_init(9600);	 	//串口初始化为9600
  TIM3_Int_Init(49,7199);//50ms  	
	EXTIX_Init();		// 初始化外部中断
	OLED_Init();
	OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
	delay_ms(200);
	 
  Init_ADXL345();
  if(Single_Read_ADXL345(0X00)==0xe5)	
  {
    delay_ms(5);
  }
  else
  {
    delay_ms(3);
  }
	 
	OLED_ShowChinese(0,0,0,16);//心率
	OLED_ShowChinese(16,0,1,16);
	OLED_ShowString(32,0, ": ---d/min ",16);
	OLED_ShowChinese(0,16,2,16);//心率
	OLED_ShowChinese(16,16,3,16);
	OLED_ShowString(32,16,": --.- C   ",16);
	OLED_ShowChinese(80,16,8,16);
	OLED_ShowChinese(0,32,4,16);//心率
	OLED_ShowChinese(16,32,5,16);
	OLED_ShowString(32,32,": 00000    ",16);
	OLED_ShowChinese(0,48,6,16);
	OLED_ShowChinese(16,48,7,16);//心率
	OLED_ShowString(32,48,": 000.00m  ",16);
	OLED_Refresh();
		delay_ms(500);
	
	while(1)
	{
		
    if(ReadAdxl345== 1)   //定时读取adxl345数据
    {
      ReadAdxl345= 0;
      ReadData_x();  						//三轴检测函数
      CheckNum++;
      if((temp_Z>6000)) //查看正常次数     
      {
        Normal_num++;  //正常次数++
      }
      else
      {
        Error_num++;//倾斜次数
      }
      if((Error_num!=0)&&(Normal_num!=0))//检测到步数
      {
				BuShu++;   //步数脉冲量++
        Error_num=0;    //清除一个周期检测
        Normal_num=0;
      }
    }
	
		
		if(disFlag==1)	   //显示标志
		{
			disFlag = 0;
			
			readTemp++;  //定时计数
			if(readTemp >= 8)//约800ms处理一次数据 温度
			{
				readTemp =0;//重新计数
				temperature=(float)DS18B20_Get_Temp()/10;	//缩小10倍为实际值			
			}
						
			disBuShu = BuShu/2;  //显示步数
			disJuLi = (unsigned int)(disBuShu*0.45*100);//显示距离
			
			if(UI==0 && set==0)
			{
				temp1=((u16)(temperature*10));
				Display_State(temp1,xinLv,disBuShu,disJuLi);

			}
	
		}	
		
		if(appFlag==1)
		{
			appFlag=0;
			
			APP_Update();
		}
	}											    
}	

资料

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值