在此指出,这一篇文章出至网络上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]
[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)
(2010-12-01 10:46:58, Size: 1.65 MB, Downloads: 1689)
[/p]
[p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础
一般包括四个函数:
1、写命令函数;
[p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础
一般包括四个函数:
1、写命令函数;
2、写数据函数;
3、读状态函数;
4、读数据函数;
这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。
另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。因此,读状态函数也可以不写,只用简短的延时函数替换即可。
1、写操作的编写:
首先看一下时序图[/p]
[p=30, 2, left]
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为你要写入的命令或数据值
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为串行模式,1为8/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小时内删除。
发表评论