0.96OLED MPU6050 MAX30102 蓝牙
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "tim.h"
- #include "pwm.h"
- #include "spi.h"
- #include "iic.h"
- #include "led.h"
- #include "wk_up.h"
- #include "key.h"
- #include "rtc.h"
- #include "usart2.h"
- #include "24cxx.h"
- #include "w25qxx.h"
- #include "dht11.h"
- #include "algorithm.h"
- #include "max30102.h"
- #include "max30102test.h"
- #include "mpu6050.h"
- #include "inv_mpu.h"
- #include "inv_mpu_dmp_motion_driver.h"
- #include "ANO_TC.h"
- #include "draw_api.h"
- #include "featureset.h"
- #include "test.h"
- /*******************************************************************************
- STM32阶段项目:电子手环
- 2021/10/27 完成部分底层驱动,移植OLED图形库,用于后面0.96寸屏幕的显示,编译通过。
- 2021/10/28 增加RTC,DHT11,WK_UP休眠唤醒(有BUG,按一下会触发多次)。
- 2021/10/29 完成MPU6050的移植,DMP移植,匿名上位机通讯(V2.6版本),其他版本的上
- 位机不不可用。
- 2021/10/30 完成OLED时钟显示界面,OLED图形库增加电量显示图标,信号显示图标,底层
- 驱动基本完成。
- 2021/10/31 完成屏幕显示的雏形,心率和设置功能未添加(后续完善),很多细节未处理
- MPU6050必须要喊平稳才能校准。(后续增加MPU6050上传至更高版本的匿名上
- 位机),原因:高版本的上位机拥有更好看的图形化界面。
-
- 2021/11/1 完善时钟,计步,姿态逻辑模块功能。移植MAX30102(测试未通过,初始化无
- 反应),之前用轮询扫描按键,系统响应太慢,修改成外部中断。
- 计划:增加蓝牙设置时间,亮度,定时息屏,抬起唤醒(屏幕由灭到亮,实际
- 还没有休眠),闹钟功能。
- 2021/11/2 完善蓝牙设置时间,亮度,息屏,闹钟,休眠,抬起唤醒,跟随旋转。
- 待完善:心率,按键设置功能。
- 按键设置功能:亮度、时间设置已完成。
- 待完善:日期设置,心率。
-
- 2021/11/3 完成设置功能,修复菜单循环显示出现乱码问题。
- 待完善:心率检测。
-
- 2021/11/4 心率驱动完成,逻辑实现完成,项目基本完成。
- *****************************************************************************/
- /*******************************************************************************
- 实现功能:OLED显示,按键切换功能,抬起唤醒,自适应切换屏幕,心率血氧测量,计步功能。
- 实现过程:用STM43F407ZET6作为主控芯片,采用外部中断检测按键,用来切换功能,利用RTC
- 得到当前时间和日期,利用MPU6050姿态传感器采集数据,经过姿态融合结算出欧
- 拉角,分析欧拉角的值得到当前的状态,判断不同状态要进行不同的处理,驱动
- MAX30102得到心率血氧值,使用UART2连接蓝牙与手机通讯,自定义手机的发送格式
- 利用串口中断接收手机发过来的指令,在中断服务函数中判断,并执行相应的功能。
- *******************************************************************************/
- #define ANO_OK 0 //开启上传功能则将此宏改为1
- extern void OLED_ShowBatteryRatio(u8 x,u8 y,u8 ratio);
- extern void OLED_ShowSignal(u8 x,u8 y,u8 strength);
- //函数声明
- void MySystemInit(void); //各种外设的初始化
- void TestTask(void); //测试函数,测试使用
-
- /*********************************主函数***************************************/
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- MySystemInit();//系统初始化
- while(1)
- {
- MainShow();
- }
- }
- //各种接口初始化
- void MySystemInit(void)
- {
- delay_init(168); //初始化延时函数
- uart_init(115200); //串口初始化
- USART2_Init(9600); //蓝牙串口初始化
- LED_Init(); //LED初始化
- EXTI_InIt(); //按键中断初始化
- WK_UP_Init(); //开机时按下KEY2按键,非正常开机,直接进入休眠状态
- InitGraph(); //OLED初始化
- OLED_ON();
-
- ClearScreen();
- DrawBitmap(0,0,Panda,128,64);//显示开机画面
- UpdateScreen();
- Tim6_Init(100-1,840-1); //为图形库提供1ms时钟节拍
- // W25QXX_Init(); //Flash初始化
- // AT24CXX_Init(); //EEPROM初始化
- maxim_max30102_init();
- MPU_Init(); //初始化MPU6050
- while(mpu_dmp_init()) //初始化MPU DMP
- {
- LED2 =! LED2; //若DMP初始化不成功,则LED2闪烁 每隔200ms
- delay_ms(200);
- }
- ClearScreen();//清屏
- printf("system init ok \r\n");
- }
- /*************************************************END*******************************************************/
复制代码
Keil代码下载:
最终版.7z
(431.47 KB, 下载次数: 233)
|