下面是我写的LCD12864的打点程序,使用Mega128控制的,为什么总是不对呢?大家帮忙看看啊!
void set_dot(uchar x,uchar y,uchar color)
{
uchar x_dyte,x_byte;//横坐标在哪一个字节,哪一位
uchar y_dyte,y_byte;//纵坐标在哪一个字节,哪一位
uchar high ,low; //定义存放读出来的两个数据
LCD12864_sendbyte(iCmd, LCDb_EXTCMD1); //拓展指令集
LCD12864_sendbyte(iCmd, LCDb_EXTCMD1); //绘图关
x_dyte=x/16; //算出它在哪一个字节(地址) 一个地址是16位的
x_byte=x&0x0f; //算出他在哪一位
y_dyte=y/32; //确定是上半屏还是下半屏 0:上半屏,1下半屏
y_byte=y&0x1f; //计算0~31当中的哪一行,即确定是在第几行
LCD12864_sendbyte(iCmd,0x80+y_byte);//先写垂直坐标(最高位必须为1)
LCD12864_sendbyte(iCmd,0x80+x_dyte+8*y_dyte);//水平坐标 下半屏的水平坐标起始地址为0x80
//(+8*y_dyte)来确定 是用上半屏还是下半屏
LCD12864_readbyte(iDat); //先空读一次
high=LCD12864_readbyte(iDat); //读高位
low=LCD12864_readbyte(iDat); //读低位
delay_ms(1);
LCD12864_sendbyte(iCmd,0x80+y_byte);
LCD12864_sendbyte(iCmd,0x80+x_dyte+8*y_byte);
if(x_byte<8)
{ if(color==1)
LCD12864_sendbyte(iDat,high|(0X01<<(7-x_byte))); //写高字节因为坐标是从左到右的
else
LCD12864_sendbyte(iDat,high&(~(0X01<<(7-x_byte))));
LCD12864_sendbyte(iDat,low); //原数据送回
}
else
{ LCD12864_sendbyte(iDat,high);
if(color==1)
LCD12864_sendbyte(iDat,low|(0x01<<(15-x_byte)));
else
LCD12864_sendbyte(iDat,low&(~(0x01<<(15-x_byte))));
}
LCD12864_sendbyte(iCmd, LCDb_EXTCMD2); //开绘图
LCD12864_sendbyte(iCmd, LCDb_BASCMD); //基本指令集
}