找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 854100995
打印 上一主题 下一主题
收起左侧

0.96寸IIC12864OLED最强单片机例程,通俗易懂,方便引用

  [复制链接]
41#
ID:134271 发表于 2020-5-21 12:01 | 只看该作者
"可用于显示程序中定义的变化的变量"
读起来好别扭
回复

使用道具 举报

42#
ID:186157 发表于 2020-5-21 13:05 | 只看该作者
下载一份学习一下
回复

使用道具 举报

43#
ID:303735 发表于 2020-5-21 15:14 | 只看该作者
谢谢分享
回复

使用道具 举报

44#
ID:88256 发表于 2020-5-22 00:19 | 只看该作者
下载一个看看,谢谢分享!
回复

使用道具 举报

45#
ID:748788 发表于 2020-5-22 11:08 | 只看该作者
怎么图片打开得很慢
回复

使用道具 举报

46#
ID:88256 发表于 2020-5-30 16:19 | 只看该作者
之前没有用过OLED,在淘宝下单一个0.96寸(驱动芯片:SH1106(可兼容SSD1306))的时候刚好看到这个帖子,所以干脆就不用卖家提供的测试程序而直接用这个的,OLED一次点亮,但是最后面有一、两列竖线,8页都有,本以为是程序没有处理好(故意设坑的程序也是有遇到的),但看了下程序没有问题,帖子里也没人反应有这个现象,难道是OLED生成就这样的?但很快就否定了。
上卖家页面看带图的评价里是正常的,那就肯定是程序的问题,翻看到另一个卖家里的介绍,里面的一个内容让我注意到了(就不把图片里的文字打出来了,大家自己看图),这个说得很明白,那就百度查找翻看指令,好像没有列偏移的,直接改设置坐标的程序,整行显示的正常了,显示半行的后面还有,肯定是清屏的还需要改,于是又改了全屏、清屏、初始化里的内容,这才一切正常。



之间百度指令时,设置列地址时,有的说列地址是1到128,也有的认为是0到127(针对1306驱动),有这争论是因为设置坐标子函数的最后一句 OLED_WrCmd((x&0x0f)|0x01);     对 |0x01 有人发出疑问,之前没看指令介绍时我也不理解,看了指令认为是编写错误,指令里并不要求列地址低四位里的D0必须为1,那么|0x01就是画蛇添足,也满足不了加一的目的(D0为0有效果,为1就不变),这个欢迎大家讨论一下。我是认为列地址是0到127的,先不说都是习惯地址从0开始的,就大家初始化时列地址低四位是送0x00而不是0x01就能说明问题,而且英文版里的资料也是这样写的,虽然我看不懂英文。     刚才还说到了全屏和清屏子函数,里面的是OLED_WrCmd(0x01);  也就是说列地址低四位是送0X01,而不是0X00,真有点自相矛盾啊

老眼昏花了,对于0.96寸的6*8字符都看不清了,就不对是0X00还是0X01进行验证了,一列的差别对我来说真的不容易看到,希望有人有兴趣验证一下。另外,楼主既然挂上最强的例程,先不说这几个还未定论的数据,至少程序要能选择是SH1106还是SSD1306的驱动,免得驱动不同还得改好几个地方。

再次谢谢楼主分享的程序!


评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

47#
ID:702127 发表于 2020-7-23 16:05 | 只看该作者
谢谢楼主分享,单片机小白第一次接触这个屏幕,正在学习中。
回复

使用道具 举报

48#
ID:465981 发表于 2020-8-31 13:24 | 只看该作者
有大佬可以告知一下32*32的字模怎么取吗?自己取的都是乱码,楼主取好的就可以用
回复

使用道具 举报

49#
ID:432192 发表于 2020-11-10 16:19 来自手机 | 只看该作者
可以使用,就是不明白特殊字体怎么弄的
回复

使用道具 举报

50#
ID:881679 发表于 2021-2-25 16:23 | 只看该作者
楼主强大!威武!为你点赞
回复

使用道具 举报

51#
ID:913075 发表于 2021-4-27 15:46 | 只看该作者
这个程序我用STM32, 会卡死, 我卡死的地方在于SPRINTF这个函数。
回复

使用道具 举报

52#
ID:47177 发表于 2021-4-27 17:24 | 只看该作者
浅谈LCD、OLED、TFT取模及其程序开发的算法取舍https://blog.csdn.net/yagnruinihao/article/details/47133455

单片机控制OLED12864显示屏之模块化编程
https://blog.csdn.net/yagnruinihao/article/details/115842157
回复

使用道具 举报

53#
ID:59830 发表于 2021-5-1 21:17 | 只看该作者
在某一个宝下单一个0.96寸(驱动芯片:SSD1306).
遇到了 白色条.
找了一段时间,不知道什么原因.
下载,测试一下. 谢谢!
回复

