lcd12864显示汉字程序

HDL语言及源代码

6人已加入

描述

  128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。 也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

  lcd12864基本特性:

  (1)、低电源电压(VDD:+3.0--+5.5V)

  (2)、显示分辨率:128×64点

  (3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)

  (4)、内置 128个16×8点阵字符

  (5)、2MHZ时钟频率

  (6)、显示方式:STN、半透、正显

  (7)、驱动方式:1/32DUTY,1/5BIAS

  (8)、视角方向:6点

  (9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10

  (10)、通讯方式:串行、并口可选

  (11)、内置DC-DC转换电路,无需外加负压

  (12)、无需片选信号,简化软件设计

  (13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃

  lcd12864显示汉字程序

  #include《reg52.h》

  #define uchar unsigned char

  #define uint unsigned int

  #define DataPort P3

  #define N 800 sbit E=P2^0;

  sbit RW=P2^1;

  sbit RS=P2^2;

  sbit PSB=P2^3;

  int num;

  uint i=0;

  uint l=0;

  uint b;

  uchar a[]

  =“我爱我家0123456789abcdefg,今天是2007年8月8日星期三,太热了!~_~”;

  uchar d[]={0x98,0x90,0x88,0x80};

  /**************延时1ms*count*****************/

  void delay(int count)

  { int x,y;

  for(x=0;x《count;x++)

  for(y=0;y《120;y++);

  }

  /**************延时1us***********************/

  /*void delayuS(uchar buf)

  {

  while(buf--);

  }*/

  /***********忙检测********************/

  void Busy()

  {

  DataPort=0xFF;

  RS=0;

  RW=1;

  while (1)

  {

  E =1;

  if (P0^7==0) break;

  }

  E=0;

  }

  /***********写指令子程序****************/

  void Write_Com(uchar command)

  {

  Busy(); //检测忙标志位

  RS=0;

  RW=0;

  DataPort=command; //写入指令

  E=1;

  delay(1);

  E=0;

  }

  /***********写数据子程序***************/

  void Write_Data(uchar Data)

  {

  Busy();

  RS=1;

  RW=0;

  DataPort=Data;

  E=1;

  delay(1);

  E=0;

  }

  /***********LCD初始化*******************/

  void Init_LCD(void)

  {

  PSB=0;

  delay(1);

  PSB=1;

  //将PSB置1,通信方式为8位数据并口 delay(1);

  Write_Com(0x30);//30H--基本指令操作

  Write_Com(0x0c);//开显示,关光标,不闪烁。

  Write_Com(0x01);//清除显示

  Write_Com(0x02);

  Write_Com(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的

  地址计数器(AC)加1。

  Write_Com(0x04);//显示状态 全关

  }

  /*****************清屏***********************/

  void Clear_LCD(void)

  {

  Write_Com(0x01);

  Write_Com(0x34);

  Write_Com(0x30);

  }

  /******************读地址*************************************/

  /*void Read_Add(void)

  {

  //uchar add=0; DataPort=0xFF; RS=0; RW=1; Busy();

  add=(DataPort|0x10)&0xbf;

  //return(add);

  }*/ //读地址失败

  /*****************判断行*******************/

  /*void Line_Num(uchar k)

  {

  //uint l;

  if(k》=128&&k《=135)l=1;

  if(k》135&&k《=143) l=3;

  if(k》143&&k《=151) l=2;

  if(k》151&&k《=159) l=4;

  }*/

  /*******************逐行显示***************************************/

  void Display_Line(uchar x)

  {

  uchar c=0;

  c=x-0x1; //本函数说明,函数内部的计算公式一定要处在函数的首行

  if(i==0) Write_Com(x);

  if(i==2*(0x87-c)) Write_Com(0x90);

  if(i==2*(0x97-c)) Write_Com(0x98);

  if(i==2*(0x8f-c)) Write_Com(0x88);

  }

  /*void Scan_Line(void)

  {

  if(i==14) Write_Com(0x90);

  if(i==30) Write_Com(0x88);

  if(i==45) Write_Com(0x98);

  }*/

  void Show_Chiese()

  {

  EA=0;

  b=sizeof(a);

  num=b;

  for(l=0;l《4;l++)

  {

  for(i=0;i《num;i++)

  {

  Display_Line(d[l]);

  Write_Data(a[i]);

  } delay(N); //EA=1; }

  EA=1;

  TH0=0x06;

  TL0=0x06;

  Clear_LCD();

  delay(500);

  }

  void main(void)

  {

  TMOD=0x01;

  ///选择定时器模式

  TR0=1;

  //开中断,并允许T0中断 ET0=1;

  EA=1;

  //总开关 Init_LCD();

  Clear_LCD();

  while(1);

  {

  };

  }

  void t0(void) interrupt 1 using 0

  {

  //delay(100);

  Show_Chiese();

  //EA=0;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分