调用 画 水平线的函数时 12864 上 间隔几个点显示 几个点? 这是为什么?垂直线就没问题....谁能告诉我下 为什么啊???
下面是程序,是不是读取数据的函数不对啊??要比赛了,着急啊{:soso_e154:}
void v_Lcd12864DrawPoint_f(uchar X,uchar Y,uchar Color)
{
uchar Row,Tier,Tier_bit;//Tier_bit的作用:确定该位置是低八位,还是高八位
uchar ReadOldH,ReadOldL;
LCD12864_WriteCmd( 0x34 ) ; //使用扩充指令集
LCD12864_WriteCmd( 0x36 ) ; //使用扩充指令集,图像显示开。
Tier = X >> 4 ; //X的范围是0-127,即0x7f.Tier 除以16,获取它的字。
//12864LCD只能定位地址时,只能定位到字。
//63,即00111111B,Tier:0011B,3
Tier_bit = X & 0x0f;
//Tier_bit:1111B,15
//Tier_bit,取它的低四位。
if(Y< 32)
{
Row = Y ;
}
else
{
Row = Y - 32 ; //Row:0
Tier += 8 ; //Tier:处于下半屏幕
}
LCD12864_WriteCmd(Row+0x80) ;
LCD12864_WriteCmd(Tier+0x80) ;
LCD12864_ReadData();
ReadOldH =LCD12864_ReadData(); //获取以前这个位置(16*16的显示屏)上的数据
ReadOldL =LCD12864_ReadData();
LCD12864_WriteCmd(Row+0x80);
LCD12864_WriteCmd(Tier+0x80);
if(Tier_bit<8) //Tier_bit=15
{
switch(Color)
{
case 0:ReadOldH&=(~(0x01<<(7-Tier_bit)));break;
case 1:ReadOldH|=(0x01<<(7-Tier_bit));break;
case 2:ReadOldH^=(0x01<<(7-Tier_bit));break;
default : break ;
}
LCD12864_WriteData(ReadOldH);
LCD12864_WriteData(ReadOldL) ;
}
else
{
switch(Color)
{
case 0:
ReadOldL&=(~(0x01<<(15-Tier_bit))) ;
//ReadOldL&=0xfe;最低位置0,其余位不变。
break;
case 1:
ReadOldL|=(0x01<<(15-Tier_bit));
//ReadOldL|=0x01;=>最低位置1,其余位不变
//若ReadOldL&=0x01;=>最低位置1,其余位置0
break;
case 2:ReadOldL^=(0x01<<(15-Tier_bit));break;
default : break ;
}
LCD12864_WriteData(ReadOldH);
LCD12864_WriteData(ReadOldL);
}
LCD12864_WriteCmd(0x30);
}
uchar LCD12864_ReadData(void)
{
uchar i, readValue;
i = 0;
while( LCD12864_Busy() == 0)
{
LCD12864_Delay1ms(1);
i++;
if( i>100)
{
return 0; //超过等待退出
}
}
LCD12864_RS = 1; //选择命令
LCD12864_RW = 1;
LCD12864_EN = 0;
LCD12864_Delay1ms(1); //等待
LCD12864_EN = 1;
LCD12864_Delay1ms(1);
readValue = LCD12864_DATAPORT;
LCD12864_EN = 0;
return readValue;
} |