大神帮我看看,我的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);//恢复正常模式  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-10-16 02:42
论坛搜索,参考别人代码
lhshengshi
2楼-- · 2019-10-16 03:57
正点原子 发表于 2016-12-14 18:07
论坛搜索,参考别人代码

原子哥 想问一下12864的液晶串行口读取ram可以实现么,网上有说不行,可是51单片机我看到有实现的
BLG0507
3楼-- · 2019-10-16 06:22
lhshengshi 发表于 2016-12-18 15:33
原子哥 想问一下12864的液晶串行口读取ram可以实现么,网上有说不行,可是51单片机我看到有实现的

看数据手册吧,有些不支持串口READ,不过可以用缓存实现读,12864缓存1KB。
yagubi2007
4楼-- · 2019-10-16 10:35
读函数里面判断不忙后给0xff,如P0=0XFF;

一周热门 更多>