大神帮我看看,我的12864打点程序为什么只能话竖线,横线就被后面的覆盖了,只剩下最后一个点?

2019-10-15 23:56发布

大神帮我看看,我的12864打点程序为什么只能话竖线,横线就被后面的覆盖了,只剩下最后一个点?

u8 DrawDots(u8 x,u8 y,u8 color)//打点函数   //x,y为128*64 点阵的坐标
{
     u8 row,xlabel,xlabel_bit;
     u8 Read_H=0,Read_L=0;  
     Write_LCD_Command(0x34);       //扩充指令
     Write_LCD_Command(0x36);       //绘图指令
     xlabel=x>>4;            //确定水平坐标地址
     xlabel_bit=x & 0x0F; // 细分水平坐标中的第几位
     if(y<32) row=y;
     else      {         row=y-32;         xlabel+=8;      }
     Write_LCD_Command(row+0x80);
      Write_LCD_Command(xlabel+0x80);
      Read_Data();
      Read_H=Read_Data();
      Read_L=Read_Data();   
      Write_LCD_Command(row+0x80);
      Write_LCD_Command(xlabel+0x80);   //水平坐标地址+基址=显示的水平地址   
      if(xlabel_bit<8)
     {
          switch(color)
         {
             case 0:Read_H &=(~(0x01<<(7-xlabel_bit))); break; //变暗 ,看不见
             case 1:Read_H |=(0x01<<(7-xlabel_bit)); break; //变亮  ,看得见
             case 2:Read_H ^=(0x01<<(7-xlabel_bit)); break; //反转
             default:break;
          }
         Write_LCD_Data(Read_H);
         Write_LCD_Data(Read_L);
      }
      else
     {
          switch(color)
          {
               case 0:Read_L &=(~(0x01<<(15-xlabel_bit))); break; //变暗    ,看不见
               case 1:Read_L |=(0x01<<(15-xlabel_bit)); break; //变亮  ,看得见
               case 2:Read_L ^=(0x01<<(15-xlabel_bit)); break; //反转
               default:break;
          }
          Write_LCD_Data(Read_H);
          Write_LCD_Data(Read_L);
     }
     Write_LCD_Command(0x30);//恢复正常模式  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。