珍藏的12864 使用经典资料.doc

上传人:b****1 文档编号:264777 上传时间:2022-10-08 格式:DOC 页数:21 大小:732KB
下载 相关 举报
珍藏的12864 使用经典资料.doc_第1页
第1页 / 共21页
珍藏的12864 使用经典资料.doc_第2页
第2页 / 共21页
珍藏的12864 使用经典资料.doc_第3页
第3页 / 共21页
珍藏的12864 使用经典资料.doc_第4页
第4页 / 共21页
珍藏的12864 使用经典资料.doc_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

珍藏的12864 使用经典资料.doc

《珍藏的12864 使用经典资料.doc》由会员分享,可在线阅读,更多相关《珍藏的12864 使用经典资料.doc(21页珍藏版)》请在冰豆网上搜索。

珍藏的12864 使用经典资料.doc

一、首先说一下关于驱动函数的书写,这些是液晶显示的基础,一般包括四个函数:

 

1、写命令函数; 2、写数据函数;  3、读状态函数;  4、读数据函数。

这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。

另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:

原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。

因此,读状态函数也可以不写,只用简短的延时函数替换即可。

1、写操作的编写:

由图可见操作很简单:

1>RS=1(写数据操作);或者RS=0(写命令操作);

2>RW=0;//指明为写操作

3>E=1;

4>DB=data;//data为你要写入的命令或数据值

5>E=0;

以下是我的驱动函数,仅供参考:

1./********************************液晶端口定义**************************/

2.#define  lcd_data  P0      //数据口 

3.sbit  RS  =P2^4;        //选择寄存器(并行)0:

指令寄存器1:

数据寄存器;

4.sbit  RW  =P2^5;        //读写控制脚(并行)0:

写入1:

读出

5.sbit  E    =P2^6;        //读写数据启始脚(并行)

6.sbit  PSB  =P2^1;        //串并方式选择引脚,0为串行模式,1为8/4位数据口模式

7.sbit  RST  =P2^3;        //复位引脚

8.

9.//********************************************************

10.//延时函数

11.//********************************************************

12.voiddelay(unsignedintk)

13.{  

14.    unsignedinti;

15.    unsignedcharj;

16.    for(i=0;i

17.    {

18.        for(j=0;j<10;j++);

19.    }

20.}

21.//********************************************************

22.//延时1ms函数

23.//********************************************************

24.voiddelay_ms(unsignedintk)//延时0.994us,晶振12M

25.{

26.  unsignedintx,y;

27.  for(x=k;x>0;x--)

28.      for(y=121;y>0;y--);

29.} 

30.//********************************************************

31.//写命令函数

32.//********************************************************

33.voidLcdWcom(unsignedcharWCom)

34.{

35.    delay

(1);

36.    RS=0;  //指明操作对象为指令寄存器

37.    RW=0;//指明为写操作

38.    E=1;

39.    lcd_data=WCom;//将命令写入总线

40.    E=0;

41.}

42.//********************************************************

43.//写数据函数

44.//******************************************************** 

45.voidLcdWdata(unsignedcharWData)

46.{

47.    delay

(1);

48.    RS=1;//指明操作对象为数据寄存器

49.    RW=0;//指明为写操作

50.    E=1;

51.    lcd_data=WData;//将数据写入总线

52.    E=0;

53.}

二、初始化操作

初始化操作如下:

1>芯片上电;

2>延时40ms以上;

3>复位操作:

RST出现一个上升沿(RST=1;RST=0;RST=1;);

4>功能设定;

5>延时100us以上;

6>再次进行功能设定;

7>延时37us;

8>显示开关控制;

9>延时100us以上;

10>清除显示;

11>延时10ms以上;

12>进入点设置;

13>初始化结束;

这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:

清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…

54.//********************************************************

55.//显示初始化函数

56.//********************************************************

57.voidDisplay_Init(void)

58.{

59.    delay_ms(45);//延时45ms

60.    PSB=1;//8位并行口

61.    //复位操作

62.    RST=1;delay

(1);

63.    RST=0;delay

(1);

64.    RST=1;delay

(1); 

65.    //功能设定

66.    LcdWcom(0x30);//设置为8位并行口,基本指令集

67.    delay(10);

68.    LcdWcom(0x30);//再次设置为8位并行口,基本指令集

69.    delay(5);

70.//  //显示开关控制

71.//  LcdWcom(0x0c);//游标显示关,正常显示,整体显示开

72.//  delay(10);

73.    //清除显示

74.    LcdWcom(0x01);  

75.    delay_ms(12);//延时12ms

76.    //进入点设置

77.    LcdWcom(0x06);//设置为游标右移,DDRAM位地址加1,画面不移动

78.    delay(5);

79.    LcdWcom(0x0C);//开显示

80.}

三、显示基本的字符和汉字

1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:

由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。

由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址指令为10000000);因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。

存在的问题:

参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的

0x800x810x820x830x840x850x860x87  //第一行汉字位置

  0x900x910x920x930x940x950x960x97  //第二行汉字位置

  0x880x890x8a0x8b0x8c0x8d0x8e0x8f  //第三行汉字位置

  0x980x990x9a0x9b0x9c0x9d0x9e0x9f  //第四行汉字位置

百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…

设定DDRAM地址参考程序:

81.//********************************************************

82.//设置光标函数

83.//参数说明:

x为行号,y为列号

84.//********************************************************

85.voidSet_Cursor(unsignedcharx,unsignedchary)

86.{

87.  unsignedchari;

88.  switch(x)//确定行号

89.  {

90.      case0x00:

i=0x80;break;//第一行

91.      case0x01:

i=0x90;break;//第二行

92.      case0x02:

i=0x88;break;//第三行

93.      case0x03:

i=0x98;break;//第四行

94.      default:

break;

95.  }

96.  i=y+i;//确定列号

97.  LcdWcom(i);//写地址

98.}

复制代码

2、显示字符

由数据手册可查看可以显示的字符及其显示码:

因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!

就应该写入0x21。

99.//********************************************************

100.//显示字符函数

101.//********************************************************

102.voidDisplay_Char(unsignedcharAlphabet)

103.{

104.    delay

(1);

105.    LcdWdata(Alphabet);//写入需要显示字符的显示码

106.}

显示!

实例:

107./**********************显示单个字符*************************/

108.Set_Cursor(0,0);//光标地址设定

109.Display_Char(0x21);//显示字符!

扩展程序:

在指定位置显示字符串

110.//******************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1