现在在做12864液晶画图,拿的是论坛前辈的代码,在51上通过了,但在F149上画横线正确,画竖线不准确,画竖线的时候线条特别粗,每条竖线占屏幕的九分之一,求助!!主要代码如下
void LCD_write_com(unsigned char com)
{
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
delay_ms(5);
EN_CLR;
delay_ms(5);
}
void LCD_write_data(unsigned char data)
{
RS_SET;
RW_CLR;
EN_SET;
DataPort = data;
delay_ms(5);
EN_CLR;
delay_ms(5);
}
unsigned char ReadByte(void)
{
unsigned char byReturnValue ;
DataPort=0xff ;
RS_SET;
RW_SET;
EN_CLR;
EN_SET;
byReturnValue=DataPort;
EN_CLR;
return byReturnValue ;
}
//增加画点子程序
void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
{
unsigned char Row,Tier,Tier_bit ;
unsigned char ReadOldH,ReadOldL ;
LCD_write_com(0x34);
LCD_write_com(0x36);
Tier=X>>4 ;
Tier_bit=X&0x0f ;
if(Y<32)
{
Row=Y ;
}
else
{
Row=Y-32 ;
Tier+=8 ;
}
LCD_write_com(Row+0x80);
LCD_write_com(Tier+0x80);
ReadByte();
ReadOldH=ReadByte();
ReadOldL=ReadByte();
delay_us(250);
LCD_write_com(Row+0x80);
LCD_write_com(Tier+0x80);
delay_us(250);
if(Tier_bit<8)
{
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 ;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
}
else
{
switch(Color)
{
case 0 :
ReadOldL&=(~(0x01<<(15-Tier_bit)));
break ;
case 1 :
ReadOldL|=(0x01<<(15-Tier_bit));
break ;
case 2 :
ReadOldL^=(0x01<<(15-Tier_bit));
break ;
default :
break ;
}
LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);
}
LCD_write_com(0x30);
}
//画横线
void DrawLineX(unsigned char x0,unsigned char x1,unsigned char y,unsigned color)
{
unsigned char temp;
if(x0>x1)
{
temp=x1;
x1=x0;
x0=temp;
}
for(;x0<=x1;x0++)
DrawPoint(x0,y,color);
}
//画竖线
void DrawLineY(unsigned char x,unsigned char y0,unsigned char y1,unsigned color)
{
unsigned char temp;
if(y0>y1)
{
temp=y1;
y1=y0;
y0=temp;
}
for(;y0<=y1;y0++)
DrawPoint(x,y0,color);
}
回复 板凳lanlansky 的帖子
那“画竖线的时候线条特别粗”这个问题能证明什么呢?
不能证明X的值变了?
回复 4楼柠檬酸钠 的帖子
今天查错,查出来划横线也是错的,不是每次一个点,而是一串点,所以画横线的时候正好是对的,画竖线时就会很粗,改过之后画横线反而不对了,每次划横线只能打出一个点
回复 5楼lanlansky 的帖子
是不是你写的画点的程序有问题,12864我没有用过,只用过5110,画点的程序还是要注意一些的,这部分有问题的话,画出来的图形可能就不是想要的了,也或许图形是出来了但是可能会影响到旁边的显示内容,所以我还建议再看看这部分有没有问题
ReadOldL ^= ( 0x01 << ( 15 - Tier_bit ))
在这里为什么不是ReadOldL ^= ( 0x01 << ( 16 - Tier_bit ))?先减后移位,在这里是16位,应该用16去减才对啊?用15减不是向左少移了一位,造成图像右移一位吗?我是新人,请高手帮忙问答一下谢谢。
本帖最后由 18986650155 于 2015-9-14 18:33 编辑