找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2903|回复: 9
收起左侧

关于单片机OLED显示图片的程序,有一条C语言语句不明白 if(y1%8==0) y=y1/8

[复制链接]
ID:813514 发表于 2020-8-16 15:20 | 显示全部楼层 |阅读模式
/***********显示一幅图片*****************/
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{         
unsigned int j=0;
unsigned char x,y;
  
  if(y1%8==0) y=y1/8;      
  else y=y1/8+1;
        for(y=y0;y<y1;y++)
        {
                OLED_Set_Pos(x0,y);
    for(x=x0;x<x1;x++)
            {      
                    OLED_WR_Byte(BMP[j++],OLED_DATA);                    
            }
        }
}
一直搞不明白这条语句  if(y1%8==0) y=y1/8;      
  else y=y1/8+1; 是怎么个思路,为什么如果对8取余为0就除以8,一直搞不明白请教大神们。
回复

使用道具 举报

ID:235200 发表于 2020-8-16 22:37 | 显示全部楼层
把数据送入存储器的换行算法,一行对应有8个字节
回复

使用道具 举报

ID:213173 发表于 2020-8-16 23:02 | 显示全部楼层
        if(y1%8==0) y=y1/8;  //如果y1除以8余0,y等于商(包含0)   
        else y=y1/8+1;                        //如果y1不能整除以8,y等于模+1
举例:y1=0,y=0。
                y1=1~8,y=1。
                y1=9~16,y=2。
                y1=17~24,y=3。
               .......
回复

使用道具 举报

ID:654028 发表于 2020-8-17 11:17 | 显示全部楼层
楼上解释的很清楚。说白了,OLED 屏幕(分辨率是128*64的)一行是8*128个点。所以有8行。程序里面的y1应该是1*128个点的行。那个if函数就是把1*128转换成8*128.这个就是数据手册上说的一页
回复

使用道具 举报

ID:813514 发表于 2020-8-17 14:17 | 显示全部楼层
感谢群里大神解答
回复

使用道具 举报

ID:944266 发表于 2022-3-18 23:28 | 显示全部楼层
最近正好用到OLED,看到很多代码里都有这四行,注释里写着:x1,y1 : 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
但是一直没明白
  if(y1%8==0)
                y = y1/8;
  else
                 y = y1/8 + 1;
这四行的作用,下面for循环
        for(y=y0;y<y1;y++)
        {
                OLED_SetPos(x0,y);
    for(x=x0;x<x1;x++)
                {
                        WriteDat(BMP[j++]);
                }
        }
y初值为y0,然而y++,似乎与上面的if判断并无联系,有没有朋友愿意指点一下,谢谢啦!
回复

使用道具 举报

ID:1011709 发表于 2022-3-20 13:34 | 显示全部楼层
取余等于0表示可以整除8的,OLED 屏幕有8行,建议结合手册来看
回复

使用道具 举报

ID:883242 发表于 2022-3-20 14:19 | 显示全部楼层
全垒打 发表于 2022-3-18 23:28
最近正好用到OLED,看到很多代码里都有这四行,注释里写着:x1,y1 : 起点对角线(结束点)的坐标(x1:1~128,y1 ...

前四行的功能网友都已经说清楚了,你看不懂我没办法。

后面for循环里面的y跟前四行毫无逻辑关系。
回复

使用道具 举报

ID:944266 发表于 2022-3-20 20:03 | 显示全部楼层
f347206352 发表于 2022-3-20 13:34
取余等于0表示可以整除8的,OLED 屏幕有8行,建议结合手册来看

y1%8==0的意思我也明白,屏幕有page0-7,但是他注释里写着y1:1~8
我是不明白他这个判断有什么作用,下面的for循环也没用上这个判断结果
回复

使用道具 举报

ID:944266 发表于 2022-3-20 20:05 | 显示全部楼层
Hephaestus 发表于 2022-3-20 14:19
前四行的功能网友都已经说清楚了,你看不懂我没办法。

后面for循环里面的y跟前四行毫无逻辑关系。

后面for循环里面的y跟前四行毫无逻辑关系,只是不明白他前四行判断的作用在哪里?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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