OLED的中英文和图片显示

OLED的中英文和图片显示

51单片机使用oled时要用到取模软件,本文用PCtoLCD2002进行中英文和图片的取字模

OLED点阵与常规的LCD点阵的显示方式相同,从第一列开始向下取8个点作为一个字节,然后从第二列开始向下取.8个点作为第二个字节…依此类推。取模顺序是从低高,即第-一个点作为最低位。如图显示一行数据的图解。
在这里插入图片描述
要显示一个字符和汉字,都是由字符集的点整数据构成的,这些点阵数据被称为“字模”。计算字模的软件一一PCtoLCD2002。该软件可用来计算各种ASCII 字符、汉字(字体和大小都可以自己设置)、图片的字模。
0.96寸OLED分辨率是128*64,即OLED显示是128行64列;
本文用的是iic通信方式:
它是由数据线 SDA 和时钟 SCL 构成的串行总线, 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送

水平方向分布了128个像素点,垂直方向分布了64个像素点,而驱动芯片在点亮像素点的时候,是以8个像素点为单位的。推荐的是垂直扫描的方式,也就是先画垂直方向的8个像素点,所以我们在画点的时候Y的取值为0-7,X的取值为0-127.
所以在设置取模方式是选择列行式,垂直扫描,页设置为0-7
OLED的显存
存放格式如下.

     Y
 X  [0]0 1 2 3 ... 127 
    [1]0 1 2 3 ... 127 
    [2]0 1 2 3 ... 127 
    [3]0 1 2 3 ... 127 
    [4]0 1 2 3 ... 127 
    [5]0 1 2 3 ... 127 
    [6]0 1 2 3 ... 127 
    [7]0 1 2 3 ... 127 

显示屏有8192个像素,每个发光点都有正负两个电极,全部引出8192*2个驱动电极是不现实的,实际做法是把每列的正极都接在一起引出一个电极,定义为一个段,把每行的负级接在一起引出一个电极,定义为一个公共极,这样12864的点阵,只需要引出128个段引脚、64个公共极引脚、一共有192个引脚即可。

点阵屏像素按128列X64行排列,每一行128个像素单元的阴极是连接在一起,作为公共极,每一列64个像素单元的阳极也连接在一起,作为一段。行列交叉点上的LED就是一个显示单元,即一个像素。要点亮一个像素,只要在该像素所在列电极上加上正电压、行电极接地。同样,要驱动一整行图像,就需要同时把128列信号加载到列电极上,把该行行电极接地。该行显示时,其他63行均不能显示,其行电极应为高电平或悬空。

oled屏显示程序:


unsigned char code picture_tab[]=
{
{0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x01,0x20,0x70,0x28,0x24,0x22,0x21,0x20,0x20,0x24,0x28,0x30,0x60,0x00,0x00},/*"么",0*/
/* (16 X 16 , 宋体 )*/
{0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x01,0x20,0x70,0x28,0x24,0x22,0x21,0x20,0x20,0x24,0x28,0x30,0x60,0x00,0x00},/*"么",1*/
/* (16 X 16 , 宋体 )*/
{0x00,0xFC,0x04,0x04,0xFC,0x00,0x42,0xCC,0x10,0x10,0x90,0x7F,0x90,0x10,0x10,0x00},
{0x00,0x0F,0x04,0x04,0x0F,0x40,0x20,0x1F,0x28,0x46,0x41,0x40,0x40,0x43,0x4C,0x00},/*"哒",2*/
/* (16 X 16 , 宋体 )*/
};         
void mingling(unsigned char command)     
 //写命令
  { 
    unsigned char counter;
      for(counter=0;counter<8;counter++)  
     //发送数据
       { 
      SCL=0;//将SCL总线拉低,为SDA电平变化做准备
         SDA=(command&0x80)>>7;
         command=command<<1;
	SCL=1;//将SCL拉高,现在可以检测SDA的电平了
       _nop_();
       SCL=0;//8位数据传输完成后,将SCL拉低
        }
   }
  
  void shuju(unsigned char command)  
  //写数据
  { 
    unsigned char counter;
      for(counter=0;counter<8;counter++)
    //发送数据
       {
         SCL=0;//将SCL总线拉低,为SDA电平变化做准备
      SDA=(command&0x80)>>7;
   command=command<<1;   
        _nop_();
       SCL=1;//将SCL拉高,现在可以检测SDA的电平了
    
       _nop_();
       SCL=0;8位数据传输完成后,将SCL拉低
       }

   }
   void lie_set(unsigned char lie)
   //设置列
          {
       mingling(0x10|(lie>>4));
       mingling(0x00|(lie&0x0f));  
    }
void hang_set(unsigned char hang)
//设置行
             {
      mingling(0xb0+hang);
       }
