极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11128|回复: 5

求助!12864不能画水平线

[复制链接]
发表于 2015-5-7 16:24:36 | 显示全部楼层 |阅读模式
调用 画 水平线的函数时 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;
}
回复

使用道具 举报

 楼主| 发表于 2015-5-7 16:25:31 | 显示全部楼层
大神们在哪里~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-7 18:25:15 | 显示全部楼层
没人吗?没人吗?
回复 支持 反对

使用道具 举报

发表于 2015-5-7 22:28:19 | 显示全部楼层
12864的地址不是连续的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-8 19:50:14 | 显示全部楼层
savagego 发表于 2015-5-7 22:28
12864的地址不是连续的

我知道啊,那么应该怎么改才能画横线竖线
回复 支持 反对

使用道具 举报

发表于 2015-9-12 08:28:51 | 显示全部楼层
ReadOldL^=(0x01<<(15-Tier_bit));break;
为什么这里是15-Tier_bit,应该是16-Tier_bit才对
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 17:50 , Processed in 0.041657 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表