proteus仿真LCD12864,屏幕一直为黑,找不到原因,高分求解

RT,解决加分

我怀疑你根本就没开显示。12864你用命令开了显示了吗?如果不是,看我下面所写的。

 

Proteus里的12864是个无字库纯点阵的液晶屏。我给你几个函数,因为这里不能全贴上,字数有限。只能给你几个关键的基础函数,给你太多反而看不懂,因此只给你3个。你在看懂这些函数的情况下在修改自己的函数。

proteus里的12864不需要像实际的液晶那样的有各自不同厂商的个性设置,只需要使用基本指令就够了。因此它其实初始化是很简单的,开显示就行。而实际的12864使用都是有字库的,初始化复杂。而无字库12864一般用的不多。

 

 

void _L12864Init(void)   

{
LcdWriteComOrData(0,0x3f); //显示开

 

//这个函数是应用函数,是在基础函数上构造的,意义不大,只是举个例子。

//内容是左右半屏方式,显示图像
static void ShowPicture(uchar (*p)[64])//显示一张图片,因为图片是没有字符那样的局部空间,一个整体
{            //显示一页就是64列,这里64是二维数组的第二维是64
uchar i,j;
  CS1=0;CS2=1;                         //显示左半屏
  for(i=0;i<8;i++)
  {
    LcdWriteComOrData(0,AddressX|i);   //确定要显示的页 
    LcdWriteComOrData(0,AddressY);    //确定要显示的初始列,不能丢,很重要    
    for(j=0;j<64;j++) 
       LcdWriteComOrData(1, p[i<<1][j] ); //把i*2变成i<<1,乘法变成移位                                            
  }
  CS1=1;CS2=0;          //换右半屏显示
  for(i=0;i<8;i++)
  {                                  
 LcdWriteComOrData(0,AddressX|i);   //page还从第0行开始
 LcdWriteComOrData(0,AddressY);
 for(j=0;j<64;j++)
    LcdWriteComOrData(1, p[(i<<1)+1][j]);
  };    
}

 

 

//下面两个是重要的基础函数,如果不显示主要是这里有问题,看懂我的看看自己的程序哪里有问题。


static void LcdWriteComOrData(uchar x,uchar content)   
{
LcdReadComBusy();     //检测忙标志
P0Data=content;
E=0;      //按照HD44780/KS0066控制器的脉冲时序走
if(x==0){RS=0;RW=0; } //如果是0,选址程序寄存器写;这种程序结构来自于金鹏LCD
else    {RS=1;RW=0; } //如果是1,选择数据寄存器写
E=1;       
Delay1ms(1);       //写程寄存器需要一段延时,执行也有延时。因为控制字写入之后,查书发现,执行至少需要40us,如果在E=1和0之间没有延时,程序不执行
E=0;      //这行和上一行Delay1ms(1)交换后,发现检测不到了,原因就是以上的延时问题。
}
//************************************************************
static void LcdReadComBusy(void)  //这种程序结构来自于网友大海橡树的程序
{  
P0Data=0;    //准备读忙标志,用的是P0口,所以可以直接放低就可以了,如果用其他口,Px不能直接写0,必须先写1才能读入外部信息
RS=0;      //选择程序寄存器
RW=1;      //读
E=1;         //使能打开
while( P0Data & 0x80 ) ;    //如果是忙P0data与0x80就不等于0,所以while语句总是执行。
E=0;      //使能关闭
}
//***********************************************************

下面这个图是告诉你我是成功的,所以你不用怀疑我函数的正确性。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-01
建议/RST脚接一个控制脚,一般IC芯片上电后都需要一个复位信号。
第2个回答  2018-03-24
proteus的12864的片选是低电平有效,和手册的相反,CS1 = 0,CS2 = 0为使能,CS1=1,CS2=1为失能。
第3个回答  2018-01-13
51单片机的P0口做I/O输出使用时,需要外接上拉电阻。
第4个回答  2020-05-10
想问下,这个问题最后是怎么解决的,我现在也是这样,实在不懂,谢谢

proteus仿真LCD12864,屏幕一直为黑,找不到原因,高分求解
proteus里的12864不需要像实际的液晶那样的有各自不同厂商的个性设置,只需要使用基本指令就够了。因此它其实初始化是很简单的,开显示就行。而实际的12864使用都是有字库的,初始化复杂。而无字库12864一般用的不多。void _L12864Init(void){LcdWriteComOrData(0,0x3f); \/\/显示开 } \/\/这个函数是...

相似回答