OLED自定义显示图像实验(基础->进阶)

发布者:黑白之间最新更新时间:2022-04-20 来源: eefocus关键字:OLED  自定义  显示图像 手机看文章 扫描二维码
随时随地手机看文章

OLED显示实验(8080接口方式)

OLED接口说明

读写流程简述

先根据要写入/读取的数据的类型,设置 DC 为高(针对数据)/低(针对命令),然后拉低片选(选中 SSD1306芯片),接着我们根据是读数据,还是要写数据置 RD/WR为低或者高,如果是写数据或者写命令,就在RD的上升沿,使数据/命令锁存到数据线(D[7:0])上;如果是读数据或者读状态,就在WR的上升沿,使状态/数据所存至数据线(D[7:0])上。


SSD1306 的 8080 并口读写时序解析

 

 

OLED显存的排列


在单片机的内部建立一个OLED的GRAM(需要128*8 个字节),在每次修改的时候,只是修改单片机上的GRAM(实际上就是 SRAM),在修改完了之后,一次性把单片机内部的 GRAM写入到OLED的GRAM中。


OLED基本操作流程

OLED官方库函数的功能

image.png

OLED官方库函数解析

数据写入操作函数

//dat:要写入的数据/命令  

//cmd:数据/命令标志 0,表示命令;1,表示数据;  

void OLED_WR_Byte(u8 dat,u8 cmd)  

{  

    DATAOUT(dat); // 以字节为单位写入PortC端口中         

    OLED_RS=cmd; // 写入数据/命令  

    OLED_CS=0; // 使能片选功能         

    OLED_WR=0;     

    OLED_WR=1; // WR=0,WR=1,是为了实现上升沿  

    OLED_CS=1; // 关闭片选段     

    OLED_RS=1; // DC电平恢复至初始状态      

}  

   


数据写入操作函数的使用

当我们在使用void OLED_Refresh_Gram(void) 函数将我们的128*8的数组写入OLED的GRAM中时,我们必须触发OLED中的WR的上升沿,以便将OLED的数据按字节为单位从D[7:0]写入OLED中。


//更新显存到LCD         

void OLED_Refresh_Gram(void)  

{  

    u8 i,n;           

    for(i=0;i<8;i++)    

    {    

        OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)  

        OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址  

        OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址     

        for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);   

    }     

}  

 


画点操作函数

//画点   

//x:0~127  

//y:0~63  

//t:1 填充 0,清空                    

void OLED_DrawPoint(u8 x,u8 y,u8 t)  

{  

    u8 pos,bx,temp=0;  

    if(x>127||y>63)return;//超出范围了.  

    pos=7-y/8; // 显示要画的点所在的页号  

    bx=y%8; // 当前页的行号  

    temp=1<<(7-bx);  // 要明白为什么这样操作必须要明白取模方式

    if(t)OLED_GRAM[x][pos]|=temp;  // 填充

    else OLED_GRAM[x][pos]&=~temp;  // 清空

}  

 


画点操作函数的使用

#include "oled.h"  

#include "stm32f10x.h"  

#include "delay.h"  

  

int main()  

{  

    u8 x=10, y=10, mode=1;  

      

    delay_init(); // 定时器初始化  

    OLED_Init(); // OLED初始化  

    delay_ms(10); // 等待初始化  

      

    while(1)  

    {  

        OLED_DrawPoint(x, y, mode);  

          

        x++;y++;  

        OLED_Refresh_Gram(); // 将数据更新至OLED的GRAM的缓存中  

          

        x &= 0x1F;  

        y &= 0x1F;  

    }  

}  

 


矩形区域填充函数解析

//x1,y1,x2,y2 填充区域的对角坐标  

//确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63           

//dot:0,清空;1,填充     

void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)    

{    

    u8 x,y;    

    for(x=x1;x<=x2;x++) // 进行行的填充  

    {  

        for(y=y1;y<=y2;y++) // 进行列的填充  

                   OLED_DrawPoint(x,y,dot);  

    }                                                         

    OLED_Refresh_Gram();//更新显示  

}  

 


矩形区域填充函数的使用

#include "oled.h"  

#include "stm32f10x.h"  

#include "delay.h"  

  

int main()  

