电子产业一站式赋能平台

PCB联盟网

搜索
查看: 655|回复: 0
收起左侧

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】八:天气显示

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2021-1-6 09:56:05 | 显示全部楼层 |阅读模式
【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】八:天气显示, 上一次帖子,已经通过网络获取天气数据,但是还没显示到显示屏上。今天的帖子我写的是关于如何取模天气图片,并显示天气图标和天气数据。
一、ssd1306显存填充 显示板使用的OLED驱动芯片为1306,我们来看看这款芯片的显存和该显存填充方式。下面是从SSD1303芯片手册上的截图,可以看得出它的显存是大小为128
64bit的RAM,并且分成为8页,PAGE0-PAGE7。显示板像素点大小为12864,所以一个像素点对应RAM中的1bit。



GDDRAM.JPG (112.72 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:04 上传 往RAM的某一位写入1或者0,该位对应的像素点就显示亮点或者不显示。但是它是按照什么顺序写入数据内。下面也是从芯片手册上的截图。

填充.JPG (82.44 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:05 上传 可以看得出RAM填充顺序了 ,写入一个字节数据时,最低位数据写入一页中最上面那行,最高位写入一页中最下面那行。这样,使用取模软件取模图片或者字符时,我们才能知道按照什么顺序取模。之后再写相应代码,按照顺序把取模数据写入RAM中。


二、天气图标取模 首先当然是先在网络下载我们需要的天气图标,大小看你像显示多大区域的图标,我的是48
48大小图标,在OLED上显示大小也是48*48。

天气图标.JPG (52.09 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:08 上传

我使用的是下面这款取模软件,我觉得图标取模不太好,不知道大家有没有推荐的。需要根据SSD1306进行取模软件的设置。比较重要的是取模方式的选择,这是跟SSD1306显示填充顺序对应的,我们需要选择列行式。其他数据点阵选择48,自定义格式选择C51。

设置.JPG (67.82 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:07 上传

选择晴图标,生成如下数组。



取模.JPG (175.94 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:07 上传 上面的小花就是太阳图标,是有点丑,先凑合用吧。


二、软件设计


1、显示天气图标

我们已经按照SSD1306显存填充顺序,取模好图片数据,接下来按照顺序把数据写入RAM就行了,代码如下。

  • typedef enum
      
  • {
      
  •     QINGLOGO =0,
      
  •     YINGLOGO,
      
  •     DUOYULOGO,
      
  •     YULOGO,
      
  •     LEIYULOGO,
      
  •     XUELOGO,
      
  • }WEATHER_TYPE;
      
  • void OLED_ShowWeather(uint8_t x,uint8_t y,WEATHER_TYPE type)
      
  • {
      
  •     unsigned char (*temp)[48];
      
  •     //if(type ==qinglogo )
      
  •         //temp=Qing48;
      
  •     switch(type)
      
  •         {
      
  •             case    QINGLOGO:   temp=Qing48;break;
      
  •             case    YINGLOGO:   temp=Yin48;break;
      
  •             case    YULOGO:     temp=Yu48;break;
      
  •             case    LEIYULOGO:  temp=LeiYu48;break;
      
  •             case    DUOYULOGO:  temp=DuoYun48;break;
      
  •             case    XUELOGO:    temp=Xue48;break;
      
  •             default :
      
  •              temp=Qing48;
      
  •             break;
      
  •     }
      
  •     //OledSetPosition(x,y);
      
  •     for(uint8_t i=0;i<6;i++){
      
  •         OledSetPosition(x,y+i);
      
  •         for(uint8_t j = 0;j<48;j++){
      
  •             WriteData(temp[j]);
      
  •         }
      
  •     }
      
  • }

复制代码
2、按键任务 OLED显示板上的两个按键,主要用于界面切换、获取实时时间、天气数据。增加了按键任务,主要进行这两个按键的处理。右边按键,按下后可以切换界面,现在设置有四个界面。在时间显示界面按下左键,会获取实时时间。在天气显示界面,按下左键会会获取实时天气。

  • #include <stdio.h>
      
  • #include <unistd.h>
      
  • #include <stdbool.h>
      
  • #include “ohos_init.h“
      
  • #include “cmsis_os2.h“
      
  • #include “wifiiot_gpio.h“
      
  • #include “wifiiot_gpio_ex.h“
      
  • #include “wifiiot_pwm.h“
      
  • #include “wifiiot_adc.h“
      
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表