发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[CW32F030系列]

【CW32F030CxTx StartKit测评】+OLED显示温湿度

[复制链接]
1000|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前两次我们完成了单独的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);

}

}

上面是我完成最终显示效果的代码,可以看到其中的变量就是温湿度数值,其他的都是固定显示,下面看下效果吧。

搜索
复制

使用特权

评论回复

打赏榜单

21ic小管家 打赏了 50.00 元 2022-08-10
理由:贡献奖

沙发
weifeng90| | 2022-8-6 17:32 | 只看该作者
OLED出镜率有点高啊

使用特权

评论回复
板凳
地瓜patch| | 2022-8-7 09:29 | 只看该作者
这个字库是用软件生成的么?

使用特权

评论回复
地板
wuxiubo|  楼主 | 2022-8-8 10:09 | 只看该作者
weifeng90 发表于 2022-8-6 17:32
OLED出镜率有点高啊

这种算简单的,还有TFT液晶,需要几个口,一般我不太喜欢接太多线

使用特权

评论回复
5
wuxiubo|  楼主 | 2022-8-8 10:09 | 只看该作者
地瓜patch 发表于 2022-8-7 09:29
这个字库是用软件生成的么?

是的,淘宝找下中景园的资料,任意一款屏下面都要资料,资料里都有这个软件

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

245

帖子

2

粉丝