Arduino三个oled中文显示程序,程序的主要功能

qq_57798821 2021-05-06 03:24:22
一、主要功能:利用oled来显示DHT11检测出来的温湿度
// oled中文显示dht11测量值
#include <dht11.h> // DHT11数字传感器库
dht11 DHT11;
#define DHT11PIN 2 // Data链接数字针脚2
#include "U8glib.h" // OLED库
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C
#define word1W 16 //定义第一个汉字的宽度
#define word1H 16 //定义第一个汉字的高度
#define word2W 16 //定义第二个汉字的宽度
#define word2H 16 //定义第二个汉字的高度
#define word3W 16 //定义第三个汉字的宽度
#define word3H 16 //定义第三个汉字的高度
#define word4W 16 //定义第四个汉字的宽度
#define word4H 16 //定义第四个汉字的高度
#define word5W 16 //定义第五个汉字的宽度
#define word5H 16 //定义第五个汉字的高度
//第一个汉字的编码“温”
static unsigned char word1[] U8G_PROGMEM = {
0x00,0x00,0xC4,0x1F,0x48,0x10,0x48,0x10,0xC1,0x1F,0x42,0x10,0x42,0x10,0xC8,0x1F,
0x08,0x00,0xE4,0x3F,0x27,0x25,0x24,0x25,0x24,0x25,0x24,0x25,0xF4,0x7F,0x00,0x00};
//第二个汉字的编码“照”
static unsigned char word2[] U8G_PROGMEM = {
0x00,0x00,0xE4,0x1F,0x28,0x10,0x28,0x10,0xE1,0x1F,0x22,0x10,0x22,0x10,0xE8,0x1F,
0x88,0x04,0x84,0x04,0x97,0x24,0xA4,0x14,0xC4,0x0C,0x84,0x04,0xF4,0x7F,0x00,0x00};
//第三个汉字的编码“度”
static unsigned char word3[] U8G_PROGMEM = {
0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,
0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70};
//第四个汉字的编码“监”
static unsigned char word4[] U8G_PROGMEM = {
0x20,0x02,0x24,0x02,0x24,0x3E,0x24,0x02,0x24,0x09,0x24,0x11,0xA4,0x10,0x20,0x00,
0x00,0x00,0xFC,0x1F,0x24,0x12,0x24,0x12,0x24,0x12,0x24,0x12,0xFF,0x7F,0x00,0x00};
//第五个汉字的编码“测”
static unsigned char word5[] U8G_PROGMEM = {
0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10};

//绘画第一个汉字的子程序
void word1draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 10, 0,word1W,word1H, word1);//x坐标10,y坐标0,宽度,高度,编码word1
}
//绘画第二个汉字的子程序
void word2draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 28, 0,word2W,word2H, word2);//x坐标28,y坐标0,宽度,高度,编码word2
}
//绘画第三个汉字的子程序
void word3draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 46, 0,word3W,word3H, word3);//x坐标46,y坐标0,宽度,高度,编码word3
}
//绘画第四个汉字的子程序
void word4draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 62, 0,word4W,word4H, word4);//x坐标62,y坐标0,宽度,高度,编码word4
}
//绘画第五个汉字的子程序
void word5draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP(80, 0,word5W,word5H, word5);//x坐标80,y坐标0,宽度,高度,编码word5
}

void draw(void)
{
u8g.setFont(u8g_font_fub14); //设置字体和自号,目前测试字号有fub14,17,20,30,49n
u8g.setPrintPos(0, 40); // 对应 x,y 轴值
u8g.print("H(%) :"); //打印%
u8g.setPrintPos(80, 40); // 对应 x,y 轴值
u8g.print((float)DHT11.humidity);//对DHT11的值打印
u8g.setPrintPos(0, 60); // 对应 x,y 轴值
u8g.print("T(oC):"); //打印oC
u8g.setPrintPos(80, 60); // 对应 x,y 轴值
u8g.print((float)DHT11.temperature); //对DHT11的值打印
}
void setup()
{
Serial.begin(9600);//串口波特率
Serial.println("DHT11 TEST PROGRAM "); //打印DHT11的值
}
void loop()
{
Serial.println("\n"); //打印换行
//int chk = DHT11.read(DHT11PIN);
Serial.print("Humidity (%): "); //打印Humidity (%):
Serial.println((float)DHT11.humidity, 2); //对DHT11的值打印
Serial.print("Temperature (oC): ");//打印Temperature (oC):
Serial.println((float)DHT11.temperature, 2); //对DHT11的值打印
u8g.firstPage();
do {

word1draw();//调用绘画第一个汉字的子程序显示汉字
word2draw();//调用绘画第二个汉字的子程序显示汉字
word3draw();//调用绘画第三个汉字的子程序显示汉字
word4draw();//调用绘画第四个汉字的子程序显示汉字
word5draw();//调用绘画第五个汉字的子程序显示汉字
draw();
}
while( u8g.nextPage() );//循环u8g.nextPage()
delay(200);//延时200s
}




















