12864串口不能读的导致不能能画任意点的解决方法
时间:10-02
整理:3721RD
点击:
12864串口可以节约IO口 但大多数12864都不支持串口读导致不能完成任意点的描绘。通过一个小技巧可以解决这个问题
以下是解决代码:
void DrawDots(uint8 x,uint8 y,uint8 color)//打点函数
{
uint8 row,xlabel,xlabel_bit;
uint8 Read_H=0,Read_L=0;
write_com(0x34); //扩充指令
xlabel=x>>4; //去16*16首地址
xlabel_bit=x&0x0F;
if(y<32) row=y;
else
{
row=y-32;
xlabel+=8;
}
write_com(row+0x80);
write_com(xlabel+0x80);
Read_H=huancun[row][xlabel][1];
Read_L=huancun[row][xlabel][2];
if(xlabel_bit<8)
{
switch(color)
{
case 0:Read_H&=(~(0x01<<(7-xlabel_bit)));huancun[row][xlabel][1]=Read_H; break; //变暗,看不见
case 1:Read_H|=(0x01<<(7-xlabel_bit));huancun[row][xlabel][1]=Read_H;break; //变亮 ,看得见
case 2:Read_H^=(0x01<<(7-xlabel_bit));huancun[row][xlabel][1]=Read_H;break; //反转
default:break;
}
write_data(Read_H);
write_data(Read_L);
}
else
{
switch(color)
{
case 0:Read_L&=(~(0x01<<(15-xlabel_bit)));huancun[row][xlabel][2]=Read_L; break; //变暗 ,看不见
case 1:Read_L|=(0x01<<(15-xlabel_bit));huancun[row][xlabel][2]=Read_L;break; //变亮 ,看得见
case 2:Read_L^=(0x01<<(15-xlabel_bit));huancun[row][xlabel][2]=Read_L;break; //反转
default:break;
}
write_data(Read_H);
write_data(Read_L);
}
write_com(0x36); //绘图指令
write_com(0x30);//恢复正常模式
}
以下是解决代码:
void DrawDots(uint8 x,uint8 y,uint8 color)//打点函数
{
uint8 row,xlabel,xlabel_bit;
uint8 Read_H=0,Read_L=0;
write_com(0x34); //扩充指令
xlabel=x>>4; //去16*16首地址
xlabel_bit=x&0x0F;
if(y<32) row=y;
else
{
row=y-32;
xlabel+=8;
}
write_com(row+0x80);
write_com(xlabel+0x80);
Read_H=huancun[row][xlabel][1];
Read_L=huancun[row][xlabel][2];
if(xlabel_bit<8)
{
switch(color)
{
case 0:Read_H&=(~(0x01<<(7-xlabel_bit)));huancun[row][xlabel][1]=Read_H; break; //变暗,看不见
case 1:Read_H|=(0x01<<(7-xlabel_bit));huancun[row][xlabel][1]=Read_H;break; //变亮 ,看得见
case 2:Read_H^=(0x01<<(7-xlabel_bit));huancun[row][xlabel][1]=Read_H;break; //反转
default:break;
}
write_data(Read_H);
write_data(Read_L);
}
else
{
switch(color)
{
case 0:Read_L&=(~(0x01<<(15-xlabel_bit)));huancun[row][xlabel][2]=Read_L; break; //变暗 ,看不见
case 1:Read_L|=(0x01<<(15-xlabel_bit));huancun[row][xlabel][2]=Read_L;break; //变亮 ,看得见
case 2:Read_L^=(0x01<<(15-xlabel_bit));huancun[row][xlabel][2]=Read_L;break; //反转
default:break;
}
write_data(Read_H);
write_data(Read_L);
}
write_com(0x36); //绘图指令
write_com(0x30);//恢复正常模式
}
通过建立一个三位数组 huancun【32】【16】【2】来保存写入的数据
有不足之处欢迎指正
这是效果图

