12864显示图片只有上半部分正常,求人帮忙改下代码

2019-07-16 04:28发布

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
#define X1    0x80            
#define Y     0x80
sbit RS=P2^5; //    并行的指令/数据选择信号;串行的片选信号
sbit RW=P2^6; //    并行的读写选择信号;串行的数据口
sbit E=P2^7;  // 并行的使能信号;
sbit PSB=P2^4;//    串并行选择管脚
sbit busy=P2^2;
code char tab4[]={ /*此处是图片代码*/};
void delay_nms(int z)//延时函数
{int x,y;
for(x=z;x>0;x--)
  for(y=240;y>0;y--);
  }
void write_com(uchar com)//写指令函数
{ RS=0;
  RW=0;
  E=1;
  P0=com;
  delay_nms(1);
  E=0;
  delay_nms(1);  
}
  void write_da(uchar da)//写数据函数
{ RS=1;
  RW=0;
  E=1;
  P0=da;
  delay_nms(1);
  E=0;
  delay_nms(1);

}
/*----------整屏显示图像函数---------------------*/
void fimg_disp(uchar *img)
{
  uchar i,j;
  for(j=0;j<64;j++)
  {
    for(i=0;i<8;i++)
    {
      write_com(0x34);//使用扩充指令集
      write_com(Y+j);
      write_com(X1+i);
      write_com(0x30);
      write_da(img[j*16+i*2]);
      write_da(img[j*16+i*2+1]);
    }

  }
   write_com(0x36);//开显示
   }
void  inint_12864(void)  //初始化
{
PSB=1;//选择并行
   RW=0;//定义为写,本程序只用到了写
   write_com(0x30);//基本指令状态
   write_com(0x30);       //选择8bit数据流
   write_com(0x0c);       //开显示(无游标、不反白)
   write_com(0x01);       //清除显示,并且设定地址指针为00H
   write_com(0x06);
}
void main()
{
uint i;
    inint_12864();
    write_com(0x01);       //清除显示,并且设定地址指针为00H
    fimg_disp(tab4);
   while(1);
}

只有上半部分显示正常,下半部分乱码,求人指正一下,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。