在此指出,这一篇文章出至网络上zhaoshan413之手,感谢他的无私贡献,让大家轻松玩转带字库12864~~
[p=30, 2, left]之前说学完12864字库液晶后和大家交流一下心得,一直没有时间,今天整理一下发上来,希望对想学习的朋友能有点帮助首先说明一点,本人也是初学者,自感水平不高,若有不足及不对之处,望情指正以下以并行口传输为例,别的还不会,呵呵![/p]
[p=30, 2, left]先传一下ST7920的芯片说明书:[/p][p=30, 2, left]hbnu.edu/bbs/redirect.php?tid=7676&goto=lastpost#lastpost[/p][p=30, 2, left]
ST7920(字库)12864.pdf
(2010-12-01 10:46:58, Size: 1.65 MB, Downloads: 1689)
[/p]
[p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础
       一般包括四个函数:
      1、写命令函数;
      2、写数据函数;
      3、读状态函数;
      4、读数据函数;
      这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。
      另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。因此,读状态函数也可以不写,只用简短的延时函数替换即可。

1、写操作的编写:
首先看一下时序图[/p]
[p=30, 2, left]

时序.JPG
[/p][p=30, 2, left]由图可见操作很简单:
1>RS=1(写数据操作);或者RS=0(写命令操作)
2>RW=0//指明为写操作
3>E=1
4>DB=data//data为你要写入的命令或数据值
5>E=0[/p][p=30, 2, left]以下是我的驱动函数,仅供参考:[/p][p=30, 2, left]
CODE:
/********************************液晶端口定义**************************/#define  lcd_data   P0          //数据口 sbit  RS    = P2^4;            //选择寄存器(并行) 0:指令寄存器 1:数据寄存器;sbit  RW    = P2^5;            //读写控制脚(并行) 0:写入 1:读出sbit  E     = P2^6;            //读写数据启始脚(并行)sbit  PSB   = P2^1;            //串并方式选择引脚,0为串行模式,18/4位数据口模式sbit  RST   = P2^3;            //复位引脚//********************************************************//延时函数//********************************************************void delay(unsigned int k)      unsigned int i;位字符串是什么      unsigned char j;      for(i=0;i<k;i++)      {           for(j=0;j<10;j++);      }}//********************************************************//延时1ms函数//********************************************************void delay_ms(unsigned int k)//延时0.994us,晶振12M{    unsigned int x,y;    for(x=k;x>0;x--)         for(y=121;y>0;y--);} //********************************************************//写命令函数//******************************
**************************void LcdWcom(unsigned char WCom){      delay(1);      RS=0;  //指明操作对象为指令寄存器      RW=0; //指明为写操作      E=1;      lcd_data=WCom; //将命令写入总线      E=0;}//********************************************************//写数据函数//******************************************************** void LcdWdata(unsigned char WData){     delay(1);     RS=1; //指明操作对象为数据寄存器     RW=0; //指明为写操作     E=1;     lcd_data=WData; //将数据写入总线     E=0;}[/p][p=30, 2, left]二、初始化操作[/p][p=30, 2, left]8位并行操作为例,操作流程图如下:[/p][p=30, 2, left]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。