1.3寸OLED 12864 sh1106带中文字库液晶屏介绍
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.3寸OLED 12864 sh1106带中文字库液晶屏介绍相关的知识,希望对你有一定的参考价值。
1.3寸OLED 12864 sh1106带中文字库液晶屏库简介
1.3寸OLED 12864 sh1106带中文字库SPI接口的液晶屏,这是一款来自中景园的屏幕。
屏幕技术资料介绍
链接:https://pan.baidu.com/s/1setO3KIlfqRFJ-utFWSKHQ
提取码:8888
- 包含51单片机和STM32案例,满足不同单片机的应用开发需求。提供的案例相对来讲很齐全的。
相关参数介绍
-
整体的屏幕参数:
-
原理图
-
外部引脚接口定义
-
资料所包含有的规格书
GT20L16S1Y 标准点阵汉字字库芯片介绍
GT20L16S1Y是一款内含16x16点阵的汉字库芯片,支持GB2312国标简体汉字(含有国家信标委合法授权)、ASCIl字符。排列格式为竖置横排。用户通过字符内码,利用我司所提供库文件内的函数接口可直接读取该内码的点阵信息。
GT20L16S1Y除含有上述字库以外,芯片提供64KB可擦写空间,包含16个扇区,每个扇区4K字节或16页,每页256字节,可自由写入空间地址范围为:0x6FFFF-0x7FFFF。仅支持上位机烧录,可重复擦写10万次以上。
芯片参数:
- 数据总线:SPI串行总线接口
- 点阵排列方式:竖置横排
- 时钟频率:45MHz@3.3V
- 工作电压:2.7V~3.6V
- 电流:
工作电流:5-15mA
睡眠电流:1-5uA
- 工作温度:-40℃~85℃
- 封装:SOT23-6
- 字符集:GB2312
- 字号:16×16点阵
汉字显示的调用过程
这里以STC单片机为例:
- 显示相关函数
void OLED_Display_GB2312_string(u8 x,u8 y,u8 *text);
void OLED_Display_string_5x7(u8 x,u8 y,u8 *text);
void OLED_ShowNum(u8 x,u8 y,float num,u8 len);
void OLED_Display_128x64(u8 *dp);
void OLED_Display_16x16(u8 x,u8 y,u8 *dp);
void OLED_Display_8x16(u8 x,u8 y,u8 *dp);
void OLED_Display_5x7(u8 x,u8 y,u8 *dp);
//举例:
OLED_Display_GB2312_string(0,0,"12864,带中文字库");
OLED_Display_16x16(97,6,jiong1);/*在第7页,第81列显示单个自编生僻汉字“囧”*/
OLED_Display_string_5x7(0,2,"<!@#$%^&*()_-+]/;.,?[");/*在第3页,第1列,显示一串5x7点阵的ASCII字*/
中文显示的过程,可以从
OLED_Display_GB2312_string(u8 x,u8 y,u8 *text)
了解整个调用和实现的过程。
void OLED_Display_GB2312_string(u8 x,u8 y,u8 *text)
u8 i=0;
u8 addrHigh,addrMid,addrLow;
u8 fontbuf[32];
while(text[i]>0x00)
if((text[i]>=0xb0)&&(text[i]<=0xf7)&&(text[i+1]>=0xa1))
//国标简体(GB2312)汉字在晶联讯字库IC中的地址由以下公式来计算:
//Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
//由于担心8位单片机有乘法溢出问题,所以分三部取地址
fontaddr=(text[i]-0xb0)*94;
fontaddr+=(text[i+1]-0xa1)+846;
fontaddr=fontaddr*32;
addrHigh=(fontaddr&0xff0000)>>16; //地址的高8位,共24位
addrMid=(fontaddr&0xff00)>>8; //地址的中8位,共24位
addrLow=(fontaddr&0xff); //地址的低8位,共24位
OLED_get_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32);
//取32个字节的数据,存到"fontbuf[32]"
OLED_Display_16x16(x,y,fontbuf);
//显示汉字到LCD上,y为页地址,x为列地址,fontbuf[]为数据
x+=16;
i+=2;
else if((text[i]>=0xa1)&&(text[i]<=0xa3)&&(text[i+1]>=0xa1))
fontaddr=(text[i]-0xa1)*94;
fontaddr+=(text[i+1]-0xa1);
fontaddr=fontaddr*32;
addrHigh=(fontaddr&0xff0000)>>16;
addrMid=(fontaddr&0xff00)>>8;
addrLow=(fontaddr&0xff);
OLED_get_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32);
OLED_Display_16x16(x,y,fontbuf);
x+=16;
i+=2;
else if((text[i]>=0x20)&&(text[i]<=0x7e))
unsigned char fontbuf[16];
fontaddr=(text[i]-0x20);
fontaddr=(unsigned long)(fontaddr*16);
fontaddr=(unsigned long)(fontaddr+0x3cf80);
addrHigh=(fontaddr&0xff0000)>>16;
addrMid=(fontaddr&0xff00)>>8;
addrLow=fontaddr&0xff;
OLED_get_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,16);
OLED_Display_8x16(x,y,fontbuf);
x+=8;
i+=1;
else
i++;
- 首先对将要显示的字符串从字库芯片里面字符地址逐一查询:
查询字符的过程:
- 字符的地址获取:
Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
8位单片机地址做了拆分获取,再拼接:
fontaddr=(text[i]-0xb0)*94;
fontaddr+=(text[i+1]-0xa1)+846;
fontaddr=fontaddr*32;
- 通过字符地址,去获取字符数据。
取32个字节的数据,存到"fontbuf[32]"
OLED_get_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32);
//从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出DataLen个字节的数据到 pbuff的地址
//连续读取
void OLED_get_data_from_ROM(u8 addrHigh,u8 addrMid,u8 addrLow,u8 *pbuff,u8 DataLen)
u8 i;
OLED_ROM_CS_Clr();//这里将字库芯片SPI片选(CS引脚)拉低,访问有效
Send_Command_to_ROM(0x03);
Send_Command_to_ROM(addrHigh);
Send_Command_to_ROM(addrMid);
Send_Command_to_ROM(addrLow);
for(i=0;i<DataLen;i++)
*(pbuff+i)=Get_data_from_ROM();
OLED_ROM_CS_Set();//这里获取完字符数据后,将字库片选引脚(CS引脚)拉高
- 从字库芯片取到数据后,显示到OLED屏幕上。
//显示汉字到LCD上,y为页地址,x为列地址,fontbuf[]为数据
OLED_Display_16x16(x,y,fontbuf);
//显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标
void OLED_Display_16x16(u8 x,u8 y,u8 *dp)
u8 i,j;
for(j=0;j<2;j++)
OLED_address(x,y);
for(i=0;i<16;i++)
OLED_WR_Byte(*dp,OLED_DATA); //写数据到OLED,每写完一个8位的数据后列地址自动加1
dp++;
y++;
对于使用者来说,只需关系如何调佣即可,无需关系是如何实现,这块液晶屏也是借助的第三方的字库芯片来实现的。
以上是关于1.3寸OLED 12864 sh1106带中文字库液晶屏介绍的主要内容,如果未能解决你的问题,请参考以下文章
Arduino for esp8266 1.3寸OLED 显示多边形缩放动画
Arduino ESP8266+OLED可视化音乐频谱:11段分频1.3寸OLED显示频谱线
STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动SH1106 OLED屏幕