【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)

声明:本文转载于http://www.cnblogs.com/kingst,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有。

5

4.2 实验十二:12864(ST7565P)液晶驱动

显示概念

含有ST7565P 芯片的液晶,是没有文库支持的功能,但是没有就没有啦!液晶可以给我画画,那么它就是好东西了。

液晶的“显示”,液晶的“扫描次序”全部都与CGRAM分配有很大的关系。我们先了解“扫描次序”吧。

clip_image002[4]

宏观上一副液晶是 “64高 x 128宽”。微观上由芯片 ST7565P驱动的一副 12864 液晶是由“8个8 高 x 128宽的页”组成。 至于液晶的“扫描次序”就与4个命令有关系。

clip_image004[4]

上图表示了,当命令为0xA0列扫描是“自左向右”,如果命令式 0xA1列扫描是“自右向左”。总归,这两个命令控制了“列扫描次序”

clip_image006[4]

除了控制列扫描的命令以外,当然还有控制“页扫描次序”的命令。如上图,命令 0xC0 控制页扫描是“从下至上”,然而命令 0xc8 控制页扫描“又上至下”。无论页扫描的次序是“从上至下”还是“从下至上”,然而每一页的列填充,都是“低位开始高位结束”

clip_image008[4]

关于列扫描就有列填充的问题。我们知道每“一页”都是由“8 高 x 128宽”组成。换句话说,这里没有“行扫描”的概念,因为“一页”都是由“一个字节数据,列填充128次”成为一页。如上图中所示。

假设“页扫描次序”是由上至下,填充的值是 0x0f,那么经过 128次的“列扫描”以后,一页的扫描结果会是如上图所示。

关于 ST7565P 芯片,命令,和液晶扫描它们之间的关系而已,我们简单来总结一下:

(一)CGRAM分布是由8页组成。

(二)每一页是 由 一个字节填充 和128次列扫描 组成。

(三)列扫描次序与命令 0xA0 与 0xA1有关。

(四)页扫描次序与命令 0xC0 与 0xC8 有关。

(五)列填充字节的高位低位关系与页扫描命令有关。

(六)不存在行扫描概念。

clip_image010[4]

上图所示是 “页扫描”由上至下,“列扫描”由左至右,列填充值是 0x0f。

在CGRAM分布方面。CGRAM 可以说是由 8 bits x 1024 words,如果以“页”去分配,也就是说 8 page x 8 bits x 128 words , 那么“页”的偏移量就是 128。这一点要好好的记住。

那么关于“列地址”和“页地址”又是如何呢?

事实上 CGRAM 的建立不可能是 8 page x 8 bits x 128 words 那么完美的,必定有而外的列和页是不在显示的范围内,亦即第8页和第128~131列(如果页和列从0开始计算)。

虽然说完成一次列填充,列地址会自动递增,然而 ST7565P 对于列地址的控制显得很笨蛋。

clip_image012[4]

假设一开始我们设置“页地址0和列地址0作为起始地址”,当列填充到127(如果从0开始计算),列地址会自动递增至128, 这显然不是显示范围了(红色部分)。所以呀,每一次完成128次的列填充,就要“重新设置列起始地址和下一个页地址”。

关于设置也地址的命令很简单,就是 0xb?。“?”页地址的设置。假设输入0xb0, 也就是页地址0。

那么关于设置列地址的命令是 0x1?, 和 0x0?。命令 0x1?的“ ?”是列地址的“高四位”,0x0?的“?”是列地址的“低四位”。假设输入 0x10, 0x00, 也就是说列地址是 8'b 0000_0000, 亦即0。

假设我要设置页地址1(0000 0001),和列地址65(0100 0001)。那么我需要输入:

0xb1;

0x14;

0x01;

通过几页的内容,我只是要读者明白 ST7565P 芯片驱动液晶的规则和一些基本的概念,真正的好戏儿在后头。

clip_image014[4]

上图是在黑金开发板上的12864 液晶原理图。对于串行输入模式的液晶来说,重要的引脚有 P/S,CS,A0,DB6(SCL)和 DB7(SDI)而已。ST7565P芯片可以支持3种传输模式,当然最简单的传输模式还是SPI模式,然而控制“传输模式的引脚”就是 P/S 。当 P/S 被拉低时就是表示“串行传输模式”。

CS是使能信号(低电平有效)。A0 是命令或者数据决定信号(0 = 命令,1 = 数据 )。SCL是串行时钟信号,SI是串行输入信号。

至于其他的引脚属性自己去查相关的数据手册吧,这里只说重要的引脚而已。

clip_image016[4]

上图是ST7565P芯片,SPI传输的时序图。从图中我们可以明白,SI读取数据都是在SCL信号的上升沿。在这里我再重复一下:

CS是使能信号。SI是串行数据输入信号。SCL是串行时钟信号。AO是决定当前的SI信号上的是命令还是数据(1=数据,0=命令)。

在顺序操作上(以C语言为例),ST7565P芯片液晶的简易驱动概念如下:

01 // 建立最基本的传输函数
02 SPI_Send{ unsigned char Data } {}
03  
04 //建立传输数据函数
05 Send_Data( unsigned char Data)
06 {
07    A0 = 1; SPI_Send( Data );
08    ......
09 }
10  
11 //建立传输命令函数
12 Send_Command( unsigned char Data )
13 {
14    A0 = 0; SPI_Send( Data );
15    ......
16 }
17  
18<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值