一,字库和码表

在OLED显示屏上显示字符,和在点阵上显示图像是一样的
都是通过区域内的像素点的亮暗来呈现图案
以1608字体码表为例,代码中表现如下:

const unsigned char asc2_1608[95][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/
{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
}

二,什么是1608

1608代表着字符显示的区域大小,即高度16位*宽度8位

上图显示为1608区域图,每一个点由一个位控制点亮/熄灭
结合之前给出的码表,每个字符记录为一个16字节表达式

即每2个字节绘制一列,共8列,即16字节显示一个字符


三,1608的赋值顺序

我们知道了16字节控制一个字符的显示,现在说一下如何显示

这16个字节按照从上到下,从左到右的方式进行赋值

如果我们想要显示一个字母A,那么:

使用工具,转化为16字节字模配置

{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",0*/

四,1206和2412字体

简单说一下2412,即高度24*宽度12
与1608同理,即高度24个位拆分为3字节,宽度12,即36字节控制一个字符显示

重点说一下1206:
1206,即高度12*宽度06
我们发现高度12不是8的倍数(12*6=72依然是8的倍数)
但我们还会按照从上到下,从左到右的顺序控制显示

如图,1206的第一列有1.5字节控制,第二列由剩余0.5字节+1字节控制

所以一个1206字符由3*3 = 9字节控制


五,代码操作

现在我们知道了OLED的显示和赋值原理,那么看一下代码控制显示的实现

/*** 在指定位置显示字符* x:0~127* y:0~63* mode: 0:反白显示 1:正常显示       * size: 字号 12/16/24
**/
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{                   u8 temp,t,t1;u8 y0=y;u8 csize=(size/8+((size%8)?1:0))*(size/2);//字符对应点阵字节数chr=chr-' ';//得到在字库码表中的位置索引for(t=0;t<csize;t++){   if(size==12)  temp=asc2_1206[chr][t]; // 1206字体else if(size==16)temp=asc2_1608[chr][t]; // 1608字体else if(size==24)temp=asc2_2412[chr][t]; // 2412字体else return;                 // 未匹配到字库-放弃//画点for(t1=0;t1<8;t1++){if(temp&0x80)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp<<=1;y++;//判断是否画到了最底部 - 如1206,到达底部后,当前字节未画完,换新列继续画if((y-y0)==size){y=y0;x++;break;}}    }
}

修改记录:
20161216:
修改错别字
添加使用PC2LCD生成字符码表的配置和截图
20170306:
修改错别字

OLED显示-字库码表原理相关推荐

  1. LCD / OLED显示汉字,取模软件PCtoLCD2002完美版

    一.LCD显示汉字结果展示: 二.取模软件的使用(PCtoLCD2002完美版) 1. 打开软件,模式为(字符模式) 点击菜单栏[选项],打开字模选项 勾选[阴码点阵].逐列式取模.顺向(高位在前,低 ...

  2. 基于stm32硬件IIC的oled显示

    一 stm32硬件IIC 硬件IIC特性架构 ①通讯引脚 查看对应开发板芯片的原理图可以查看对应IIC外设引脚的位置 这里代码采用的是stm32f103c8t6,硬件IIC的外设引脚为PB6 PB7, ...

  3. 基于 SPI 协议的0.96 寸OLED显示

    目录 一. SPI 协议 1.简介 2.SPI的连接方式 3.通信过程​ 二.OLED 1.OLED原理 2.点阵编码原理与显示 三.OLED显示实验 Demo 程序 1.要求 2. OLED 显示汉 ...

  4. STM32——OLED显示实验

    一.关于OLED 1.OLED(有机发光二极管)又称有机电激光显示.OLED同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲面板.使用温度范围广.构造及制作过程简单等特性. ...

  5. 【嵌入式基础】基于IIC和SPI协议的温湿度采集与OLED显示

    本文主要介绍IIC总线通信协议和SPI协议,并使用STM32系列芯片基于IIC协议实现AHT20温湿度传感器上位机数据采集,基于SPI协议实现OLED显示. 目录 一.IIC总线通信协议 1.IIC协 ...

  6. 正点原子OLED显示实验

    目录 简介 原理 接口方式 1.8080并行接口 2.SPI方式 常用命令 编写代码 IO口 软件设计 OLED初始化代码: OLED_Refresh_Gram函数 OLED_WR_Byte函数 画点 ...

  7. 基于IIC和SPI协议的温湿度采集与OLED显示

    前言 环境 KEIL:5.0 FIyMcu:V0.993 开发板:STM32F103C8T6 器件 AHT-20 温湿度传感器 0.96英寸OLED屏幕 任务1内容 学习I2C总线通信协议,使用STM ...

  8. 用单片机在屏幕上显示字库中的汉字

    在屏幕上显示字库中汉字 显示原理 字体模型 1.取模 2.字库 显示函数的实现 1.首先实现点亮一个点 2.以汉字12 * 12,字符6 * 12为例写的驱动函数 3.显示函数(集成到一个函数中) 总 ...

  9. 基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析

    基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析 简   介 一.项目说明 二.学习入门 1)开始了解例程 三.实战过程 ...

最新文章

  1. 复习计算机网络基础 day5--物理层
  2. a java_java程序弹出a java exception has occurred
  3. BLE安全机制从入门到放弃
  4. c语言对分查找实验报告,C语言实验指导.doc
  5. JZOJ 5477. 【NOIP2017提高组正式赛】宝藏
  6. 报错Submitted credentials for token did not match the expected credentials
  7. 扫地机器人湿地_什么品牌的扫地机器人性价比最高?
  8. 论接单报价管理与ERP信息化管理的重要性
  9. 从os.cpus()来分析nodejs源码结构
  10. 算法导论 pdf_[LaTeX 宏包] clrscode3e - 排版《算法导论》风格的伪代码
  11. 计算机操作系统|汤小丹|第四版|习题答案(六)
  12. php用空格分隔字符串,分割字符串空格
  13. html把中文转成英文,html转换中英文
  14. 韩立刚老师 《计算机网络》视频课程目录
  15. 贪心法(作业调度问题)
  16. 【题解】P5369 [PKUSC2018]最大前缀和(状压 DP)
  17. 可调直流稳压电源的工作原理以及常见问题
  18. 解除隐藏文件cmd命令_用DOS命令怎么取消隐藏文件夹
  19. 理财基金国瀚实业公司理财:不懂理财知识如何做好投资
  20. Android-传感器开发-方向判断

热门文章

  1. Python-nowcoder 求平均年龄放苹果
  2. NetSuite知识会第4谈 - CSV导入串讲
  3. vue中实现二维码登录功能
  4. Linux下不重启永久修改hostname
  5. Web安全之Aspx安全分析总结
  6. 【原版教材•中英对照】半导体器件物理——这本经典著作在半导体器件领域树立起了先进的学习和参考典范
  7. RNA测序研究现状与发展
  8. 关于如何查询一个期刊是否被SCI或其他机构收录
  9. 澳监督机构:可口可乐广告“完全不能令人接受”
  10. 河北传媒学院计算机专业分数线,河北传媒学院2019年河北各专业录取分数线