二、主要功能:利用oled来显示DHT11检测出来的温湿度
//这个程序是一个汉字显示的演示。
//用汉字取模软件“字模提取V2.2”得到汉字的编码
#include "U8glib.h"//调用U8glib.h这个库
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
#define word1W 16 //定义第一个汉字的宽度
#define word1H 16 //定义第一个汉字的高度
#define word2W 16 //定义第二个汉字的宽度
#define word2H 16 //定义第二个汉字的高度
#define word3W 16 //定义第三个汉字的宽度
#define word3H 16 //定义第三个汉字的高度
//第一个汉字的编码“光”
static unsigned char word1[] U8G_PROGMEM = {
0x80,0x00,0x84,0x10,0x88,0x10,0x90,0x08,0x90,0x04,0x80,0x00,0xFF,0x7F,0x20,0x02,
0x20,0x02,0x20,0x02,0x20,0x02,0x10,0x42,0x10,0x42,0x08,0x42,0x04,0x7C,0x03,0x00};
//第二个汉字的编码“照”
static unsigned char word2[] U8G_PROGMEM = {
0x00,0x00,0xBE,0x3F,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x29,0xBE,0x10,0x22,0x3F,
0x22,0x21,0x22,0x21,0x22,0x21,0x3E,0x3F,0x00,0x00,0x12,0x11,0x22,0x22,0x21,0x22};
//第三个汉字的编码“度”
static unsigned char word3[] U8G_PROGMEM = {
0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,
0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70};
//绘画第一个汉字的子程序
void word1draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 1, 0,word1W,word1H, word1);//x坐标1,y坐标0,宽度,高度,编码word1
}
//绘画第二个汉字的子程序
void word2draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 18, 0,word2W,word2H, word2);//x坐标18,y坐标0,宽度,高度,编码word2
}
//绘画第三个汉字的子程序
void word3draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 36, 0,word3W,word3H, word3);//x坐标36,y坐标0,宽度,高度,编码word3
}
void setup(void) {
}//确实只执行一次

void loop(void) {
u8g.firstPage();//调用此过程
do {
word1draw();//调用绘画第一个汉字的子程序显示汉字
word2draw();//调用绘画第二个汉字的子程序显示汉字
word3draw();//调用绘画第三个汉字的子程序显示汉字
} while( u8g.nextPage() );//循环u8g.nextPage()

// rebuild the picture after some delay
delay(500); //数值刷新延迟时间
}


三、主要功能:利用oled来显示DHT11检测出来的温湿度
// oled中文显示dht11测量值
#include <dht11.h> // DHT11数字传感器库
dht11 DHT11; // DHT11数字传感器库
#define DHT11PIN 4 // Data链接数字针脚4

#include "U8glib.h" // OLED库
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C
#define word1W 16 //定义第一个汉字的宽度
#define word1H 16 //定义第一个汉字的高度
#define word2W 16 //定义第二个汉字的宽度
#define word2H 16 //定义第二个汉字的高度
#define word3W 16 //定义第三个汉字的宽度
#define word3H 16 //定义第三个汉字的高度
#define word4W 16 //定义第四个汉字的宽度
#define word4H 16 //定义第四个汉字的高度
#define word5W 16 //定义第五个汉字的宽度
#define word5H 16 //定义第五个汉字的高度

//第一个汉字的编码“温”
static unsigned char word1[] U8G_PROGMEM = {
0x00,0x00,0xC4,0x1F,0x48,0x10,0x48,0x10,0xC1,0x1F,0x42,0x10,0x42,0x10,0xC8,0x1F,
0x08,0x00,0xE4,0x3F,0x27,0x25,0x24,0x25,0x24,0x25,0x24,0x25,0xF4,0x7F,0x00,0x00};
//第二个汉字的编码“湿”
static unsigned char word2[] U8G_PROGMEM = {
0x00,0x00,0xE4,0x1F,0x28,0x10,0x28,0x10,0xE1,0x1F,0x22,0x10,0x22,0x10,0xE8,0x1F,
0x88,0x04,0x84,0x04,0x97,0x24,0xA4,0x14,0xC4,0x0C,0x84,0x04,0xF4,0x7F,0x00,0x00};
//第三个汉字的编码“度”
static unsigned char word3[] U8G_PROGMEM = {
0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,
0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70};
//第四个汉字的编码“监”
static unsigned char word4[] U8G_PROGMEM = {
0x20,0x02,0x24,0x02,0x24,0x3E,0x24,0x02,0x24,0x09,0x24,0x11,0xA4,0x10,0x20,0x00,
0x00,0x00,0xFC,0x1F,0x24,0x12,0x24,0x12,0x24,0x12,0x24,0x12,0xFF,0x7F,0x00,0x00};
//第五个汉字的编码“测”
static unsigned char word5[] U8G_PROGMEM = {
0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10};