{  

    u8 x=10, y=10, mode=1;  

      

    delay_init(); // 定时器初始化  

    OLED_Init(); // OLED初始化  

    delay_ms(10); // 等待初始化  

      

    while(1)  

    {  

        OLED_ShowString(10,10,"Hello World",16); // 用2412字体写入(单个字符占24行12列)  

        OLED_ShowString(10,26,"Today:",24); // 用1608字体写入(单个字符占16行8列)  

        OLED_Fill(10,50,30,70,1); // 填充(10,50)到(30,70)的区域  

        OLED_Refresh_Gram(); // 将128*64的数据装入OLED的GRAM中  

    }  

}  

 

显示字符函数

//在指定位置显示一个字符,包括部分字符  

//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    {     

        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) // 判断最高位是否为1  

                          OLED_DrawPoint(x,y,mode);  

            else   

                          OLED_DrawPoint(x,y,!mode);  

            temp<<=1; // 不断向左移位(与上面的判断相呼用来将temp中为1的点点亮)  

            y++;  

            if((y-y0)==size) // 当读到结尾就停(读取长度=字体的长度)  

            {  

                y=y0; // 从第一行开始读  

                x++; // 列+1  

                break;  

            }  

        }      

    }            

}  

 


显示字符函数的使用

#include "oled.h"  

#include "stm32f10x.h"  

#include "delay.h"  

  

int main()  

{  

    u8 x=10, y=10, mode=1;  

      

    delay_init(); // 定时器初始化  

    OLED_Init(); // OLED初始化  

    delay_ms(10); // 等待初始化  

      

    while(1)  

    {  

        OLED_ShowString(10,10,"Hello World",16); // 用1608字体写入(单个字符占16行8列)  

        OLED_ShowChar(10,26,"T",24); // 用2412字体写入(单个字符占24行12列)  

        OLED_Refresh_Gram(); // 将128*64的数据装入OLED的GRAM中  

    }  

}  

 


显式数字的函数

//m^n函数  

u32 mypow(u8 m,u8 n)  

{  

    u32 result=1;      

    while(n--)result*=m;      

    return result;  

}                   

//显示2个数字  

//x,y :起点坐标    

//len :数字的位数  

//size:字体大小  

//mode:模式   0,填充模式;1,叠加模式  

//num:数值(0~4294967295);             

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)  

