lcd19264驱动程序

来源:网络整理 作者:2017年11月06日 15:28

  19264,是液晶模组的分辨率,也就是有192*64个点,是点阵液晶。液晶模组的亮度可能会由于CCFL引线对金属壳的耦合分流而受到影响。逆变器的设计应该充分考虑这部分的漏电。有必要全面评估液晶模组和逆变器安装在主机设备中的情况,确保达到亮度要求。

  lcd19264驱动程序

  #include “Public.h”

  #define Fisrt 01

  #define Second 02

  #define Third 03

  /*定义LCD控制端口*/

  sbit LCD_RS = P0^7;

  sbit LCD_RW = P0^6;

  sbit LCD_CE = P0^5;

  sbit LCD_CSA = P0^4;

  sbit LCD_REST = P0^3;

  sbit LCD_CSB = P0^2;

  sbit LCD_CSC = P0^1;

  #define DATA_BUS P2

  /*******************************************************************

  函数功能说明:判断LCD忙函数

  1、

  2、

  3、

  *******************************************************************/

  void Read_busy(unsigned char Area)

  {

  unsigned char temp = 0;

  do

  {

  LCD_CE = 0;

  LCD_RW = 1;

  LCD_RS = 0;

  switch(Area)

  {

  case Fisrt:

  LCD_CSA = 0;

  break;

  case Second:

  LCD_CSB = 0;

  break; case Third:

  LCD_CSC = 0;

  break; default:break;

  }

  _nop_();

  LCD_CE = 1;

  _nop_();

  temp = DATA_BUS;

  LCD_CE = 0;

  LCD_RW = 0;

  switch(Area)

  {

  case Fisrt:

  LCD_CSA = 1;

  break;

  case Second:

  LCD_CSB = 1;

  break; case Third:

  LCD_CSC = 1;

  break;

  default:break;

  }

  LCD_CE = 1;

  }while(temp&0x80);

  }

  /*******************************************************************

  函数功能说明: 设置坐标

  1、 液晶分为三个区 A、B、C

  2、 设置每个区的坐标

  3、 送坐标到总线上

  *******************************************************************/

  void Set_Locatexy(unsigned char x_add,unsigned char y_add)

  {

  switch(x_add&0xc0)

  {

  case 0x00:

  Write_command(Fisrt,x_add&0x3f)

  break;

  case 0x40:

  break;

  case 0x80:

  break;

  default:break;

  }

  }

  /*******************************************************************

  函数功能说明: 写数据

  1、 液晶分为三个区 A、B、C

  2、 设置每个区的片选信号

  3、 送数据到总线上

  *******************************************************************/

  void Write_data(unsigned char Area_Num,unsigned char Lcd_data)

  {

  Read_busy(Area_Num);

  LCD_CE = 0;

  /*写入到LCM*/

  LCD_RW = 0;

  LCD_RS = 1; //数据

  switch(Area_Num)

  {

  case Fisrt:

  LCD_CSA = 0;

  break;

  case Second:

  LCD_CSB = 0;

  break; case Third:

  LCD_CSC = 0;

  break;

  default:break;

  }

  _nop_();

  LCD_CE = 1;

  _nop_();

  DATA_BUS = Lcd_data;

  _nop_();

  _nop_();

  LCD_CE = 0;

  LCD_RW = 1;

  switch(Area_Num)

  {

  case Fisrt:

  LCD_CSA = 1;

  break;

  case Second:

  LCD_CSB = 1;

  break;

  case Third:

  LCD_CSC = 1;

  break;

  default:break;

  }

  LCD_CE = 1;

  }

  /*******************************************************************

  函数功能说明: 写命令

  1、 液晶分为三个区 A、B、C

  2、 设置每个区的片选信号

  3、 送命令到总线上

  *******************************************************************/

  void Write_command(unsigned char Area_Num,unsigned char Lcd_Command)

  {

  Read_busy(Area_Num);

  LCD_CE = 0; /*写入到LCM*/

  LCD_RW = 0;

  LCD_RS = 0; //指 令

  switch(Area_Num)

  {

  case Fisrt:

  LCD_CSA = 0;

  break;

  case Second:

  LCD_CSB = 0;

  break;

  case Third:

  LCD_CSC = 0;

  break;

  default:break;

  }

  _nop_();

  LCD_CE = 1;

  _nop_();

  DATA_BUS = Lcd_Command;

  _nop_();

  _nop_();

  LCD_CE = 0;

  LCD_RW = 1;

  switch(Area_Num)

  {

  case Fisrt:

  LCD_CSA = 1;

  break;

  case Second:

  LCD_CSB = 1;

  break;

  case Third:

  LCD_CSC = 1;

  break;

  default:break;

  } LCD_CE = 1;

  }

  void Lcminit( void )

  {

  LCD_REST = 0;

  _nop_();

  LCD_REST = 1;

  Write_command(Fisrt,0x40);

  Write_command(Second,0x40);

  Write_command(Third,0x40);

  Write_command(Fisrt,0xb8);

  Write_command(Second,0xb8);

  Write_command(Third,0xb8);

  Write_command(Fisrt,0xc0);

  Write_command(Second,0xc0);

  Write_command(Third,0xc0);

  Write_command(Fisrt,0x3f);

  Write_command(Second,0x3f);

  Write_command(Third,0x3f);

  }

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
声明:电子发烧友网转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。
作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。
收藏 人收藏
分享:

相关阅读

发表评论

elecfans网友

分享到:

用户评论(0