0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32驱动OLED屏设计方案完成汉字滚动显示

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-31 17:31 次阅读

硬件平台

STM32开发板

0.96寸OLED屏(SPI接口

功能实现

  在OLED屏上实现字符串滚动显示。
  0.96寸OLED分辨率为128*64(128列,64行)。我们可以定义二维数组缓冲区buff[64][128],先将要显示的数据放在缓冲驱动中,然后按固定频率将数据更新到屏幕上。

示例效果

STM32驱动OLED屏滚动显示

poYBAGKV38-AUW1dAANu3KcLXDg512.pngpoYBAGKV36OAO-tRAANW_QwBzJY352.png

软件设计

 显示一列数据函数

/*
函数功能: 显示一列
函数参数:
        u8 x  - 横坐标位置
        u8 y  - 纵坐标位置
        u8 size -字体大小
        u8 *p - 源数据
说    明:保证纵向为8的倍数
取模方式:纵向取模,以8个点为单位进行取模,高位在前
*/
void OLED_DrawRecData2(u8 x,u8 y,u8 size,const u8 *p)
{
    u8 y0=y; //保存y坐标
    u8 i,j;
    u8 data=0;
    for(i=0;i

滚动显示函数(左移显示)

/******************************字符串滚动显示****************************
**左移滚动显示
**  u8 x,u8 y  --- 显示的起始位置
**  u8 size    --- 字体大小
**  u8 *p      --- 需要滚动显示的数据
**  u8 number  --- 要显示的汉字个数
*******************************************************************/
void OLED_Left_Move_Display(u8 x,u8 y,u8 size,u8 *p,u8 number)
{
  int x0=x;//显示的起始位置
  int i=0;
  u8 *data=p;
  u16 cnt=0,offset=0;
  while(1)
  {
    for(cnt=0,i=x0;i<128;i++)
    {
      OLED_DrawRecData2(i,y,size,data+cnt);//显示一列
      cnt+=size/8;//一列的偏移量
    }
    OLED_RefreshGRAM(); //更新一次显示
    x0--;//左移显示
    if(x0<=0)//完整显示完一行数据
    {
       x0=0;
       data+=size/8;//数据的起始位置往后移动
    }  
    offset++;
    if(offset>=number*size+128)//保存显示的数据完整滚动完一遍
     {
        offset=0; //归位
        x0=x;
        data=p;//数据地址归位
     } 
  }   
}

主函数

/*测试数据:  纵向取模,以8个点为单位进行取模,高位在前*/
 u8 font_test2[28][32]=
{
{0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00},/*"欢",0*/

{0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00},/*"迎",1*/

{0x00,0x84,0x10,0x84,0x10,0x88,0x14,0x88,0x13,0x90,0x10,0xA0,0x10,0xC0,0xFF,0xFF,0x10,0xC0,0x10,0xA0,0x11,0x90,0x16,0x88,0x10,0x88,0x10,0x84,0x00,0x84,0x00,0x00},/*"来",2*/

{0x20,0x01,0x20,0x02,0x20,0x04,0x20,0x18,0x20,0x60,0x3F,0x80,0x22,0x00,0x22,0x00,0x22,0x02,0x22,0x01,0x22,0x02,0x23,0xFC,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00},/*"万",3*/

{0x10,0x41,0x12,0x42,0x12,0x44,0x12,0x58,0xFF,0xE0,0x12,0x40,0x12,0x40,0x10,0x40,0x00,0x00,0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x00,0x00,0x00,0x00},/*"邦",4*/

{0x00,0x00,0x00,0x10,0x00,0x20,0x00,0x42,0xFE,0xC4,0x93,0x48,0x92,0x71,0x92,0x42,0x92,0x4C,0x92,0x70,0x92,0x42,0xFE,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00},/*"易",5*/

{0x01,0x00,0x01,0x00,0x77,0xFE,0x11,0x24,0x11,0x24,0x11,0x24,0x17,0xFE,0xF1,0x00,0x10,0x81,0x11,0x02,0x1E,0x0C,0x12,0xF0,0x72,0x0C,0x02,0x82,0x03,0x01,0x00,0x00},/*"嵌",6*/

{0x02,0x20,0x0C,0x20,0x88,0x20,0x69,0x20,0x09,0x20,0x09,0x22,0x89,0x21,0x69,0x7E,0x09,0x60,0x09,0xA0,0x19,0x20,0x28,0x20,0xC8,0x20,0x0A,0x20,0x0C,0x20,0x00,0x00},/*"学",7*/

{0x00,0x00,0x40,0x10,0x40,0x18,0x40,0x10,0x48,0x20,0x44,0x20,0x43,0x20,0x40,0x40,0x40,0x40,0x40,0x82,0x40,0x81,0x40,0x02,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00},/*"习",8*/

{0x01,0x00,0x01,0x00,0x77,0xFE,0x11,0x24,0x11,0x24,0x11,0x24,0x17,0xFE,0xF1,0x00,0x10,0x81,0x11,0x02,0x1E,0x0C,0x12,0xF0,0x72,0x0C,0x02,0x82,0x03,0x01,0x00,0x00},/*"嵌",9*/

{0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x30,0x80,0xC0,0x47,0x00,0x38,0x00,0x07,0x00,0x00,0xC0,0x00,0x30,0x00,0x0C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x00},/*"入",10*/

{0x08,0x00,0x08,0x04,0x09,0x06,0x09,0x04,0x09,0xFC,0x09,0x08,0x09,0x08,0x08,0x08,0x08,0x00,0xFF,0xC0,0x08,0x30,0x08,0x08,0x88,0x04,0x68,0x02,0x08,0x1F,0x00,0x00},/*"式",11*/

{0x01,0x00,0x41,0x01,0x41,0x02,0x41,0x0C,0x7F,0xF0,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0xFF,0x41,0x00,0x41,0x00,0x41,0x00,0x01,0x00,0x00,0x00},/*"开",12*/

{0x00,0x00,0x00,0x04,0x18,0x08,0x68,0x31,0x08,0xC1,0x0B,0x01,0x1D,0x82,0xE9,0x62,0x09,0x14,0x09,0x08,0x09,0x14,0x49,0x22,0x29,0xC2,0x08,0x01,0x00,0x01,0x00,0x00},/*"发",13*/
};
int main(void)
{  
  u8 *p;
  BEEP_Init(); //初始化蜂鸣器
  LED_Init();  //初始化LED灯
  KEY_Init();  //初始化按键
  USART1_Init(115200);  //初始化串口1  
  OLED_Init(); 				  //OLED显示屏初始化
	OLED_Clear(0x00);    	//清屏  
  p=font_test2[0]; //要显示的字符串
  while(1)
  {
    OLED_Left_Move_Display(127,10,16,p,14);//滚动显示
  }
}

结论:0.96寸OLED屏硬件自带滚动显示效果,但使用OLED屏硬件方式实现滚动无法灵活显示,采用软件方式实现滚动显示更加灵活便捷。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355865
  • OLED屏
    +关注

    关注

    0

    文章

    162

    浏览量

    20846
  • 滚动显示
    +关注

    关注

    0

    文章

    10

    浏览量

    5703
收藏 人收藏

    评论

    相关推荐

    应用材料公司的技术突破将OLED显示屏引入平板电脑、个人电脑和电视机

    应用材料公司的全新MAX OLED解决方案支持在更大的玻璃面板上制造OLED显示屏,从而将这项前沿的显示技术从高端智能手机引入平板电脑、个人
    发表于 11-22 14:36 282次阅读

    OLED的烧问题及解决方法

    OLED(有机发光二极管)屏幕因其出色的显示效果和节能特性,已经成为许多高端智能手机、电视和显示器的首选显示技术。然而,OLED屏幕也面临着
    的头像 发表于 11-07 14:21 2080次阅读

    oled是什么显示屏 OLED与LCD的区别

    OLED是什么显示屏 OLED(Organic Light-Emitting Diode),即有机发光二极管,是一种电流型的有机发光器件。其工作原理是通过载流子的注入和复合而致发光,发光强度与注入
    的头像 发表于 10-21 16:40 1508次阅读

    oled显示屏的优缺点有哪些

    OLED(有机发光二极管)显示屏作为一种先进的显示技术,近年来在电子产品领域得到了广泛的应用。其独特的发光原理和构造使其具有一系列显著的优点,但同时也存在一些不容忽视的缺点。以下是对OLED
    的头像 发表于 10-21 16:37 1514次阅读

    物联网系统中显示屏的主要成员_OLED显示屏详解

    01 物联网系统中为什么要使用 OLED 物联网系统中使用OLED的原因主要有以下几点: 显示效果的优越性 高对比度与色彩表现:
    的头像 发表于 09-26 12:20 460次阅读
    物联网系统中<b class='flag-5'>显示屏</b>的主要成员_<b class='flag-5'>OLED</b><b class='flag-5'>显示屏</b>详解

    请问stm32g431rbt怎么显示汉字

    stm32g431rbt怎么显示汉字
    发表于 07-22 07:27

    OLED柔性显示屏的金线封装胶

    OLED柔性显示屏的金线封装胶是确保柔性显示屏中金线连接稳定、防止外界环境侵害的关键材料。OLED柔性显示屏在使用金线进行连接时,需要一种能
    的头像 发表于 07-12 09:46 669次阅读
    <b class='flag-5'>OLED</b>柔性<b class='flag-5'>显示屏</b>的金线封装胶

    STC8xxxx_H_NTC测温OLED显示UART_ADC显温度值OK

    STC8xxxx_H_NTC测温OLED显示UART_ADC显温度值OK
    发表于 06-07 11:11 1次下载

    12864B 带汉字库的液晶 与 arduino 连接 ,你是否顺利显示

    arduino 驱动汉字库的12864B
    的头像 发表于 05-20 14:16 1756次阅读
    12864B 带<b class='flag-5'>汉字</b>库的液晶<b class='flag-5'>屏</b> 与 arduino 连接 ,你是否顺利<b class='flag-5'>显示</b>

    LED显示屏设计方案

    1、LED显示屏基础知识2、LED显示屏设计要素3、LED显示屏驱动方案4、LED显示屏控制系统
    发表于 04-03 17:21 12次下载

    OLED透明与双面显示屏结合会有怎样的效果呢

    OLED透明与双面显示屏的结合,无疑为显示技术领域带来了全新的可能性。这种结合不仅将拓宽显示技术的应用领域,更将改变我们与数字信息的交互方
    的头像 发表于 04-03 14:31 495次阅读

    0.96寸 OLED 显示屏使用手册

    电子发烧友网站提供《0.96寸 OLED 显示屏使用手册.pdf》资料免费下载
    发表于 03-19 11:02 28次下载

    新款iPad Pro采用OLED显示屏及三星显示驱动IC

    网站消息指出,11英寸及12.9英寸iPad Pro新品的独家显示驱动IC (DDI) 供应商将定为三星System LSI。此外,配备LG显示OLED
    的头像 发表于 03-18 15:56 742次阅读

    stm32f407vet6驱动0.96寸oled显示屏无法显示怎么解决?

    stm32f407vet6驱动0.96寸oled——iic协议代码无报错时钟正确显示屏无法显示
    发表于 03-14 06:49

    oled是什么材料 oled是液晶

    OLED (Organic Light Emitting Diode)是一种基于有机材料的发光二极管。与传统的液晶显示屏不同,OLED是一种自发光技术,不需要背光模块,因此具有更高的对比度和更广
    的头像 发表于 01-31 15:37 2975次阅读