⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmlcd.c

📁 最简单的单片机驱动液晶显示屏显示的参考资料
💻 C
📖 第 1 页 / 共 2 页
字号:
   }
}

/********************************************************
*  功能: 判断LCM的左半屏或右半屏是否处于忙状态          *
*        当LCM不忙时函数返回                            *
*  输入: choe1为左半屏选择标志                          *
*        choe2为右半屏选择标志                          *
*********************************************************/
void chk_busy (uchar choe1,uchar choe2)
{
  if(choe1==1)
  {
    lck = 0;//a0=0;
    P1 = 0x09;//rw=1;
    lck = 1;//e1=0;
    while(P0&0x80==1)
      delay(2);
    /*cs1=1;
    cs2=1;
    cs3=0;
    e1=1;*/
    lck = 0;
    P1 = 0x00;
    lck = 1;
  }
  if(choe2==1)
  {
    lck = 0;//a0=0;
    P1 = 0x0a;//rw=1;
    lck = 1;//e2=1;
    while(P0&0x80==1)
      delay(2);
    lck = 0; //e2=0;
    P1 = 0x00;
    lck = 1;
  }
}

/********************************************************
*  功能: 根据输入的参数进行延时                         *
*  输入: us为延时多少微秒                               *
*        晶振为11.0592M,执行一条指令的时间约为1us       *
*********************************************************/
void delay (unsigned int us)   //delay time
{
  while(us--);
}


/********************************************************
*  功能: 根据输入的参数进行延时                         *
*  输入: us为延时多少毫秒                               *
*        晶振为11.0592M,执行一条指令的时间约为1us       *
*        1ms = 1000 * 1us                               *
*********************************************************/
void delay1 (unsigned int ms)
{
  unsigned int i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<1000;j++)
  ;
}


/********************************************************
*  功能: 初始化LCM                                      *
*  输入: 无须输入参数                                   *
*********************************************************/
void init_lcd (void)
{

  wr_lcd (1,1,comm,0xe2);
  wr_lcd (1,1,comm,0xa4);
  wr_lcd (1,1,comm,0xa9);
  wr_lcd (1,1,comm,0xa0);
  wr_lcd (1,1,comm,0xee);
  wr_lcd (1,1,comm,0xaf);
}

/********************************************************
*  功能: 向LCM送16*16的汉字                             *
*  输入: *chn为存放汉字点阵的起始地址                   *
*********************************************************/
void disphz (uchar code *chn)
{
  uchar i,j,k;
  for(k=0;k<3;k++)
  {
    for(j=0;j<4;j++)
    {
      wr_lcd (1,0,comm,f_page+j);
      wr_lcd (1,0,comm,f_row);
      wr_lcd (1,0,comm,f_line+12+k*16);
      for(i=0;i<16;i++)
        wr_lcd (1,0,dat,chn[k*64+j*16+i]);
    }
  }
  for(k=3;k<6;k++)
  {
    for(j=0;j<4;j++)
    {
      wr_lcd (0,1,comm,f_page+j);
      wr_lcd (0,1,comm,f_row);
      wr_lcd (0,1,comm,f_line+k*16-48);
      for(i=0;i<16;i++)
        wr_lcd (0,1,dat,chn[k*64+j*16+i]);
    }
  }
}


/********************************************************
*  功能: 向LCM送8*16的字符                              *
*  输入: *img为存放字符点阵的起始地址                   *
*********************************************************/

void dispzf (uchar code *eng)
{
  uchar i,j,k;
  for(k=0;k<7;k++)
  {
    for(j=0;j<4;j++)
    {
      wr_lcd (1,0,comm,f_page+j);
      wr_lcd (1,0,comm,f_row);
      wr_lcd (1,0,comm,f_line+5+k*8);
      for(i=0;i<8;i++)
        wr_lcd (1,0,dat,eng[k*32+j*8+i]);
    }
  }
  for(k=7;k<14;k++)
  {
    for(j=0;j<4;j++)
    {
      wr_lcd (0,1,comm,f_page+j);
      wr_lcd (0,1,comm,f_row);
      wr_lcd (0,1,comm,f_line+k*8-56);
      for(i=0;i<8;i++)
        wr_lcd (0,1,dat,eng[k*32+j*8+i]);
    }
  }
}




//************显示一幅图象************

void disptu (uchar code *img)
{
  uchar i,j;
  for(j=0;j<4;j++)
  {
    wr_lcd (1,1,comm,f_page+j);
    wr_lcd (1,1,comm,f_row);
    wr_lcd (1,1,comm,f_line);
    for(i=0;i<122;i++)
    {
      if(i<61)
      {wr_lcd (1,0,comm,f_line+i);
       wr_lcd (1,0,dat,img[j*122+i]);}
      else
      {wr_lcd (0,1,comm,f_line+i-61);
       wr_lcd (0,1,dat,img[j*122+i]);}
    }
  }
}


/********************************************************
*  功能: 向LCM的左半屏和右半屏送点阵数据                *
*  输入: data1,data2为待显示数据                        *
*********************************************************/
void wrlattice (uchar data1,uchar data2)
{
  uchar i,j;
  for(j=0;j<4;j++)
  {
    wr_lcd (1,1,comm,f_page+j);
    wr_lcd (1,1,comm,f_row);
    wr_lcd (1,1,comm,f_line);
    for(i=0;i<61;i=i+2)
    {
      wr_lcd (1,1,dat,data1);
      wr_lcd (1,1,dat,data2);
    }
  }
}

//**************清除数码管显示***********
/*void  clr79disp()
{ unsigned char i;
  cmd8279 = 0xd1;//清除8279
  delay(2);
  cmd8279 = 0x00;//左边输入 八位字符显示,外部译码键扫描方式,双键互锁
  delay(2);
  cmd8279 = 0x2A;//10分频,(ALE = 1/6 OSC)
  delay(2);
  cmd8279 = 0x60;//读8279RAM不自动加1
  delay(2);
  cmd8279 = 0x90;//写显示RAM自动加1
  delay(2);
  for(i=0;i<8;i++)
    dat8279 = 0x00;//缓冲区内容送数码管显示 
  
 }
*/
//*************主程序*************

void main ()
{
  init_lcd (); //初始化LCD
 // BUZ = 0;//关蜂鸣器
/*  clr79disp();//关数码管显示
  P0 = 0xff;
  P2=0x00;    
  ;           
  P2=0x08; //关跑马灯*/
  while (1)//主循环
  {
    wrlattice (0x00,0x00);
    disphz (tab1);
    delay1 (600);
    wrlattice (0xff,0x00);
    delay1 (600);
    wrlattice (0x00,0x00);
    dispzf (tab2);
    delay1 (600);
    wrlattice (0x33,0x33);
    delay1 (600);
    disptu (tab3);
    delay1 (600);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -