OLED代码详细解析

2019年7月29日
取模软件和相关代码在文末

之前解释了一下怎么在OLED显示汉字,大致就是先把想要显示的汉字的字模放在一个数组中,之后在主函数里一个一个把它调出来,那么这样汉字就显示出来了。
那么汉字显示是显示出来,那么你怎么在OLED液晶屏上排版那?怎么安排它的位置那,今天就以下面的代码为例子详细解释一下。

先贴代码:
OLED_ShowChinese(0,0,0,16);//中
OLED_ShowChinese(18,0,1,16);//景
OLED_ShowChinese(36,0,2,16);//园
OLED_ShowChinese(54,0,3,16);//电
OLED_ShowChinese(72,0,4,16);//子
OLED_ShowChinese(90,0,5,16);//科
OLED_ShowChinese(108,0,6,16);//技
就以上面这七个汉字为例

(0,0,0,16)
我们知道前面两个0分别代表的是x(列)、y(行),第四个数字代表的是顺序(也就是我们字模数组中汉字的排序),16代表的是汉字的大小。

我们之前是不是开辟了一个 128*64的内存,那么这里就用到了。

因为“中”的大小是1616,因为我们是从(0,0)左上角开始显示的,所以一个1616的汉字就像一
16*16的正方形占用了这块内存。

(18,0,1,16)
x=18,y=0,序号为1,大小还是16*16
y=0那么就和上一个汉字排在了同一行;
我们知道上一个汉字写完占用了16列16行,第二个字x=18:他的意思是让这两个汉字之间有两个 bite的间隙

那么显示了前面这两个汉字,就占用了 16+2+16=34列、16行(同一行)

(36,0,2,16) (54,0,3,16) (72,0,4,16) 。。。我想大家也就都知道了。

接下来紧接着下面的代码:
OLED_ShowString(8,16,“ZHONGJINGYUAN”,16);
OLED_ShowString(20,32,“2014/05/01”,16);
OLED_ShowString(0,48,“ASCII:”,16);
OLED_ShowString(63,48,“CODE:”,16); //显示的是字符

(8,16,“ZHONGJINGYUAN”,16)

为什么这样写那? 我们先开y=16,也就是行从16行开始写的,这就明了了啊,这是紧挨着上面的汉字,也就是排在了汉字的下面啊;

x=8:它的意思是在开头空了8个bite,字体的大小还是16*16。

(20,32,“2014/05/01”,16)
y=32:因为前面有两行了啊,大小均是16bite 。
x=20:开头空了20bite。

(0,48,“ASCII:”,16) (63,48,“CODE:”,16)

这两个的y=48也就是说他们在同一行,并且紧挨上面的, “ASCLL:" x=0:说明顶头写
“CODE:” x=63:我们想一下“A S C L L : ”一共6个字符,占用空间为8*6=48 bite,所以x=63 也就说
他们之间有间隙。

OLED_ShowString(0,0,“ABC”,12); //ABC
OLED_ShowString(0,12,“ABC”,16); //ABC
OLED_ShowString(0,28,“ABC”,24); //ABC
分析到这,相信你这三行代码一眼明了啊。

若有错误,轻指正。
//-----------------------------------------------------------------
//********************************************************
怎么将程序里的文字替换成自己想要显示的文字那?

在这里插入图片描述
那么就需要用到下面这个软件了:

里面有取模教程的详细介绍,通过取模软件生成文字所代表的数组,然后替换上图中我们用到的汉字,之后再一个个调用。

链接: 取模软件
提取码:itv6
在这里插入图片描述

在这里插入图片描述
代码链接: link
提取码:8p2i

  • 80
    点赞
  • 389
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
以下是基于esp8266和0.96寸OLED显示屏的天气时钟代码,采用了BME280传感器获取温度、湿度和气压数据,并通过WiFi连接获取天气信息并实时更新显示: ```c++ #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266HTTPClient.h> #include <SSD1306Wire.h> #include <OLEDDisplayUi.h> // WiFi设置 const char* ssid = "YourSSID"; // 你的WiFi名称 const char* password = "YourPassword"; // 你的WiFi密码 // 服务器设置 const String serverName = "http://api.openweathermap.org/data/2.5/weather?q=Shenzhen&appid=YourAPIKey"; // 你的OpenWeatherMap API Key和城市名称 // OLED显示屏设置 SSD1306Wire display(0x3c, D2, D1); OLEDDisplayUi ui(&display); // BME280传感器设置 Adafruit_BME280 bme; // 时间设置 unsigned long currentTime = millis(); unsigned long previousTime = 0; const long interval = 60000; // 更新时间间隔,单位为毫秒 void setup() { Serial.begin(115200); // 初始化OLED显示屏 display.init(); display.setContrast(255); display.setFont(ArialMT_Plain_10); // 初始化BME280传感器 if (!bme.begin(0x76)) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } // 连接WiFi WiFi.begin(ssid, password); Serial.print("Connecting to "); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); } void loop() { currentTime = millis(); if (currentTime - previousTime >= interval) { // 获取天气信息 if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin(serverName); int httpResponseCode = http.GET(); if (httpResponseCode > 0) { String payload = http.getString(); Serial.println(payload); // 解析JSON数据 const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(4) + 60; DynamicJsonDocument doc(capacity); deserializeJson(doc, payload); const char* description = doc["weather"][0]["description"]; float temp = doc["main"]["temp"]; float humidity = doc["main"]["humidity"]; float pressure = doc["main"]["pressure"]; // 显示天气信息 display.clear(); display.drawString(0, 0, "Weather in Shenzhen"); display.drawString(0, 12, description); display.drawString(0, 24, "Temp: " + String(temp) + " C"); display.drawString(0, 36, "Humidity: " + String(humidity) + " %"); display.drawString(0, 48, "Pressure: " + String(pressure) + " hPa"); display.display(); } else { Serial.println("Error on HTTP request"); } http.end(); } else { Serial.println("WiFi Disconnected"); } previousTime = currentTime; } } ``` 需要注意的是,需要在OpenWeatherMap网站上注册账号并申请API Key,替换代码中的YourAPIKey和城市名称。 此外,如果你的OLED显示屏型号不同,可能需要修改相关的设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值