找回密码
 立即注册
楼主: 电子D***

STC32G驱动OLED12864,SPI或I2C两种方式

  [复制链接]

该用户从未签到

3

主题

47

回帖

187

积分

注册会员

积分
187
发表于 2023-8-19 19:25:58 | 显示全部楼层
感谢
回复 送花

使用道具 举报

  • TA的每日心情
    无聊
    2024-1-8 15:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    28

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2023-8-31 10:12:17 | 显示全部楼层
    请把汉字取模教程图片贴上

    点评

    1楼图片有取模软件的设置 的参数啊  详情 回复 发表于 2023-8-31 11:24
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 94 天

    [LV.6]常住居民II

    39

    主题

    995

    回帖

    6872

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6872
    QQ
     楼主| 发表于 2023-8-31 11:24:10 | 显示全部楼层
    tang01 发表于 2023-8-31 10:12
    请把汉字取模教程图片贴上

    1楼图片有取模软件的设置 的参数啊
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    10

    主题

    220

    回帖

    498

    积分

    中级会员

    积分
    498
    发表于 2023-12-14 08:31:37 | 显示全部楼层
    学习了,感谢分享
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    10

    主题

    220

    回帖

    498

    积分

    中级会员

    积分
    498
    发表于 2023-12-15 08:25:03 | 显示全部楼层
    感谢分享
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-26 14:31
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    23

    回帖

    166

    积分

    注册会员

    积分
    166
    发表于 2023-12-15 14:29:30 | 显示全部楼层
    感谢分享,飞跑去拿手上的开发板试试。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:56
  • 签到天数: 150 天

    [LV.7]常住居民III

    5

    主题

    101

    回帖

    690

    积分

    高级会员

    积分
    690
    发表于 2023-12-24 21:07:41 | 显示全部楼层
    "电子DIY小家"老师的OLED12864驱动,写得简练, 算法巧妙, 值得学习,十分感谢.


    然而在 OLED_BuffShowLine() 画线函数中, 感觉算法有点值得商榷之处, 斗胆说说.....

    源代码此函数中是这样写的:  原状复制粘贴一下....

    //========================================================================
    // 函数名称: OLED_BuffShowPoint
    // 函数功能: OLED显示一条线
    // 入口参数: @x1:x起点  @y1:y起点  @x2:x终点   @y2:y终点
    // 函数返回: 无
    // 当前版本: VER1.0
    // 修改日期: 2023 - 6 - 7
    // 当前作者: ZCF
    // 其他备注: 写入的是缓存,需要调用OLED_BuffShow才能显示出来
    //========================================================================
    void OLED_BuffShowLine( unsigned char x1, unsigned char y1, unsigned char x2,unsigned char y2)
    {
        unsigned char x,y;
        if( x1>x2 )
        {
            x=x1;x1=x2;x2=x;
            y=y1;y1=y2;y2=y;
        }
        if(x1!=x2)
        {
            for( x = x1; x <= x2; x++ )
            {
                if( y2>y1 )
                    OLED_BuffShowPoint(x, (unsigned char)(y1+(u16)(y2-y1)*(u16)x/(u16)(x2-x1)));
                else
                    OLED_BuffShowPoint(x, (unsigned char)(y1-(u16)(y1-y2)*(u16)x/(u16)(x2-x1)));
            }        
        }
        else
        {
            if( y1>y2 )
            {
                for( y = y2; y <= y1; y++ )
                   OLED_BuffShowPoint(x1, y);
            }
            else
            {
                for( y = y1; y <= y2; y++ )
                   OLED_BuffShowPoint(x1, y);            
            }
        }
    }

    例程中有段演示程序,体现此函数的用法:

    //-----------------------------------------显示线-----------------------------------------   
            OLED_BuffClear();                                                       //清除全部缓存
            OLED_BuffShowString(32,0,"画线测试");                        //显示数据
            OLED_BuffShow();                                                        //将缓存写入显示屏显示       

            for( i=0;i<6;i++ )                                                      //循环6次
            {
                OLED_BuffShowLine(4,16+8*i,124,16+8*i);              //显示横着6条线
                OLED_BuffShow();                                                    //刷新显示
                delay_ms(100);
            }        
            for( i=0;i<16;i+=1 )                                                    //循环16次
            {
                OLED_BuffShowLine(8*i+4,16,8*i+4,56);                               //显示16条数线
                OLED_BuffShow();                                                    //刷新显示
                delay_ms(100);
            }  


    运行正常.. 看不出问题....
    如果在主函数main中的while(1)在之前. 加入这样几行代码, 用仿真跟踪单步执行试试看....
      ......

      OLED_BuffClear();                            //清屏...
      OLED_BuffShow();                            //刷新显示...
      OLED_BuffShowLine(0,0,127,63);       //从起点(0,0)到终点(127,63) 画一条斜线...
      OLED_BuffShow();                            //刷新显示...正常....
      OLED_BuffShowPoint(25,25);             //在屏幕的(25,25)位置显示一个点, 为接下来所画斜线作为起点....
      OLED_BuffShow();                            //刷新显示...正常....
      OLED_BuffShowLine(25,25,127,63);   //从起点(25,25)到终点(127,63) 再画一条斜线...
      OLED_BuffShow();                            //刷新显示...问题就来了....  发现: 起点既不在(25,25) 终点也不在(127,63)...

      ......
    很奇怪吧? 感觉是算法问题吧?
    经推敲验证发现: 只要x1==x2  或 y1==y2  即画水平线或垂直线, 是没有问题的,
    恰巧, 演示中是画表格,不是水平线,就是垂直线. 所以很正常....
    而且, 只要起点 x1=0 也没有问题. 所以第一条对角线, 正常显示...
    但如果用此函数在其它起始坐标点画斜线的话, 估计大概率是出错的....

    如果感觉这是个问题需要解决的话, 那又如何解决呢?
    我的想法是这样稍稍修改一下:  ( 注意以上和以下源代码中的红色字体部分.... )


            for( x = 0; x <= (x2 - x1); x++ )
            {  if( y2>y1 )
                    OLED_BuffShowPoint(x1+x, (unsigned char)(y1+(u16)(y2-y1)*(u16)x/(u16)(x2-x1)));
                else
                    OLED_BuffShowPoint(x1+x, (unsigned char)(y1-(u16)(y1-y2)*(u16)x/(u16)(x2-x1)));
            }        


    再上机试试看...  未必正确,  仅供参考....



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    3 小时前
  • 签到天数: 100 天

    [LV.6]常住居民II

    7

    主题

    74

    回帖

    639

    积分

    高级会员

    积分
    639
    发表于 2023-12-24 22:09:38 | 显示全部楼层
    mark一下,虽然暂时用不上
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 153 天

    [LV.7]常住居民III

    8

    主题

    78

    回帖

    1034

    积分

    金牌会员

    积分
    1034
    发表于 2023-12-25 20:38:04 | 显示全部楼层
    浦江一水 发表于 2023-12-24 21:07
    "电子DIY小家"老师的OLED12864驱动,写得简练, 算法巧妙, 值得学习,十分感谢.

    验证,正确


    微信图片_20231225203521.jpg 微信图片_20231225203536.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    5

    回帖

    51

    积分

    注册会员

    积分
    51
    发表于 2024-2-7 21:35:03 | 显示全部楼层
    大佬厉害,今天移植到stc8h 硬件spi上面看看,改了一点点适配sh1106,到时候发出来会附上此贴地址
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-9 18:14 , Processed in 0.071553 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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