微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 12864显示图片只有上半部分正常,求人帮忙改下代码

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

时间:10-02 整理:3721RD 点击:
#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);
}
只有上半部分显示正常,下半部分乱码,求人指正一下,谢谢了

自挽

自挽

自挽

用的什么显示器,什么控制器

看看是不是12864的主控ic坏了  

额,也在学习              

好像少了个上下半屏设置,如
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++;
       }
    }
}

      write_da(img[j*16+i*2]);
      write_da(img[j*16+i*2+1]);
数组里面的数据没有安全送出去!

打错字了 是完全  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top