找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3433|回复: 5
打印 上一主题 下一主题
收起左侧

关于0.91寸oled的ssd1306时序问题

[复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 3 次(中奖概率 70%)
跳转到指定楼层
楼主
本帖最后由 xda 于 2020-2-27 11:07 编辑

说起来奇怪,在开始使用中景园的历程点亮oled的时候,发现iic的初始化时序部分居然可以用spi的,查看ssd1306的手册许久,也没看出来所以然
只变了时序部分,我会在下面贴出来,其他什么都没变,为什么显示会有这么大差别呢,到底是我哪里没注意到,,望大神指点
===================================iic原本时序===========================================

delay_ms(200);
OLED_WR_Byte(0xAE,OLED_CMD);//关闭显示
        
        OLED_WR_Byte(0xf0,OLED_CMD);//---set low column address
        OLED_WR_Byte(0x0f,OLED_CMD);//---set high column address

        OLED_WR_Byte(0xC8,OLED_CMD);//-not offset

        OLED_WR_Byte(0x81,OLED_CMD);//设置对比度
        OLED_WR_Byte(0xff,OLED_CMD);

        OLED_WR_Byte(0xa1,OLED_CMD);//段重定向设置

        OLED_WR_Byte(0xa6,OLED_CMD);//
        
        OLED_WR_Byte(0xa8,OLED_CMD);//设置驱动路数
        OLED_WR_Byte(0x1f,OLED_CMD);
        
        OLED_WR_Byte(0xd3,OLED_CMD);
        OLED_WR_Byte(0x00,OLED_CMD);
        
        OLED_WR_Byte(0xd5,OLED_CMD);
        OLED_WR_Byte(0xf0,OLED_CMD);
        
        OLED_WR_Byte(0xd9,OLED_CMD);
        OLED_WR_Byte(0x22,OLED_CMD);
        
        OLED_WR_Byte(0xda,OLED_CMD);
        OLED_WR_Byte(0x02,OLED_CMD);
        
        OLED_WR_Byte(0xdb,OLED_CMD);
        OLED_WR_Byte(0x49,OLED_CMD);
        
        OLED_WR_Byte(0x8d,OLED_CMD);
        OLED_WR_Byte(0x14,OLED_CMD);
        
        OLED_WR_Byte(0xaf,OLED_CMD);
        OLED_Clear();


===================================iic原本时序===========================================
===================================移植spi时序===========================================
OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
//        OLED_WR_Byte(0xf0,OLED_CMD);//---set low column address
//        OLED_WR_Byte(0x0f,OLED_CMD);//---set high column address
//        OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
//        OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
//        OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
//        OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
//        OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
//        OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
//        OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
//        OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
//        OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
//        OLED_WR_Byte(0x00,OLED_CMD);//-not offset
//        OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
//        OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
//        OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
//        OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
//        OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
//        OLED_WR_Byte(0x12,OLED_CMD);
//        OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
//        OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
//        OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
//        OLED_WR_Byte(0x02,OLED_CMD);//
//        OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
//        OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
//        OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
//        OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
//        OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
//        
//        OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
//        OLED_Clear();
//        OLED_Set_Pos(0,0);

===================================移植spi时序(去掉屏蔽符号)======================================

这两个到底哪里不同会导致字体大小差异呢,其他函数都没变,一点都没改过,偶尔在点屏的时候发现的一点小意外

IMG_20200225_113448.jpg (4.72 MB, 下载次数: 32)

iic原本的时序显示图

iic原本的时序显示图

IMG_20200225_113246.jpg (4.92 MB, 下载次数: 33)

移植spi时序的显示图

移植spi时序的显示图

IMG_20200225_113355.jpg (5 MB, 下载次数: 40)

移植spi时序的显示图

移植spi时序的显示图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:248659 发表于 2020-2-26 09:41 | 只看该作者
真就没人知道吗
回复

使用道具 举报

板凳
ID:248659 发表于 2020-3-11 17:20 | 只看该作者
自顶,有大神知道这个问题怎么解决不
回复

使用道具 举报

地板
ID:401564 发表于 2020-3-11 20:03 | 只看该作者
你把SPI的函数的先后顺序排得和IIC的一模一样试一下,有一些是双字节命令,顺序是不能变的
回复

使用道具 举报

5#
ID:248659 发表于 2020-3-15 22:38 | 只看该作者
Y_G_G 发表于 2020-3-11 20:03
你把SPI的函数的先后顺序排得和IIC的一模一样试一下,有一些是双字节命令,顺序是不能变的

我调整了部分spi初始化时许,但是还是一样的字体。很好奇,因为这个屏幕我一般用的是iic驱动,然后字体都是默认16*16的,再用spi时序操作的时候没有选择(就只动时序其他代码一律不动)就出现了这个怪问题
回复

使用道具 举报

6#
ID:401564 发表于 2020-3-16 00:49 | 只看该作者
OLED_WR_Byte(0xf0,OLED_CMD);//
OLED_WR_Byte(0x0f,OLED_CMD);//
OLED_WR_Byte(0xC8,OLED_CMD);/
=====================================
OLED_WR_Byte(0xf0,OLED_CMD);//
OLED_WR_Byte(0x0f,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
你看一下你IIC和SPI的操作顺序,根本不同好吗?后面的就不用看了
虽然不能保证一定是这的问题,但找问题就是这么一步一步来的,至少先要保证操作的代码地址是一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表