【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】oled操作之hello world

描述

本文来源电子发烧友社区,作者:jf_53933321, 帖子地址:https://bbs.elecfans.com/jishu_2288625_1_1.html


hellow world我的一小步,是人类的一大步,我的目标是星辰大海。
1. 今日目标
今天来用这块板子在oled屏上输出helloworld,mcu用I2C控制OLED显示。
2.OLED屏介绍
ssd1306是一款单片CMOSOLED/PLED驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系统。它由128个段和64个公共部分组成。这个IC是为普通阴极型OLED面板设计。
SSD1306内置对比度控制、显示RAM和振荡器,减少了外部组件和功耗。它有256级亮度控制。数据/命令是从通用单片机通过硬件可选的6800/8000系列兼容并行接口发送,I2C接口或串行外围接口。它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3播放器、计算器等。
模块特点:
·        没有背光,需要通过写入指令来开启显示
·        尺寸小:0.96寸,分辨率高:128*64
·        提供多种通信接口:6800、8080、3线/4线SPI、IIC
·        供电3.3V
数据手册见:SSD1780 (adafruit.com)
3.I2C协议介绍
I2C (Inter-Integrated Circuit,内置集成电路),同步(SCL控制) 串行(按位传输)接口。
两线协议-----时钟线和双向数据线,SCL  (Serialclock,串行时钟)和SDA (Serial  Data,串行数据)。
主从协议-----通信双方为主机适配器( 主控制器)和客户设备(从设备)
特点:
交换数据总量少;
数据传输率低;
标准传输频率为100KHZ、400KHZ;
4.程序逻辑
主程序如下,首先初始化OLED,然后给屏幕填充黑色,相当于清空屏幕。再设置I2C通信的波特率,mcu用I2C控制OLED显示。再说的简单点就是通过定位到屏幕某个点,开始画点,字符对应的点的信息就是字库。
定位到某个点的函数如下
  1. void OledSetPosition(uint8_t x, uint8_t y)
  2. {
  3.     WriteCmd(0xb0 + y);
  4.     WriteCmd(((x & 0xf0) >> 4) | 0x10);
  5.     WriteCmd(x & 0x0f);
  6. }
  7.  
复制代码

显示一个字符的函数如下
  1. void OledShowChar(uint8_t x, uint8_t y, uint8_t ch, Font font)
  2. {             
  3.         uint8_t c = 0;
  4.     uint8_t i = 0;
  5.  
  6.     c = ch - ' ';       
  7.     if (x > OLED_WIDTH - 1) {
  8.         x = 0;
  9.         y = y + 2;
  10.     }
  11.  
  12.     if (font == FONT8x16) {
  13.         OledSetPosition(x, y);       
  14.         for (i = 0; i < 8; i++){
  15.             WriteData(F8X16[c*16 + i]);
  16.         }
  17.  
  18.         OledSetPosition(x, y+1);
  19.         for (i = 0; i < 8; i++) {
  20.             WriteData(F8X16[c*16 + i + 8]);
  21.         }
  22.     } else {
  23.         OledSetPosition(x, y);
  24.         for (i = 0; i < 6; i++) {
  25.             WriteData(F6x8[c][i]);
  26.         }
  27.     }
  28. }
  29.  
复制代码
程序主逻辑如下
  1. static void OledmentTask(void *arg)
  2. {
  3.     (void)arg;
  4.  
  5.     OledInit();
  6.     OledFillScreen(0);
  7.     IoTI2cInit(AHT20_I2C_IDX, AHT20_BAUDRATE);
  8.  
  9.     OledShowString(20, 3, "Hello world", 1);
  10. }
  11.  
  12. static void OledDemo(void)
  13. {
  14.     osThreadAttr_t attr;
  15.     attr.name = "OledmentTask";
  16.     attr.attr_bits = 0U;
  17.     attr.cb_mem = NULL;
  18.     attr.cb_size = 0U;
  19.     attr.stack_mem = NULL;
  20.     attr.stack_size = 4096;
  21.     attr.priority = osPriorityNormal;
  22.  
  23.     if (osThreadNew(OledmentTask, NULL, &attr) == NULL) {
  24.         printf("[OledDemo] Falied to create OledmentTask!n");
  25.     }
  26. }
  27.  
复制代码
5. 实物演示
HiSpark
6. 畅像未来

这块屏是可以调节亮度的,以亮度为灰度值,那么可以显示黑白图片了,再大胆一点,刷新率足够的话,按照指定频率显示不同的黑白图片,就可以看黑白电影了。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分