STM32讀取MPU6050傳感器角度和溫度數(shù)據(jù)OLED顯示
- 采用的是STM32F103C8T6讀取陀螺儀MPU6050的角度數(shù)據(jù)和溫度信息,使用6050自帶DMP庫(kù)姿態(tài)解算出各個(gè)方向的角度,并使用OLED實(shí)時(shí)刷新顯示,同時(shí)可以將數(shù)據(jù)通過(guò)串口發(fā)送到計(jì)算機(jī),每一組數(shù)據(jù)50ms。本操作過(guò)程簡(jiǎn)單,只涉及了屏幕驅(qū)動(dòng)顯示和陀螺儀數(shù)據(jù)的讀取,非常適合功能移植。
制作出來(lái)的實(shí)物圖如下:
-
ef029d18d9c748bd890b14db7012f23d.gif (3.62 MB, 下載次數(shù): 105)
下載附件
2021-9-12 09:06 上傳
- 硬件說(shuō)明:本實(shí)驗(yàn)采用的是1.3"寸的OLED屏幕+STM32F103C8T6最小系統(tǒng)開(kāi)發(fā)板。
- 接線(xiàn)說(shuō)明:SH1106 I2C OLED屏幕:SDA:PA7 SCL:PA5;MPU6050接線(xiàn):SDA:PB7 SCL:PB6
- 供電說(shuō)明:都是3.3V供電。
- 如需更改為0.96"寸屏幕顯示,只需要修改相關(guān)地方而處:oled.c文件
- //更新顯存到OLED
- void OLED_Refresh(void)
- {
- u8 i,n;
- for(i=0; i<8; i++)
- {
- OLED_WR_Byte(0xb0+i,OLED_CMD); //設(shè)置行起始地址
- OLED_WR_Byte(0x02,OLED_CMD); //設(shè)置低列起始地址0.96屏0x00,1.3屏地址0x02
- OLED_WR_Byte(0x10,OLED_CMD); //設(shè)置高列起始地址
- for(n=0; n<128; n++)
- OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
- }
- }
復(fù)制代碼 還有初始化地方:
- void OLED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能A端口時(shí)鐘
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOD3,6
- GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7);//PA5 PA7
- delay_ms(200);
- OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel關(guān)閉顯示
- OLED_WR_Byte(0x02,OLED_CMD);//---set low column address0.96屏地址0x00,1.3寸屏0x02
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
- OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
- OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
- OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
- OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
- OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
- OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
- OLED_WR_Byte(0x00,OLED_CMD);//-not offset
- OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
- OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
- OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
- OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
- OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
- OLED_WR_Byte(0x12,OLED_CMD);
- OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
- OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
- OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
- OLED_WR_Byte(0x02,OLED_CMD);//
- OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
- OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
- OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
- OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
- OLED_WR_Byte(0xAF,OLED_CMD);
- OLED_Clear();
- }
復(fù)制代碼 如果設(shè)置的顯示的數(shù)據(jù)不是從屏幕坐標(biāo)(0,0)-(2,2)的顯示,不需要更改也可以驅(qū)動(dòng)顯示,實(shí)際上1.3"OLED屏幕就是在0.96寸屏幕的基礎(chǔ)上偏移了2個(gè)像素點(diǎn)。
2021-09-12_092824.jpg (337.93 KB, 下載次數(shù): 94)
下載附件
2021-9-12 09:29 上傳
C8T6 mpu6050簡(jiǎn)單讀取.7z
(262.62 KB, 下載次數(shù): 213)
2021-9-12 21:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|