标题: 关于单片机OLED显示图片的程序,有一条C语言语句不明白 if(y1%8==0) y=y1/8 [打印本页]

作者: 273765054qq.ocm    时间: 2020-8-16 15:20
标题: 关于单片机OLED显示图片的程序,有一条C语言语句不明白 if(y1%8==0) y=y1/8
/***********显示一幅图片*****************/
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,一直搞不明白请教大神们。
作者: csmyldl    时间: 2020-8-16 22:37
把数据送入存储器的换行算法,一行对应有8个字节
作者: wulin    时间: 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。
               .......
作者: 心有浮生    时间: 2020-8-17 11:17
楼上解释的很清楚。说白了,OLED 屏幕(分辨率是128*64的)一行是8*128个点。所以有8行。程序里面的y1应该是1*128个点的行。那个if函数就是把1*128转换成8*128.这个就是数据手册上说的一页
作者: 273765054qq.ocm    时间: 2020-8-17 14:17
感谢群里大神解答
作者: 全垒打    时间: 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判断并无联系,有没有朋友愿意指点一下,谢谢啦!
作者: f347206352    时间: 2022-3-20 13:34
取余等于0表示可以整除8的,OLED 屏幕有8行,建议结合手册来看
作者: Hephaestus    时间: 2022-3-20 14:19
全垒打 发表于 2022-3-18 23:28
最近正好用到OLED,看到很多代码里都有这四行,注释里写着:x1,y1 : 起点对角线(结束点)的坐标(x1:1~128,y1 ...

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

后面for循环里面的y跟前四行毫无逻辑关系。
作者: 全垒打    时间: 2022-3-20 20:03
f347206352 发表于 2022-3-20 13:34
取余等于0表示可以整除8的,OLED 屏幕有8行,建议结合手册来看

y1%8==0的意思我也明白,屏幕有page0-7,但是他注释里写着y1:1~8
我是不明白他这个判断有什么作用,下面的for循环也没用上这个判断结果
作者: 全垒打    时间: 2022-3-20 20:05
Hephaestus 发表于 2022-3-20 14:19
前四行的功能网友都已经说清楚了,你看不懂我没办法。

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1