|
【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“
|
|