下面函数里面的
[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亮
}
}
}
此帖出自
小平头技术问答
一周热门 更多>