返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[CW32F030系列] 【CW32F030CxTx StartKit测评】+OLED显示温湿度

[复制链接]
1534|4
 楼主| wuxiubo 发表于 2022-8-6 15:45 | 显示全部楼层 |阅读模式
前两次我们完成了单独的sht20程序和单独的OLED显示,当时使用的显示温度还是在仿真器中看到的,不是很方便,不能随时看到温湿度数据。下面我们就配合OLED显示屏,把两个联动起来。
图片1.png
首先我们再OLED上显示都需要把字体给转换成数组。这里我们选择宋体,然后字宽和字高建议都选择一致的,开始我取的不是一样的,后来我自己修改了,都是16*16的字体了。
图片2.png
然后设置下取出的格式,这里我们选择C51,这样出来的就是C语言数组。
图片3.png
之后我们按照上面的历程定义下数据,这里还是二维数组,所以需要注意下。如下格式:
  1. unsigned char TempAndHumi[8][16]={

  2. // 温(0) 度(1) 湿(2) 度(3)



  3. {0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},

  4. {0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*"温",0*/

  5. /* (16 X 16 , 宋体 )*/



  6. {0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},

  7. {0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",1*/

  8. /* (16 X 16 , 宋体 )*/



  9. {0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},

  10. {0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00},/*"湿",2*/

  11. /* (16 X 16 , 宋体 )*/



  12. {0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},

  13. {0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",3*/

  14. /* (16 X 16 , 宋体 )*/

  15. };

图片4.png
定义好之后,我们只需要修改显示代码即可。
图片5.png
找到对应的显示中的的函数,然后看到调用显示字体是16*16的,替换成我们的数组即可。
图片6.png
然后在原来的基础上,先添加显示中文。先测试,测试通过再往后写,其实这些固定显示不需要在while中循环的,固定下来也是可以的。
  1. int main(void)

  2. {

  3. uint8_t t;


  4. char temp[5];

  5. char humi[5];


  6. GPIO_InitTypeDef GPIO_InitStruct;



  7.     RCC_HSI_Enable(RCC_HSIOSC_DIV6);

  8.     __RCC_GPIOB_CLK_ENABLE();



  9.     GPIO_InitStruct.IT = GPIO_IT_NONE;

  10.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  11.     GPIO_InitStruct.Pins = LED_GPIO_PINS;

  12.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;



  13.     GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);


  14. IIC_Init();


  15. OLED_Init();


  16. OLED_ColorTurn(0);//0正常显示,1 反色显示

  17. OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示

  18. OLED_Refresh();




  19. while (1)

  20. {

  21. SHT20_GetValue();

  22. GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);




  23. OLED_ShowChinese(0,0,0,16);//温

  24. OLED_ShowChinese(18,0,1,16);//度

  25. OLED_ShowChar(36,0,':',16);//:

  26. OLED_ShowChinese(0,32,2,16);//湿

  27. OLED_ShowChinese(18,32,3,16);//度

  28. OLED_ShowChar(36,32,':',16);//:


  29. sprintf(temp,"%.2f",sht20Info.tempreture);

  30. sprintf(humi,"%.2f",sht20Info.humidity);

  31. OLED_ShowString(46,0,temp,16);

  32. OLED_ShowChar(86,0,'C',16);//:

  33. OLED_ShowString(46,32,humi,16);

  34. OLED_ShowChar(86,32,'%',16);//:

  35. OLED_Refresh();


  36. delay_ms(1000);

  37. }

  38. }

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

搜索
复制

打赏榜单

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液晶,需要几个口,一般我不太喜欢接太多线
 楼主| wuxiubo 发表于 2022-8-8 10:09 | 显示全部楼层
地瓜patch 发表于 2022-8-7 09:29
这个字库是用软件生成的么?

是的,淘宝找下中景园的资料,任意一款屏下面都要资料,资料里都有这个软件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

259

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部