找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: 854100995
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
楼主
ID:59830 发表于 2021-5-1 21:17 | 显示全部楼层
在某一个宝下单一个0.96寸(驱动芯片:SSD1306).
遇到了 白色条.
找了一段时间,不知道什么原因.
下载,测试一下. 谢谢!
回复

使用道具 举报

沙发
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 单片机教程网

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