关于12864液晶画点读写操作,求帮忙

2019-03-25 19:08发布

下面函数里面的
[Col_Low = (Start_Column&0x0f);        //定位列地址设置的低位
Col_High = ((Start_Column>>4)&0x0f)+0x10;//定位列地址设置的高位
Start_Page =PAGE_BASE_ADDR+Start_Page;        //获得真实起始页地址

这几句话的意义是什么?具体意思是什么?表面的意思是Start_Column的低位值赋给Col_Low。而Start_Column的右移4为,为高位值赋给Col_High,为什么还要加0X10?这个查找高低位在液晶显示里面起到什么作用?(开辟地址空间?不像。)而后面又有使用这两个值的,如:
     LCM_Write_Command(Page); // 选择大列
    LCM_Write_Command(Col_High); // 写入起始行地址高四位
    LCM_Write_Command(Col_Low); // 写入起始行地址低四位
求帮助。具体函数如下。
void LCM_put_BMP(unsigned char Start_Page,
                  unsigned char Start_Column,
                  const unsigned char Buffer[],
                  unsigned char Width,unsigned char Height)
{
  unsigned char Column,Page;
  unsigned int tmp=0;
  unsigned char Col_Low=0,Col_High=0; //定义列地址的高低位指令
  unsigned char End_Page=0,End_Column=0; //定义结束页地址、列地址
  if(Start_Page>MAX_PAGE)
      return; // 参数不合法,不绘图,直接返回
  if(Start_Column>MAX_COLUMN)
      return; // 参数不合法,不绘图,直接返回

  End_Page=Start_Page+(Height>>3);
  if(End_Page>MAX_PAGE+1)  // 防止绘图时溢出
     End_Page=MAX_PAGE;

  End_Column=Start_Column+Width;
  if(End_Column>MAX_COLUMN) // 防止绘图时溢出
     End_Column=MAX_COLUMN;

        Col_Low = (Start_Column&0x0f);        //定位列地址设置的低位
        Col_High = ((Start_Column>>4)&0x0f)+0x10;//定位列地址设置的高位

        Start_Page =PAGE_BASE_ADDR+Start_Page;        //获得真实起始页地址
  End_Page = PAGE_BASE_ADDR+End_Page;        //获得真实结束页地址
  for(Page=Start_Page;Page<End_Page;Page++)  
  {
    LCM_Write_Command(Page); // 选择大列
    LCM_Write_Command(Col_High); // 写入起始行地址高四位
    LCM_Write_Command(Col_Low); // 写入起始行地址低四位
    // 每次循环列地址自动加一,所以不用重新设置列地址
    for(Column=0;Column<(End_Column-Start_Column);Column++)
         {  //获得显示内容在数组中的偏移量
      tmp=(Page-Start_Page)*Width+Column;
      tmp=Buffer[tmp];  //获得显示内容
      LCM_Write_Data(tmp); //每列写一个字节,对应点0灭,1亮
    }
  }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。