前两次我们完成了单独的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);
}
}
上面是我完成最终显示效果的代码,可以看到其中的变量就是温湿度数值,其他的都是固定显示,下面看下效果吧。
搜索
复制
|