void Screen_clear()
//oled复位
          {
      unsigned char hang,lie;
     for(hang=0;hang<8;hang++)             
     //行循环
       { 
      hang_set(hang);
      lie_set(0);   
      for(lie=0;lie<128;lie++) 
      //列循环
         {
         shuju(0x00);
        }
      }
      }
void Screen_check() 
       {
      unsigned char hang,lie;
     for(hang=0;hang<8;hang++)             
     //行循环
       { 
      hang_set(hang);
      lie_set(0);   
      for(lie=0;lie<128;lie++) 
      //列循环
         {
         shuju(0xff);
        }
      }
      }
void Picture_display(unsigned char *ptr_pic)
        {
    unsigned char hang,lie;
       for(hang=0;hang<(64/8);hang++)      
        //行循环
       { 
      hang_set(hang);
      lie_set(0);   
      for(lie=0;lie<128;lei++) 
      //列循环
         {
         shuju(*ptr_pic++);
      }
    }
    Delay(15);
  }

如果我们需要改变屏幕的显示内容,我们可以将picture_tab[ ] 数组中的数据进行修改

取模方式:
修改picture_tab[ ] 数组数据我们需要取模软件来获取显示内容的数据,中英文与图片的取模方式略有不同 。

1、中文取模方式:
(1)打开字模软件,模式选择字符模式,
在这里插入图片描述
(2)点击选项,设置成如图格式
在这里插入图片描述(3)在空白框输入要填写的汉字,带点击生成字模
可以调整字宽与字高使屏幕显示使更清晰。
在使用取模软件时,注意图片的高度和宽度都要是16的倍数。
在这里插入图片描述
(4)将字模复制到程序函数中调用,在oled屏上即可实现汉字显示。
2、英文取模方式:
第(1)步与第(2)步同汉字取模,
(3)在空白框输入要填写的英文,带点击生成字模,适当调换字体使屏幕显示清晰
在这里插入图片描述
(4)将字模复制到程序函数中调用,在oled屏上即可实现英文显示。
3、图片取模方式:
(1)打开模式,选择图形模式,建立合适宽度与高度的图片

在这里插入图片描述
(2)点击选项,修改设置
在这里插入图片描述(3)绘制图片,生成字模
在这里插入图片描述(4)将字模复制到程序函数中调用,在oled屏上即可实现图片的显示。

对图片取模还有一种方法:
(1)打开电脑绘图软件,点击新建,点击文件,属性设置如图格式

在这里插入图片描述
(2)绘制所需要的图片
在这里插入图片描述(3)将图片存为bmp格式在这里插入图片描述

(4)打开PCtoLCD2002 ,添加刚刚绘制的图片 设置成如图格式,点击生成字模。则可以出现图片字模。
在这里插入图片描述在这里插入图片描述
(5)将字模复制到程序函数中,即可调用。

当改变字宽与字高时字的形态也会发生变化,字模也会发生变化,用英文取模方式来演示:
在这里插入图片描述当改变字字高由16变为32时,发现字的高度时原来的2倍,且字模发生了变化。

在这里插入图片描述
当字宽与字高分别增加2倍时,字母的面积变为原来的4倍,同时字模也发生变化,

注意:此模块为128*64像素,所以宽度不能超过128,高度不能超过64,否则屏幕无法全部显示字母。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA是一种可编程逻辑器件,它可以通过编程来实现各种功能。而OLED是一种显示技术,能够在显示屏上显示图像和文字。 要在FPGA上实现中文显示,首先需要将中文字符的数据转换为FPGA可识别的格式。中文字符通常使用Unicode编码表示,所以我们需要将Unicode编码转换为对应的中文字库码,例如GB2312或Unicode码点。然后,将中文字库码与对应的OLED显示点阵图像数据一起存储在FPGA的内部存储器中。 在FPGA内存中存储好中文字符的数据后,需要通过FPGA的逻辑电路来控制OLED显示屏。FPGA可以使用时序控制器来控制OLED的刷新频率和时序,以确保正确显示中文字符。通过逻辑电路的设计,可以将FPGA与OLED的数据接口连接起来,将存储在FPGA内存中的中文字符数据传输到OLED进行显示。 为了在OLED显示中文,需要根据中文字库码找到对应的点阵图像数据,并将其显示在相应的位置。在FPGA的逻辑电路中,可以使用查表法来实现中文字库码到点阵图像数据的映射。通过逐个像素点地设置OLED的像素值,就可以实现中文字符显示。 总之,要实现FPGA上的OLED显示中文,我们需要将中文字符的数据转换为FPGA可识别的格式,并在FPGA内存中存储这些数据。然后,通过FPGA的逻辑电路控制OLED的刷新频率和时序,同时使用点阵图像数据和中文字符的映射关系来显示中文字符。这样就可以在OLED上成功显示中文了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值