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);
}

只有上半部分显示正常,下半部分乱码,求人指正一下,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
一雪龙
1楼-- · 2019-07-17 07:32
好像少了个上下半屏设置,如
void DisplayGraphic(unsigned char code *adder)
{

   int i,j;
//*******显示上半屏内容设置
   for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD
      TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }          
//*******显示下半屏内容设置
   for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
      TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }
}
ng1029
2楼-- · 2019-07-17 12:26
      write_da(img[j*16+i*2]);
      write_da(img[j*16+i*2+1]);

数组里面的数据没有安全送出去!!!
ng1029
3楼-- · 2019-07-17 16:29
 精彩回答 2  元偷偷看……

一周热门 更多>