老外程序员12864液晶刷点逻辑!为啥开两个缓冲区?

[复制链接]
770|7
 楼主 | 2019-2-2 21:57 | 显示全部楼层 |阅读模式
void LcdClear(u8 bw)
{
    int i,j;
   // bw=bw ? 0xff : 0x00;
   
    memset(LcdDispImg, 0, sizeof(LcdDispImg));
    memset(LcdDispBuf, 0, sizeof(LcdDispBuf));
   
    for (i=0; i<LCD_PAGES; i++)
    {
        LcdSetPageAddress(i);
        LcdSetColumnAddress(0);
        for (j=0;j<LCD_PHY_WIDTH;j++)  LcdDat(bw);
    }
}

void LcdDrawStart(u16 x0, u16 y0, u16 x1, u16 y1, u8 _dir)
{
   if (_dir == DRAW_SWNE) {
        LcdYpos = y1;  // bug fix: must do it this way to draw bmp
        LcdDir = -1;//画线方向         只对画图有作用
    }else {
        LcdYpos = y0;//
        LcdDir = 1;
    }
         
    LcdLeft = x0;
    LcdRight = x1;
    LcdXpos = x0;
}
void LcdDrawStop(void)
{
    int col = 0;
    int p, c;
    for (p = 0; p < LCD_PAGES; p++) {
        int init = 0;
        for (c = 0; c < LCD_PHY_WIDTH; c++) {
                   //只绘制到
                    if(LcdDispBuf[c] & (1 << p)) {           
                if(! init) {
                    LcdSetPageAddress(p);
                    LcdSetColumnAddress(c);
                } else if(col+1 != c) {
                    LcdSetColumnAddress(c);
                }
                LcdDat(LcdDispImg[p * LCD_PHY_WIDTH + c]);//根据LcdDispBuf把图像缓存数据写到硬件
                col = c;
            }
        }
    }
    memset(LcdDispBuf, 0, sizeof(LcdDispBuf));
}
//为什么要设置两个缓冲区 显示图像缓冲区 显示缓冲区
void LcdDrawPixel(u16 color)
{
    int y = LcdYpos;
    int x = LcdXpos;
    int ycol = y / 8;
    int ybit = y & 0x07;  //00000111 余数小于等于7        就是y%8
    if(color) {
        LcdDispImg[ycol * LCD_PHY_WIDTH + x] |= 1 << ybit;
    } else {
        LcdDispImg[ycol * LCD_PHY_WIDTH + x] &= ~(1 << ybit);
    }
    LcdDispBuf[x] |= 1 << ycol;         //标记128.8中那一页那一列要写字节了 缓冲区代表某页某列
    LcdXpos++;
    if (LcdXpos > LcdRight) {
        LcdXpos = LcdLeft;
        LcdYpos += LcdDir;
    }
}

void LcdDrawPixelXY(u16 x, u16 y, u16 color)
{
    LcdXpos = x;
    LcdYpos = y;
    LcdDrawPixel(color);
}
 楼主 | 2019-2-3 18:47 | 显示全部楼层
为啥逻辑思维思考都得一个标点都要清楚其意义,辅以中文思考逻辑
 楼主 | 2019-2-3 18:48 | 显示全部楼层
也就是说要先把这些翻译成中文意思,再用汉语逻辑推理
 楼主 | 2019-2-3 18:50 | 显示全部楼层
写代码不是都直接英文各种函数来吗?信手拈来就好了嘛!境界没达到?看了过几天又忘了,所以要中文注释?
 楼主 | 2019-2-3 18:52 | 显示全部楼层
感觉没有写代码的优秀天赋………
| 2019-2-4 10:08 | 显示全部楼层
因为图形区域比缓存大一倍
| 2019-2-4 17:41 | 显示全部楼层
其实这个程序不怎么样,应该是用开一个缓冲对应每个点的状态,写入直接先操作这个缓冲,不一样才进行操作;
每次都直接操作最底层的,效率太低,毕竟刷新的时候,没必要一样的值也去操作。
读则直接读此缓冲。
| 2019-2-6 10:51 | 显示全部楼层
本想回复你,却又不知道回复什么,就随便说两句了,两个缓冲区,一般是为了更新方便,或是为了动画处理
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /4 下一条

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