使用道具 举报

54#
ID:71297 发表于 2021-5-2 20:48 | 只看该作者
刚好要用到,谢谢楼主了
回复

使用道具 举报

55#
ID:59830 发表于 2021-5-9 15:48 | 只看该作者
关于   最后一句 OLED_WrCmd((x&0x0f)|0x01);  引起的第1竖显示问题解决了.
未解决问题点:  全部点显示  后 ,再全部灭  有 操作时留有  "锯齿余晖"  问题, 请教一下大家

解决问题点:
//问题点1: OLED12864 无显示
  这个程序是 STC89C52 的程序 ,
  1.1 IO修改
    //-STC89C52
        sbit SCL=P1^3; //串行时钟
        sbit SDA=P1^2; //串行数据
     //-STC8H8K 修改后
        sbit SCL=P5^1; //串行时钟
        sbit SDA=P5^0; //串行数据
    加
        //-STC8H8K   频率设置 5.55296Mhz        
        P5M1 &= 0xFE;   P5M0 &= 0xFE;;   //设置为准双向口  P5.0
        P5M1 &= 0xFD;   P5M0 &= 0xFD;;   //设置为准双向口  P5.1        
  1.2现在测试是 STC8H8K  单片机,烧录时内部晶振  改5.5296Mhz.
  
//问题点2: OLED12864 第1列显示不正常
  2.1 修改  LQ12864.h  3个函数
//        // *********************OLED 设置坐标************************************
//        void OLED_Set_Pos(unsigned char x, unsigned char y)
//        {
//                OLED_WrCmd(0xb0+y);
//                OLED_WrCmd(((x&0xf0)>>4)|0x10);
//        //        OLED_WrCmd((x&0x0f)|0x01);  //列的第1行 错误,无法清零
//                OLED_WrCmd(x&0x0f);        //列的第1行 错误,无法清零  修改
//        }
//        // *********************OLED全屏************************************
//        void OLED_Fill(unsigned char bmp_dat)
//        {
//                unsigned char y,x;
//                for(y=0;y<8;y++)
//                {
//                        OLED_WrCmd(0xb0+y);
//        //                OLED_WrCmd(0x01);  //列的第1行 错误,无法清零  注销
//                        
//                        OLED_WrCmd(0x10);
//                        for(x=0;x<X_WIDTH;x++)
//                        OLED_WrDat(bmp_dat);
//                }
//        }
//        // *********************OLED复位************************************
//        void OLED_CLS(void)
//        {
//                unsigned char y,x;
//                for(y=0;y<8;y++)
//                {
//                        OLED_WrCmd(0xb0+y);
//        //                OLED_WrCmd(0x01);  //列的第1行 错误,无法清零  注销
//                        OLED_WrCmd(0x10);
//                        for(x=0;x<X_WIDTH;x++)
//                        OLED_WrDat(0);
//                }
//        }  
//问题点3: OLED12864 时钟只能6Mhz左右才有显示,修改后 5~35MHz 可以
  3.1 修改  LQ12864.h  3个函数(IO操作加入3个 空操作指令) ,增加系统带头文件
                void IIC_Start();
                void IIC_Stop();
                void Write_IIC_Byte(unsigned char IIC_Byte);

4.未解决问题点:  全部点显示  后 ,再全部灭  有 操作时留有  "锯齿余晖"  问题, 请教一下大家

while(1)
        {
                OLED_Fill(0xff); //屏全亮
                delay(4000);
                OLED_Fill(0x00); //屏全灭  操作时留有  "锯齿余晖"  问题:
                delay(4000);
                OLED_P16x16Ch(24,0,1);
                OLED_P16x16Ch(40,0,2);
                OLED_P16x16Ch(57,0,3);
                OLED_P16x16Ch(74,0,4);
                OLED_P16x16Ch(91,0,5);
                for(i=0; i<8; i++)//通过点整显示汉字 -- i表示字表数组的位置
                {
//                        OLED_P16x16Ch(i*16,0,i);
                         OLED_P16x16Ch(i*16,2,i+8);
                         OLED_P16x16Ch(i*16,4,i+16);
                         OLED_P16x16Ch(i*16,6,i+24);
                }
                delay(4000);
                OLED_CLS();//清屏

                OLED_P8x16Str(0,0,"HelTec");//第一行 -- 8x16的显示单元显示ASCII码
                OLED_P8x16Str(0,2,"OLED Display");
                OLED_P8x16Str(0,4,"helte");
                OLED_P6x8Str(0,6,"12345");
                OLED_P6x8Str(0,7,"heltec");
                delay(4000);
                OLED_CLS();

                Draw_BMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
                delay(8000);
                Draw_BMP(0,0,128,8,BMP2);
                delay(8000);
        }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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