//绘画第一个汉字的子程序
void worddraw(void) {
u8g.drawXBMP( 10, 0,word1W,word1H, word1);//x坐标10,y坐标0,宽度,高度,编码word1
u8g.drawXBMP( 28, 0,word2W,word2H, word2);//x坐标28,y坐标0,宽度,高度,编码word2
u8g.drawXBMP( 46, 0,word3W,word3H, word3);//x坐标46,y坐标0,宽度,高度,编码word3
u8g.drawXBMP( 62, 0,word4W,word4H, word4);//x坐标62,y坐标0,宽度,高度,编码word4
u8g.drawXBMP(80, 0,word5W,word5H, word5);//x坐标80,y坐标0,宽度,高度,编码word5
u8g.drawXBMP(0, 30,word1W,word1H, word1);//x坐标0,y坐标30,宽度,高度,编码word1
u8g.drawXBMP(0, 48,word2W,word2H, word2);//x坐标0,y坐标48宽度,高度,编码word2
}

void draw(void) {
u8g.setFont(u8g_font_8x13);//设置字体和自号,目前测试字号有fub14,17,20,30,49n
u8g.setPrintPos(30, 40); //显示的位置
u8g.print((float)DHT11.humidity);// 打印湿度的值

u8g.setFont(u8g_font_8x13);//设置字体和自号,目前测试字号有fub14,17,20,30,49n
u8g.setPrintPos(30, 58); //显示的位置
u8g.print((float)DHT11.temperature);//打印温度的值
}

void setup()
{

}
void loop()
{
int chk = DHT11.read(DHT11PIN); //定义整数变量
u8g.firstPage();
do {
worddraw();//调用绘画第一个汉字的子程序显示汉字
draw();
}
while( u8g.nextPage() );
delay(200);//延迟200毫秒
}

...全文
889 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
使用ArduinoOLED显示屏和AD9833 DDS模块为您的实验室创建有用的波形发生器。 硬件部件: Arduino Nano R3 × 1个 显示SH1106 I2C Oled 128x64像素(4针)× 1个 AD9833 DDS模块× 1个 5V继电器模块(可选)× 1个 电容10 µF × 1个 电容10 nF × 1个 AC-DC 100-220V至5V降压电源模块× 1个 手动工具和制造机: 烙铁(通用) 特征 输出频率在1 Hz至999999 Hz之间 频率变化的两种模式:对数和一位数字 波浪,正弦波,三角形和正方形三种类型 交流或直流输出耦合 在两个预定义的频率值之间连续扫描的能力 仅由一个旋钮控制 集成的屏幕保护程序可以保持OLED显示屏的使用寿命 1kHz正弦波: 1kHz的三角波: 1kHz方波: 注意 DDS模块的输出幅度不是很高,正弦波和三角波的峰峰值平均在550 mV至650 mV之间,对于方波,峰峰值平均约为4.5V,约为峰峰值4.5V。当然,这往往会与频率成反比地下降,但高达1MHz时,它是线性的。AD9833 DDS模块能够产生高达12 MHz的信号,这对我来说不是必需的。如果您需要超过1 MHz,则可以尝试进行实验,并在显示屏上添加一个或两个数字,但这需要对图形界面进行部分重新设计。 输出信号的质量还取决于电源的质量,因此最好使用线性电源,而不是像切换电源那样,以减小从旧项目中恢复的情况的大小。但是,即使使用开关模块,波形的线性度也相当好。 快速参考 原型 我使用了具有10A触点的预组装继电器模块,因为目前我还没有微型簧片继电器,当不需要功率继电器时,这将是避免使用晶体管二极管和电阻器的最佳选择。Arduino数字PIN最多可提供40 mA的电流,因此您不能直接将机电继电器与120/150欧姆线圈连接。 使用电源时务必非常小心!

23,620

社区成员

发帖
与我相关
我的任务
社区描述
EdgeX Foundry 是一个由Linux基金会主持,供应商中立的边缘计算开源项目,旨在为物联网边缘计算提供开放、可扩展的平台。
人工智能edge边缘计算 企业社区 上海·浦东新区
社区管理员
  • EdgeX中文社区
  • 亿琪软件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
EdgeX Foundry 微信官方公众号 (EdgeXFoundryCN) 【优质内容,全站网罗】 持续聚集沉淀来自社区的 EdgeX Foundry 专业内容和资源,点击首页右侧“关注社区”,参与到社区里来吧! 【进阶学习,技术交流】 欢迎在社区的“问答”频道发帖提问,优质回答者将有机会登上社区光荣榜,获得 CSDN 积分,EdgeX 社区头衔等奖励! 【投稿贡献,成为大牛】 我们诚挚邀请你成为社区贡献者,发布优质的自产内容或翻译内容,优质投稿者将有机会登上社区光荣榜,获得 CSDN 积分,EdgeX 社区头衔等奖励!

试试用AI创作助手写篇文章吧