前两次我们完成了单独的sht20程序和单独的OLED显示,当时使用的显示温度还是在仿真器中看到的,不是很方便,不能随时看到温湿度数据。下面我们就配合OLED显示屏,把两个联动起来。 首先我们再OLED上显示都需要把字体给转换成数组。这里我们选择宋体,然后字宽和字高建议都选择一致的,开始我取的不是一样的,后来我自己修改了,都是16*16的字体了。 然后设置下取出的格式,这里我们选择C51,这样出来的就是C语言数组。 之后我们按照上面的历程定义下数据,这里还是二维数组,所以需要注意下。如下格式: - unsigned char TempAndHumi[8][16]={
- // 温(0) 度(1) 湿(2) 度(3)
-
- {0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},
- {0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*"温",0*/
- /* (16 X 16 , 宋体 )*/
-
- {0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},
- {0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",1*/
- /* (16 X 16 , 宋体 )*/
-
- {0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},
- {0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00},/*"湿",2*/
- /* (16 X 16 , 宋体 )*/
-
- {0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},
- {0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",3*/
- /* (16 X 16 , 宋体 )*/
- };
定义好之后,我们只需要修改显示代码即可。 找到对应的显示中的的函数,然后看到调用显示字体是16*16的,替换成我们的数组即可。 然后在原来的基础上,先添加显示中文。先测试,测试通过再往后写,其实这些固定显示不需要在while中循环的,固定下来也是可以的。 - int main(void)
- {
- uint8_t t;
- char temp[5];
- char humi[5];
- GPIO_InitTypeDef GPIO_InitStruct;
-
- RCC_HSI_Enable(RCC_HSIOSC_DIV6);
- __RCC_GPIOB_CLK_ENABLE();
-
- GPIO_InitStruct.IT = GPIO_IT_NONE;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pins = LED_GPIO_PINS;
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
-
- GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
- IIC_Init();
- OLED_Init();
- OLED_ColorTurn(0);//0正常显示,1 反色显示
- OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
- OLED_Refresh();
-
- while (1)
- {
- SHT20_GetValue();
- GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);
-
- OLED_ShowChinese(0,0,0,16);//温
- OLED_ShowChinese(18,0,1,16);//度
- OLED_ShowChar(36,0,':',16);//:
- OLED_ShowChinese(0,32,2,16);//湿
- OLED_ShowChinese(18,32,3,16);//度
- OLED_ShowChar(36,32,':',16);//:
- sprintf(temp,"%.2f",sht20Info.tempreture);
- sprintf(humi,"%.2f",sht20Info.humidity);
- OLED_ShowString(46,0,temp,16);
- OLED_ShowChar(86,0,'C',16);//:
- OLED_ShowString(46,32,humi,16);
- OLED_ShowChar(86,32,'%',16);//:
- OLED_Refresh();
- delay_ms(1000);
- }
- }
上面是我完成最终显示效果的代码,可以看到其中的变量就是温湿度数值,其他的都是固定显示,下面看下效果吧。
搜索
复制
|