LCD显示仿真问题

2019-07-18 10:26发布

本帖最后由 yanxuerui 于 2011-5-4 14:28 编辑

截图1304486453.jpg 截图1304486293.jpg 截图1304486250.jpg
need you now!
在写LCD显示程序遇到的问题:
下面是程序部分代码:
#define uchar unsigned char
#define uint  unsigned int
#define lcdport P1
#define LCDSTARTROW 0xC0 //设置起始行指令
#define LCDPAGE 0xB8  //设置页指令
#define LCDLINE 0x40    //设置列指令
sbit BUSYSTATUS=P1^7;
sbit RST=P2^0;
sbit E=P2^1;
sbit RW=P2^2;
sbit DI=P2^3;
sbit CS2=P2^4;
sbit CS1=P2^5;
void delay_1(uint r)
{
  uint s;
  while(r--)
  {
   for(s=110;s>0;s--);
  }
}
uchar checkbusy()
{
  lcdport=0xff;
  RW=1;
  DI=0;
  E=1;
  E=0;
  return BUSYSTATUS;
}
void WriteCMD(uchar uCMD)
{
  while(checkbusy());
  lcdport=0xff;
  RW=0;
  DI=0;
  lcdport=uCMD;
  E=1;
  E=0;
  
}
void WriteData(uchar uDAT)
{
  while(checkbusy());
  lcdport=0xff;
  RW=0;
  DI=1;
  lcdport=uDAT;
  E=1;
  E=0;

}
void LCD_Init()
{
  RST=0;
  delay_1(10);
  RST=1;
  E=1;
  CS1=1;
  CS2=1;
  WriteCMD(0x38);      //显示方式
  WriteCMD(0x3f);      //开显示
  WriteCMD(0x01);   //清屏
  WriteCMD(LCDSTARTROW);
}
void SetStartLine(uchar urow)   //设置显示起始行
{
  WriteCMD(LCDSTARTROW+urow);
}
void SetPage(uchar upage)
{
  WriteCMD(LCDPAGE+upage);
}
void SetColumn(uchar ucusor)
{
  WriteCMD(LCDLINE+ucusor);
}
void Dsp(uchar p[16],uchar q)
{
  uchar count,b[16];
  if(q==1)
  {
   CS1=1;
CS2=0;
  for(count=0;count<16;count++)
    {
      b[count]=*(p+count);
      WriteData(b[count]);
    }
  }
  else
   {
     CS1=0;
  CS2=1;
   for(count=0;count<16;count++)
    {
       b[count]=*(p+count);
    WriteData(b[count]);
  }
   }   
}

void delay(uchar w)
{
  uint y;
  while(w--)
  {
  for(y=125;y>0;y--);
  }
}
void main()
{
  
  LCD_Init();
while(1)
  {
   uchar i;
for(i=0;i<4;i++)
    {
      SetPage(0);      //设置从第0页显示
   SetColumn(i<<4);     //显示一次,显示列位置向右移动16个单元
      Dsp(QING_SHU_1
,1);    //输入“你好! 请”上半部分 通过CS1,CS2控制
      SetPage(1);
   SetColumn(i<<4);
   Dsp(QING_SHU_2
,1);    //输入“你好! 请”下半部分 通过CS1,CS2控制

   delay(200);
   }
    for(i=0;i<4;i++)
   {
   SetPage(0);
   SetColumn(i<<4);
   Dsp(QING_SHU_1[i+4],2);  //输入“输入密码”下半部分 通过CS1,CS2控制
  
   SetPage(1);
   SetColumn(i<<4);
   Dsp(QING_SHU_2[i+4],2);   //输入“输入密码”下半部分 通过CS1,CS2控制
   delay(200);
    }      
      
   
    for(i=0;i<4;i++)
    {
      SetPage(6);
   SetColumn(i<<4);
   Dsp(QING_CHU_1
,1);    //显示“‘C’清除“的上半部分
   SetPage(7);
   SetColumn(i<<4);
   Dsp(QING_CHU_2
,1);    //显示“‘C’清除“的下半部分

   delay(200);
  }   
  for(i=0;i<4;i++)
    {
   SetPage(6);
   SetColumn(i<<4);
   Dsp(QING_CHU_1[i+4],2);   //显示”‘=’确认“的上半部分

   SetPage(7);
   SetColumn(i<<4);
   Dsp(QING_CHU_2[i+4],2); //显示”‘=’确认“的下半部分
   delay(200);
    }
  仿真调试时,只显示上面一行“您好! 请输入密码”或者只显示下面一行“‘C’清除=’确认”没问题,但同时显示时,LCD屏上“您好! 请输入密码”这一行的第一个字“您”的上半部分跟“‘C”上半部分替换了,其他的都显示正常,查看LCD的RAM中显示“您”上半部分和“‘C”上半部分的十六进制码替换了。
请问这是什么原因?LCD选用的是LGM12641BS1R。
非常感谢你的帮助!
具体效果请看图片!     
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
hzmy5
1楼-- · 2019-07-18 15:20
很详细,坐等高手解答
yanxuerui
2楼-- · 2019-07-18 20:55
哪位热心人士帮帮小弟解决这个问题!
武力戡乱
3楼-- · 2019-07-18 22:40
挺好,可惜没上传仿真和编译文件!
dmdz2015
4楼-- · 2019-07-19 04:29
 精彩回答 2  元偷偷看……
dmdz2015
5楼-- · 2019-07-19 07:41
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一周热门 更多>