本帖最后由 lugl4313820 于 2023-4-4 22:25 编辑
今天学习使用2.9寸墨白墨水屏驱动,下面的局站刷新的函数:
/*功能:局站刷新墨水屏指定区域
*输入参数:x_start x起始坐标
y_start y起始坐标
PART_COLUMN 字符横向像素点
PART_LINE 字符纵向像素点
*/
void EPD_Dis_Part_myself(unsigned int x_start,unsigned int y_start,const unsigned char * datas, unsigned int PART_COLUMN,unsigned int PART_LINE )
{
unsigned int i;
unsigned int x_end,y_start1,y_start2,y_end1,y_end2;
x_start=x_start/8; //转换为byte 一次纵向写8个像素 x轴起始坐标
x_end=x_start+PART_LINE/8-1; // x轴结束坐标
y_start1=0; // y轴开始坐标
y_start2=y_start-1; // y轴结束坐标
if(y_start>=256) //2.9寸屏 横向为256个像素点,如果大于256测从头开始
{
y_start1=y_start2/256; //高位
y_start2=y_start2%256; //低位
}
//处理y轴结束坐标
y_end1=0;
y_end2=y_start+PART_COLUMN-1;
if(y_end2>=256)
{
y_end1=y_end2/256;
y_end2=y_end2%256;
}
//设置 绘图区域
Epaper_Write_Command(0x44); // 0x44 为设置x轴起始坐标 set RAM x address start/end, in page 35
Epaper_Write_Data(x_start); // 先写起始x坐标 RAM x address start at 00h;
Epaper_Write_Data(x_end); // 后写结束x坐标 RAM x address end at 0fh(15+1)*8->128
Epaper_Write_Command(0x45); // 0x45 为设置y轴起始坐标 set RAM y address start/end, in page 35
Epaper_Write_Data(y_start2); // 先写起始y坐标高8位 RAM y address start at 0127h;
Epaper_Write_Data(y_start1); // 再写起始y坐标低8位 RAM y address start at 0127h;
Epaper_Write_Data(y_end2); // 先写结束y坐标高8位 RAM y address end at 00h;
Epaper_Write_Data(y_end1); // 再写起始y坐标低8位
//设置 数据写入区域
Epaper_Write_Command(0x4E); //0x4E set RAM x address count to 0;
Epaper_Write_Data(x_start); //设置写入区域x起始地址
Epaper_Write_Command(0x4F); // set RAM y address count to 0X127;
Epaper_Write_Data(y_start2); //设置写入区域y起始地址高8位
Epaper_Write_Data(y_start1); //设置写入区域y起始地址低8位
// 开始写入数据
Epaper_Write_Command(0x24); // Write Black and White image to RAM
for(i=0;i<PART_COLUMN*PART_LINE/8;i++)
{
Epaper_Write_Data(*datas);
datasA++;
}
EPD_Part_Update(); //局部更新数据
}