• 1.3寸OLED 12864 sh1106带中文字库液晶屏介绍


    1.3寸OLED 12864 sh1106带中文字库液晶屏库简介


    1.3寸OLED 12864 sh1106带中文字库SPI接口的液晶屏,这是一款来自中景园的屏幕。

    在这里插入图片描述

    屏幕技术资料介绍

    链接:https://pan.baidu.com/s/1setO3KIlfqRFJ-utFWSKHQ   
    提取码:8888 
    
    • 1
    • 2
    • 包含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字*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    中文显示的过程,可以从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++;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 首先对将要显示的字符串从字库芯片里面字符地址逐一查询:

    查询字符的过程:

    1. 字符的地址获取: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;
    
    • 1
    • 2
    • 3
    1. 通过字符地址,去获取字符数据。
    取32个字节的数据,存到"fontbuf[32]"
    OLED_get_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32);
    
    • 1
    • 2
    //从相关地址(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引脚)拉高
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 从字库芯片取到数据后,显示到OLED屏幕上。
    //显示汉字到LCD上,y为页地址,x为列地址,fontbuf[]为数据
    OLED_Display_16x16(x,y,fontbuf);
    
    
    • 1
    • 2
    • 3
    //显示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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    对于使用者来说,只需关系如何调佣即可,无需关系是如何实现,这块液晶屏也是借助的第三方的字库芯片来实现的。


      有爱情,便全心对待,没有爱情,也一个人惬意。学会一个人生活,不论身边是否有人疼爱。做好自己该做的,有爱或无爱,都安然对待。缘份到了,便去伸手抓住,缘份未到,就让自己活得精彩。爱情,本就是件宁缺勿滥的事,急不得。
  • 相关阅读:
    运动蓝牙耳机排行榜,目前最好的运动耳机推荐
    设计模式之中介者模式
    Centos安装docker最新版本
    STA学习记录5-时序路径组和外部属性建模
    React笔记(五)hook
    【初始MongoDB】MongoDB的使用(对比MySQL)
    PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
    idea 提示Cannot resolve SpringBootApplication 是啥错
    AIE聚甲基丙烯酸甲酯PMMA微球/聚苯乙烯包覆聚AIE微球/AIE聚四苯基乙烯自由基溶液聚合微球研究
    GRU 浅析
  • 原文地址:https://blog.csdn.net/weixin_42880082/article/details/124921840