{             

    u8 t,temp;  

    u8 enshow=0;                             

    for(t=0;t    {  

        temp=(num/mypow(10,len-t-1))%10;  

        if(enshow==0&&t<(len-1))  

        {  

            if(temp==0)  

            {  

                OLED_ShowChar(x+(size/2)*t,y,' ',size,1);  

                continue;  

            }else enshow=1;   

               

        }  

        OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1); // 显示数字对应的ASCII码

[1] [2] [3]
关键字:OLED  自定义  显示图像 引用地址:OLED自定义显示图像实验(基础->进阶)

上一篇:“电容触摸按键实验”实例解析
下一篇:ST-LINK V2 无法下载程序相关问题

推荐阅读最新更新时间:2024-11-16 22:07

未来OLED面板有望采用印刷技术进行量产
    据日本媒体报道,日本山形大学对外宣称该校时任静士教授等人已经成功研发出一种OLED面板生产技术,该生产技术将具有发光体功能的有机化合物与塑料面板组合在一起,这样就可以印刷式的批量生产OLED面板。   OLED面板又称有机EL面板,中文译为有机发光二极管,利用这种材料制成显示面板的电视就是OLED电视。和目前常用的液晶电视、等离子电视相比,OLED电视具有轻、薄、省电,画质好、分辨率高、响应速度快、可弯曲等诸多优势。简单地说,目前市场上平板电视的缺点都将得到克服。业界普遍认为它才是未来平板电视的发展方向。   据了解,在生产OLED面板时都需要在真空条件下在面板表面喷射一种高温的雾化金属,这样就需要面板必须是耐高温的玻璃
[家用电子]
浅析LED背光、LED显示屏及OLED显示屏的区别
  LED背光是指用LED(发光二极管)来作为液晶显示屏的背光源,而LED背光显示器只是液晶显示器的背光源由传统的CCFL冷光灯管(类似日光灯)过度到LED(发光二极管)。液晶的成像原理可以简单的理解为,外界施加电压使液晶分子偏转便如闸门般地阻隔背光源发出光线的通透度,进而将光线投射在不同颜色的彩色滤光片中形成图像。   背光模组由CCFL过渡到LED可以带来很多好处,可以让显示器屏幕的亮度更加均匀,产品功耗更低,外形可以更轻薄时尚。但目前市场上普遍采用的是W-LED(白光LED)背光源,事实上这种背光源仅仅是将发光的元器件更换了而已,而显示效果的提升非常微弱甚至没有提升。而对液晶产品显示效果提升明显的RGB-LED(三色LE
[电源管理]
三星电子高管否认已向LG采购数百万块电视OLED面板
据国外媒体报道,上周多家韩国媒体在报道中表示,三星电子与LG的高管正在洽谈采购电视OLED面板事宜,三星电子将向LG采购数百万块电视OLED面板。 对于向LG采购数百万块电视OLED面板一事,三星电子方面的一名高管已经否认。    从外媒的报道来看,否认向LG采购数百万块电视OLED面板的,是三星电子映像显示事业部总裁韩宗熙,他否认这一业务交易,并表示相关的消息只是传闻。    三星电子向LG采购电视OLED面板的消息,是在上周传出的,多家韩国媒体在报道中称,三星电子和LG正在洽谈采购事宜,三星电子拟向LG采购数百万块电视所需的OLED面板。    外媒在报道中提到,三星电子将向LG采购500万块电视OLED面板,其中今
[电源管理]
三星电子高管否认已向LG采购数百万块电视<font color='red'>OLED</font>面板
前有强敌后有追兵 量子点技术能逆袭吗?
  从2017年下半年开始, 量子点 显示屏市占率大幅度下跌,全球销售片数从2016年的342万片,减为2017年的200万片,减少42%;同期 量子点 材料出货量也从3.11吨减为1.9吨,剩61%。2018年,量子点显示屏有可能实现触底反弹吗?下面就随嵌入式小编一起来了解一下相关内容吧。    量子点 能否实现触底反弹?   从2017年下半年开始, 量子点 显示屏市占率大幅度下跌,全球销售片数从2016年的342万片,减为2017年的200万片,减少42%;同期 量子点 材料出货量也从3.11吨减为1.9吨,剩61%。2018年,量子点显示屏有可能实现触底反弹吗? 等也没用!量子点技术触底反弹希望渺茫    
[嵌入式]
有机LED——更优良的显示
  在近50年中显示器工业经历了也许是最令人感到兴奋的发展,这就是有机发光二极管(organic LED,缩称OLED)。有机半导体是由聚集的非晶分子所形成的,此是一种固体、非结晶物料,没有固定形状的,一般来讲有两类有机发光体,由“小”与“高”分子来区分。   首个实用p-n型有机LED建基于小分子,于1987年由任职Kodak柯达公司的邓青云博士(Dr. Tang Ching Wan)和Steven A. Van Slyke发明,在邓博士研究的有机太阳能电池中释出惊人的绿光之后,两人认定了利用两种有机材料——是空穴的良导体及另一是电子的良导体——即可以在接触面(即结)附近发生光子放射,就好像晶体LED一样,这也需要材料维持其电
[电源管理]
三星将采购LGD面板进军OLED电视市场
全球电视市场竞争激烈,最新消息传出,三星电子将采用竞争对手LG显示的OLED面板,希望借此在OLED电视跃为市场主流之际站稳脚步。 据《韩国商报》报道,三星电子将与LG显示签署采购合约,2022年-2024年,每年向后者购买200万至300万片OLED面板。据Omdia数据,一季度55英寸OLED面板均价为510美元,以此计算,合约价值约达44亿美元。 报道指出,三星电子尚未推出OLED电视机种,但随着OLED电视逐步主流化,三星电子决定向LG显示采购OLED面板。因为如果要等三星显示成功开发QD-OLED面板才推出OLED电视,三星电子很可能会错失商机。 虽然部分专家预测,三星显示有望于今年内开始量产QD-OLED面
[嵌入式]
OLED虽说是目前主流,未来将会被microLED替代?
随着LGD在广州的8.5代OLED面板生产线即将投产,LGD方面开始了大规模的宣传造势,希望推动OLED电视的发展,然而更先进的面板技术兴起正成为OLED电视的最大障碍,可以说OLED电视已错失了发展的最佳时机。 更先进的面板技术悄然崛起 OLED面板技术可谓是当下最先进的面板技术,在智能手机行业OLED面板已日渐普及,高端智能手机普遍采用OLED面板,只有中低端的手机考虑到成本问题而继续采用传统TFT-LCD面板,可以说在智能手机行业OLED面板已逐渐取代TFT-LCD面板。 在电视行业,则存在着QLED与OLED面板技术之争,这两者在高端电视市场已取代TFT-LCD电视,它们在高端电视市场的占比相当,两者并未完全
[嵌入式]
<font color='red'>OLED</font>虽说是目前主流,未来将会被microLED替代?
OLED照明创新潜力巨大,市场将于2011年腾飞
据市场调研公司DisplaySearch,2011年OLED照明市场将会腾飞,2013/2014年OLED照明营业收入将超过无源矩阵OLED显示器,在2018年以前达到60亿美元。数以亿计的美元已被投入到OLED照明领域,尤其是在欧洲、美国和日本。 虽然OLED显示器投入量产已经10年左右了,但OLED照明只是刚刚开始试产和小批量生产。DisplaySearch的显示技术总监Jennifer Colegrove表示:“这是因为OLED显示器与OLED照明面临不同的挑战。”Colegrove还指出,OLED照明的创新性特点在激发设计人员的想像力。 DisplaySearch认为,OLED照明产业中的早期和主要厂商将是飞利浦、通用
[电源管理]

推荐帖子

PCB的一个PPT教程,写得挺好的,新手可以一看。
适合新人!PCB的一个PPT教程,写得挺好的,新手可以一看。谢谢分享了!看是否真的绝对?但确实写得很好,初学入门很快,不熟练的也可以参考看了,PPT不错来看看啊,谢过!有没有提高篇的也可以上传来看看啊~!来看看啊,谢过!看看,感谢LZ分享哈哈哈哈下下来先看一下啊怎么收钱呢~~~谢谢!有DXP的没,最好有提高版谢谢分享了!来赞一个吧。看看,感谢LZ分享看看,感谢LZ分享新手学习一下!!!!学习一下!!!!谢谢楼主分享让我
371340158 PCB设计
电子测量仪器:市场需求继续扩大
作者:佚名阅读:934引用:0发布时间:2006-06-2811:31出处:中国机械网电子仪器是对物质世界的信息进行测量与控制的基本手段。它融合了微电子技术、计算机技术、通信技术、网络技术、新元器件新材料技术、现代测试技术、现代设计制造技术和现代工艺技术等,是现代工业产品中新技术应用最多、最快的产品之一。近年来,我国电子测量仪器行业在经过一段沉寂后,慢慢开始复苏。  生产与销售大幅增长  据中国电子仪器行业协会统计分析,2003年电子测量仪器工业
fighting 测试/测量
关于2.4G无线模块|UART串口转数传收发问题
我的问题是:关于2.4G无线模块的收发问题。问题描述:我有三个数据采集需要,每个采集端我配了一个无线串口发送模块(附图),把UART串口数据转换成2.4G信号发送,但是我接收端也需要用同等型号的该无线串口发送模块进行接收么?如果是,我用一个可以接收三个发过来的信息么???我可以用一个类似网关的设备接收该3个模块发送的数据,然后传到我的已经联网的上位机上吗???有么有这种设备(并且配套了上位机软件)!谢谢解答。关于2.4G无线模块|UART串口转数传收发问题当然是可以的chen
xueyongchao8805 RF/无线
求购二手AM335x Starter Kit 开发板
求购二手AM335xStarterKit开发板,QQ47152894手机:13198555416求购二手AM335xStarterKit开发板我有:qq,364810709我有364810709我有,364810709
lx1314110 淘e淘
【HC32F460开发板测评】NO.5 GUIX的移植和应用
AzureGUIX简介GUIX是微软的高级工业级GUI解决方案,专门针对深度嵌入式,实时和IoT应用程序而设计。微软还提供了名为GUIXStudio的桌面开发工具,该工具允许开发人员在桌面上设计其GUI并生成GUIX代码,然后可以将其导出到目标。GUIX通过了医疗认证IEC-62304ClassC,汽车认证IEC-61508ASILD,工业认证IEC-61508SIL4和运输/铁路认证EN50128。表明GUIX可用于安全
yang377156216 国产芯片交流
保安队HMI开发板-STM32H7S7(焊接篇)
MCU:STM32H7S7NORFLASH:MX25UW256PSRAM:APS256XXNEMMC:THGBMJG6C1LBAIL保安队HMI开发板-STM32H7S7(焊接篇)STM32H7S不是今年刚出的芯片吗?这就有人用上了? 趁热乎
bloody41760 stm32/stm8
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved