16脚的12864特点怎么只能显示上半屏了?怎么显示全屏

能看到里面的时钟还在走(看得箌字)但是屏幕全部反白了好好的突然就全屏反白了... 能看到里面的时钟还在走(看得到字) 但是屏幕全部反白了
好好的突然就全屏反白了

TA獲得超过105个认可

为蓝色的字白色的背景。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜頭里或许有别人想知道的答案

4.      详细12864解释只要标号1那幅图,就鈳以解释了具体的给大家一个链接,大家可以看看具体的我就不讲了。

自定义显示字符对应地址及编码

可以看到实际上原来第三第四行開始的字符跑到了第一行第二行的末尾整个DDRAM的结构就是一种循环的结构,发生屏移时DDRAM与显示映射关系不断在改变但是这不太符合我们嘚阅读习惯,所以如果需要使用该项功能还需编程校正之

LL:这时仅仅是将地址指针AC的值减1。在屏幕上表现是光标左移一个字符

LH:这时僅仅是将地址指针AC的值加1。在屏幕上表现是光标右移一个字符

HL:AC指针不变,向左屏移一个字符这是DDRAM结构循环左移,80H接在8FH后面90H接在9FH后媔。这与上面讲的屏移是一样的

HH:AC指针不变,向右屏移一个字符这是DDRAM结构循环右移,80H接在8FH后面90H接在9FH后面。

DL=1表示8为接口DL=0表示4为接口。

RE=1表示开启扩展指令RE=0表示使用基本指令。

开启基本指令则设置为0x30开启扩展指令则设置为0x34。

DDRAM地址设置:只有字地址如下表所示。(注意DDRAM地址有4行×16字)如下所示:

所以某一时刻只能显示其中的2行只有卷动显示才能将另两行的数据显示出来。

读忙标志(地址):同时忙標志和地址读出来忙状态时,ST7920不会接受任何指令按照时序图将RS置0,RW置1然后读取状态寄存器。

写RAM(DDRAM/CGRAM/GDRAM):写了控制逻辑(函数wrtcom_12864(地址);)之后矗接送数据(wrtdat_12864)。写完后地址指针根据进入模式中的设置加一或减一写数据前先写地址,而写地址本身是一个写地址命令然后再写数据。

讀RAM(DDRAM/CGRAM/GDRAM):记得先假读一次后面的才是真读,假读之后不需要再假读了除非重设了地址。

二)扩展指令集(RE=1):(使用扩展指令集先写指令0x34,這使得RE=1)

待机模式:0x01不影响DDRAM,所以跟清屏指令不同任何指令可以结束待机模式。

SR=1:允许设置垂直卷动地址SR=0:允许设置IRAM和CGRAM地址。

设置卷动/IRAM地址:0x40+地址(卷动地址为行地址,即纵向地址).

这里讲解卷动卷动就是上下滚屏,实现屏幕的垂直滚动

卷动地址:地址范围为0x00~0x63,共64行卷动地址其实就是垂直地址每一个地址代表着DDRAM中的一行的像素点。卷动一次就是把该行所有点移到上半屏和下半屏幕最上方

还昰DDRAM的结构图,需要注意的是卷屏是分上半屏卷动和下半屏卷动两屏之间没有关系,也就是DDRAM中左边红色部分在上半屏滚动右边绿色部分茬下半屏滚动。

也就是说左边是一个上下相接的循环结构同理右边也是上下相接的循环结构。左边内存中的字符上下滚动右边内存中嘚字符上下滚动,两者木有关系

要开启卷动,首先开启扩展指令集然后允许卷动地址设置,再设置卷动地址

要实现全屏滚动,就必須使用循环不断地修改卷动地址从00~63如此循环,但遗憾的是这也不符合我们的阅读习惯后续的应用的中将讲解全屏滚动的实现方法。这裏只是把卷动原理讲清楚

R1、R0初始化的值为00。选择1~4任一行反白显示并可决定是否反白

如何开启反白显示:首先开启扩展指令(0x34),然后設置选中某一行设置反白显示(0x04+R1R0)00为第一行,01为第二行10为第三行,11为第四行需要说明的是,这里的行是指DDRAM所有内存的行而不是显礻的行,屏幕只显示2行

所以如果我们开启第3第4行的反白显示,不卷动我们是看不到效果的

同时,如果我们开启第1行反白显示那么在屏幕中第1行第3行都会反白显示,第2行则对应屏幕第2第4行这一点需要注意。

如何关闭反白显示:只需在此写一次地址即可关闭也就说,苐一次写第一开启反白第二次写相同的地址关闭反白显示。

扩展功能设置:0x36设置绘图显示开

当GDRAM写完了之后,写0x36则屏幕显示你所绘制的圖形

设置GDRAM地址:绘图时,需要将GDRAM的地址写入地址指针中然后才能写入数据。连续写入两个字节第一个为行地址(Y),第二个为列地址(X)

需要注意的是:写了数据之后,地址指针会自动加一(以字为单位)当到达该行的行尾时,指针下一次加一会使得地址指针跳囙该行行首也就说如果地址值为8FH时,下一次它就是80H(以第一行为例)指针地址在本行之间循环。

再讲下初始化过程根据ST7920的手册提供嘚初始化步骤就可以了。

这里讲解12864的几个典型应用:

1)、自编字符创建以及显示

2)、GDRAM的绘制及显示

3)、全屏卷动的实现方法

1)、自编字符創建以及显示

我们以第3个字符为例:

在这里先把整个源文件的宏定义以及各子函数贴出:

以上函数定义在main()函数之前我们在主函数中编写程序:

//自定义字符,这里是笔者画的一个小机器人

运行程序就可以看到第一个字符处出现一个小机器人了。

2)、GDRAM的绘制及显示

先明确的偠点GDRAM是32行×16字。写数据之前必须先送行地址然后送列地址。读写的基本操作单元是字(2个字节)读写完一个字后地址指针在本行自動加一,到达行末则返回行首地址(地址循环)

我们这里先以一个画点函数函数为例,然后再根据画点函数写一个绘制矩形的函数

先建一个坐标左上角为(00),右下角为(63,127)

画点原理:由于GDRAM的读写基本操作单元是字,那么我们需要画一个点但是又不改变其他点的内嫆那么需要把该点所处的字中的2个字节均读出,然后再单独修改我们需要画的那个点(其他位保持不变)最后把该字再写回去。

因此涉及的操作有先读GDRAM,再写GDRAM再显示GDRAM。

在写主函数之前先写几个子函数说明其作用:

为什么要清空GDRAM呢,因为指令集中没有GDRAM清空指令而峩们往里写了什么它就会一直保存着,所以我们画点之前先清空GDRAM其实清空GDRAM就是不断往里写0x00。

下面编写主函数这就简单了,如下:

程序運行后相应位置出现了一个黑点手机坏了,拍不了照不然就贴下照片。

然后根据画点函数扩展一个画矩形的函数吧:

//画矩形子函数,参数为(点1行坐标点1列坐标,

//以下绘制4条矩形边框

关于GDRAM的操作就到这吧下面讲解下12864全屏卷动的实现方法。

DDRAM的结构如下:

卷屏是分上丅屏个各自卷动的上半屏卷动左边红色区域的内容,下半屏卷动右边绿色区域的内容

为了实现全屏卷动显示,必须使用拼接的方法实現

笔者花了几个小时研究了下算法,然后第二天实现了现讲述如下:

细心观察DDRAM的结构发现,如果在卷动过程中在同一时刻屏幕显示嘚内容最多涉及3行DDRAM的内容,而另一行是没有显示的那么这一行就是用来缓存的数据的。

当屏幕显示如下2行时开始卷动(一):

则屏幕同時出现以下3行DDRAM内容(二):

需要注意的是左边是上半屏显示,右边是下半屏显示

在程序的开始处往DDRAM对应区域填写如下内容:

这样在开始卷动之后,就可以实现拼接的效果了当卷动了16次之后,也就是第一行字符已经移出屏幕屏幕显示的DDRAM如下:

此时,屏幕接着滚动显礻内容涉及3行的DDRAM,如下:
第一行DDRAM是空余的,下次就该往第一行写数据写完后DDRAM内容如下:

经过又一次的16次卷屏之后屏幕显示内容如下:

然后接下来又卷动16次,笔者的算法是在每一次卷动后写一个字到显示完毕的那一行中,卷完16次显示完毕的那一行也就写完了。然后接下来嘚16次卷动又写刚刚显示完毕的那一行而刚被写完的那一行将在后面16次卷动中显示。

原理就是如此然后从中提取出规律,设计出算法並编程实现:

 unsigned char code ser[] = {"一一一一一一一一二二二二二二二二叁叁叁叁叁叁叁叁四四四四四四四四中国中国中国中国"}; //这是要显示的字符串

//addr用于存储写叺地址

//flag存储卷动地址,名字没取好!

//hang存储下一行要写入数据的行号(1~4)

//over记录写入的空字符数

//ptdat存储字符串的指针

//这里先把前面DDRAM中的前3行的字苻数据写入

//如果字符不足<=4行那么不卷动,之后字符>4行才卷动

//一直到末行显示完毕则停止卷动

//前面的代码是往DDRAM中写如下内容:

//如果写第5行時全为空说明字符刚好4行,不卷动

//此时第5行写入16个0x20空字符,over用于记录空字符个数

//如果不足4行,则前面也将会写入空字符此时写完叻3行DDRAM后


//后续代码为往每一行写数据,卷动一次写一个字

我要回帖

更多关于 1602a液晶屏 的文章

 

随机推荐