[求助] MSP430F149控制12864画竖线不准,求帮助

lanlansky   2013-8-13 09:03 楼主
现在在做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);       
}

回复评论 (7)

是不是画竖线的时候    X的值不要动?
点赞  2013-8-13 15:15

回复 沙发柠檬酸钠 的帖子

X的值本来就没有动
点赞  2013-8-13 16:22

回复 板凳lanlansky 的帖子

那“画竖线的时候线条特别粗”这个问题能证明什么呢?
不能证明X的值变了?
点赞  2013-8-13 16:35

回复 4楼柠檬酸钠 的帖子

今天查错,查出来划横线也是错的,不是每次一个点,而是一串点,所以画横线的时候正好是对的,画竖线时就会很粗,改过之后画横线反而不对了,每次划横线只能打出一个点
点赞  2013-8-13 16:43

回复 5楼lanlansky 的帖子

是不是你写的画点的程序有问题,12864我没有用过,只用过5110,画点的程序还是要注意一些的,这部分有问题的话,画出来的图形可能就不是想要的了,也或许图形是出来了但是可能会影响到旁边的显示内容,所以我还建议再看看这部分有没有问题
点赞  2013-8-16 00:09
ReadOldL ^= ( 0x01 << ( 15 - Tier_bit )) 在这里为什么不是ReadOldL ^= ( 0x01 << ( 16 - Tier_bit ))?先减后移位,在这里是16位,应该用16去减才对啊?用15减不是向左少移了一位,造成图像右移一位吗?我是新人,请高手帮忙问答一下谢谢。 本帖最后由 18986650155 于 2015-9-14 18:33 编辑
点赞  2015-9-14 18:30
有没有串行通信的程序?
点赞  2016-8-3 15:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复